calendlyr 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +7 -8
  3. data/CHANGELOG.md +2 -2
  4. data/README.md +46 -127
  5. data/calendlyr.gemspec +0 -1
  6. data/docs/resources/activity_log/list_activity_log_entries.md +34 -0
  7. data/docs/resources/availabilities/availability_rule.md +5 -0
  8. data/docs/resources/availabilities/user_availability_schedule.md +50 -0
  9. data/docs/resources/availabilities/user_busy_time.md +28 -0
  10. data/docs/resources/data_compliance.md +19 -0
  11. data/docs/resources/event_types/available_time.md +21 -0
  12. data/docs/resources/event_types/event_type.md +55 -0
  13. data/docs/resources/event_types/membership.md +29 -0
  14. data/docs/resources/event_types/profile.md +13 -0
  15. data/docs/resources/events/cancellation.md +18 -0
  16. data/docs/resources/events/event.md +62 -0
  17. data/docs/resources/events/guest.md +5 -0
  18. data/docs/resources/events/invitee.md +28 -0
  19. data/docs/resources/events/invitee_no_show.md +49 -0
  20. data/docs/resources/groups/group.md +56 -0
  21. data/docs/resources/groups/relationship.md +54 -0
  22. data/docs/resources/organizations/invitation.md +65 -0
  23. data/docs/resources/organizations/membership.md +58 -0
  24. data/docs/resources/organizations/organization.md +149 -0
  25. data/docs/resources/pagination.md +21 -0
  26. data/docs/resources/routing_forms/routing_form.md +48 -0
  27. data/docs/resources/routing_forms/submission.md +40 -0
  28. data/docs/resources/scheduling_link.md +26 -0
  29. data/docs/resources/share.md +28 -0
  30. data/docs/resources/user.md +111 -0
  31. data/docs/resources/webhooks/invitee_payload.md +42 -0
  32. data/docs/resources/webhooks/payload.md +5 -0
  33. data/docs/resources/webhooks/subscription.md +96 -0
  34. data/lib/calendlyr/client.rb +18 -2
  35. data/lib/calendlyr/collection.rb +2 -2
  36. data/lib/calendlyr/error.rb +42 -1
  37. data/lib/calendlyr/object.rb +6 -2
  38. data/lib/calendlyr/objects/activity_log.rb +11 -0
  39. data/lib/calendlyr/objects/availabilities/rule.rb +4 -0
  40. data/lib/calendlyr/objects/availabilities/user_busy_time.rb +7 -0
  41. data/lib/calendlyr/objects/availabilities/user_schedule.rb +13 -0
  42. data/lib/calendlyr/objects/event.rb +11 -0
  43. data/lib/calendlyr/objects/event_type.rb +15 -0
  44. data/lib/calendlyr/objects/event_types/available_time.rb +4 -0
  45. data/lib/calendlyr/objects/event_types/membership.rb +11 -0
  46. data/lib/calendlyr/objects/event_types/profile.rb +7 -0
  47. data/lib/calendlyr/objects/events/cancellation.rb +4 -0
  48. data/lib/calendlyr/objects/events/guest.rb +4 -0
  49. data/lib/calendlyr/objects/events/invitee.rb +11 -0
  50. data/lib/calendlyr/objects/events/invitee_no_show.rb +7 -0
  51. data/lib/calendlyr/objects/group.rb +15 -0
  52. data/lib/calendlyr/objects/groups/relationship.rb +15 -0
  53. data/lib/calendlyr/objects/organization.rb +67 -0
  54. data/lib/calendlyr/objects/organizations/invitation.rb +15 -0
  55. data/lib/calendlyr/objects/organizations/membership.rb +15 -0
  56. data/lib/calendlyr/objects/routing_form.rb +11 -0
  57. data/lib/calendlyr/objects/routing_forms/submission.rb +7 -0
  58. data/lib/calendlyr/objects/scheduling_link.rb +9 -0
  59. data/lib/calendlyr/objects/share.rb +9 -0
  60. data/lib/calendlyr/objects/user.rb +31 -0
  61. data/lib/calendlyr/objects/webhooks/invitee_payload.rb +15 -0
  62. data/lib/calendlyr/objects/webhooks/payload.rb +4 -0
  63. data/lib/calendlyr/objects/webhooks/subscription.rb +23 -0
  64. data/lib/calendlyr/resource.rb +2 -2
  65. data/lib/calendlyr/resources/availability.rb +19 -0
  66. data/lib/calendlyr/resources/data_compliance.rb +4 -0
  67. data/lib/calendlyr/resources/event.rb +40 -0
  68. data/lib/calendlyr/resources/event_type.rb +28 -0
  69. data/lib/calendlyr/resources/group.rb +22 -0
  70. data/lib/calendlyr/resources/organization.rb +40 -0
  71. data/lib/calendlyr/resources/outgoing_communication.rb +8 -0
  72. data/lib/calendlyr/resources/routing_form.rb +22 -0
  73. data/lib/calendlyr/resources/{scheduling_links.rb → scheduling_link.rb} +2 -2
  74. data/lib/calendlyr/resources/share.rb +8 -0
  75. data/lib/calendlyr/resources/user.rb +11 -0
  76. data/lib/calendlyr/resources/webhook.rb +25 -0
  77. data/lib/calendlyr/version.rb +1 -1
  78. data/lib/calendlyr.rb +70 -18
  79. data/test/calendlyr/objects/activity_log_test.rb +26 -0
  80. data/test/calendlyr/objects/availabilities/rule_test.rb +24 -0
  81. data/test/calendlyr/objects/availabilities/user_busy_time_test.rb +21 -0
  82. data/test/calendlyr/objects/availabilities/user_schedule_test.rb +26 -0
  83. data/test/calendlyr/objects/event_test.rb +32 -0
  84. data/test/calendlyr/objects/event_type_test.rb +43 -0
  85. data/test/calendlyr/objects/event_types/available_time_test.rb +20 -0
  86. data/test/calendlyr/objects/event_types/membership_test.rb +32 -0
  87. data/test/calendlyr/objects/event_types/profile_test.rb +23 -0
  88. data/test/calendlyr/objects/events/cancellation_test.rb +16 -0
  89. data/test/calendlyr/objects/events/guest_test.rb +16 -0
  90. data/test/calendlyr/objects/events/invitee_no_show_test.rb +23 -0
  91. data/test/calendlyr/objects/events/invitee_test.rb +35 -0
  92. data/test/calendlyr/objects/group_test.rb +40 -0
  93. data/test/calendlyr/objects/groups/relationship_test.rb +43 -0
  94. data/test/calendlyr/objects/organization_test.rb +157 -0
  95. data/test/calendlyr/objects/organizations/invitation_test.rb +34 -0
  96. data/test/calendlyr/objects/organizations/membership_test.rb +38 -0
  97. data/test/calendlyr/objects/routing_form_test.rb +26 -0
  98. data/test/calendlyr/objects/routing_forms/submission_test.rb +22 -0
  99. data/test/calendlyr/objects/scheduling_link_test.rb +17 -0
  100. data/test/calendlyr/objects/share_test.rb +19 -0
  101. data/test/calendlyr/objects/user_test.rb +81 -0
  102. data/test/calendlyr/objects/webhooks/invite_payload_test.rb +42 -0
  103. data/test/calendlyr/objects/webhooks/payload_test.rb +16 -0
  104. data/test/calendlyr/objects/webhooks/subscription_test.rb +42 -0
  105. data/test/calendlyr/resource_test.rb +12 -3
  106. data/test/calendlyr/resources/availabilities/user_busy_times_test.rb +31 -0
  107. data/test/calendlyr/resources/availabilities/user_schedules_test.rb +37 -0
  108. data/test/calendlyr/resources/data_compliance_test.rb +11 -0
  109. data/test/calendlyr/resources/event_types/membership_test.rb +22 -0
  110. data/test/calendlyr/resources/event_types_test.rb +55 -10
  111. data/test/calendlyr/resources/events/invitee_test.rb +31 -0
  112. data/test/calendlyr/resources/events_test.rb +22 -10
  113. data/test/calendlyr/resources/groups_test.rb +26 -0
  114. data/test/calendlyr/resources/organizations_test.rb +36 -100
  115. data/test/calendlyr/resources/outgoing_communications_test.rb +16 -0
  116. data/test/calendlyr/resources/scheduling_links_test.rb +1 -1
  117. data/test/calendlyr/resources/users_test.rb +9 -33
  118. data/test/calendlyr/resources/webhooks_test.rb +22 -13
  119. data/test/fixtures/activity_log/list.json +38 -0
  120. data/test/fixtures/availabilities/user_busy_times_list.json +39 -0
  121. data/test/fixtures/availabilities/user_schedules_list.json +93 -0
  122. data/test/fixtures/availabilities/user_schedules_retrieve.json +22 -0
  123. data/test/fixtures/data_compliance/delete_scheduled_event_data.json +1 -0
  124. data/test/fixtures/event_invitees/list.json +6 -6
  125. data/test/fixtures/event_invitees/retrieve.json +3 -3
  126. data/test/fixtures/event_type_available_times/list.json +22 -0
  127. data/test/fixtures/event_type_hosts/list.json +76 -0
  128. data/test/fixtures/event_types/create_one_off.json +45 -0
  129. data/test/fixtures/event_types/list.json +18 -4
  130. data/test/fixtures/event_types/retrieve.json +13 -2
  131. data/test/fixtures/events/cancel_invitee.json +8 -0
  132. data/test/fixtures/events/create_invitee_no_show.json +7 -0
  133. data/test/fixtures/events/delete_invitee_no_show.json +1 -0
  134. data/test/fixtures/events/retrieve_invitee_no_show.json +7 -0
  135. data/test/fixtures/group_relationships/list.json +83 -0
  136. data/test/fixtures/group_relationships/retrieve.json +29 -0
  137. data/test/fixtures/groups/list.json +19 -0
  138. data/test/fixtures/groups/retrieve.json +9 -0
  139. data/test/fixtures/objects/activity_log.json +24 -0
  140. data/test/fixtures/objects/availabilities/rule.json +10 -0
  141. data/test/fixtures/objects/availabilities/user_busy_time.json +10 -0
  142. data/test/fixtures/objects/availabilities/user_schedule.json +69 -0
  143. data/test/fixtures/objects/availability_rule.json +10 -0
  144. data/test/fixtures/objects/event.json +36 -0
  145. data/test/fixtures/objects/event_type.json +91 -0
  146. data/test/fixtures/objects/event_type_host.json +65 -0
  147. data/test/fixtures/objects/event_types/available_time.json +6 -0
  148. data/test/fixtures/objects/event_types/membership.json +65 -0
  149. data/test/fixtures/objects/event_types/profile.json +5 -0
  150. data/test/fixtures/objects/events/cancellation.json +6 -0
  151. data/test/fixtures/objects/events/guest.json +5 -0
  152. data/test/fixtures/objects/events/invitee.json +46 -0
  153. data/test/fixtures/objects/events/invitee_no_show.json +5 -0
  154. data/test/fixtures/objects/group.json +7 -0
  155. data/test/fixtures/objects/groups/relationship.json +27 -0
  156. data/test/fixtures/objects/organization.json +8 -0
  157. data/test/fixtures/objects/organizations/invitation.json +10 -0
  158. data/test/fixtures/objects/organizations/membership.json +18 -0
  159. data/test/fixtures/objects/routing_form.json +28 -0
  160. data/test/fixtures/objects/routing_forms/submission.json +27 -0
  161. data/test/fixtures/objects/scheduling_links/event_type.json +5 -0
  162. data/test/fixtures/objects/share.json +43 -0
  163. data/test/fixtures/objects/user.json +13 -0
  164. data/test/fixtures/objects/webhooks/invite_payload.json +83 -0
  165. data/test/fixtures/objects/webhooks/payload.json +66 -0
  166. data/test/fixtures/objects/webhooks/subscription.json +15 -0
  167. data/test/fixtures/organization_memberships/list.json +29 -0
  168. data/test/fixtures/organization_memberships/retrieve.json +20 -0
  169. data/test/fixtures/organizations/list_invitations.json +4 -4
  170. data/test/fixtures/organizations/list_memberships.json +12 -9
  171. data/test/fixtures/organizations/retrieve_invitation.json +3 -3
  172. data/test/fixtures/organizations/retrieve_membership.json +3 -3
  173. data/test/fixtures/outgoing_communications/list.json +26 -0
  174. data/test/fixtures/resources/401.json +2 -2
  175. data/test/fixtures/resources/403.json +1 -1
  176. data/test/fixtures/resources/403_payment_required.json +4 -0
  177. data/test/fixtures/resources/424.json +4 -0
  178. data/test/fixtures/routing_forms/list.json +39 -0
  179. data/test/fixtures/routing_forms/list_routing_form_submission.json +38 -0
  180. data/test/fixtures/routing_forms/retrieve.json +30 -0
  181. data/test/fixtures/routing_forms/retrieve_routing_form_submission.json +29 -0
  182. data/test/fixtures/shares/create.json +45 -0
  183. data/test/fixtures/user_availability_schedules/list.json +93 -0
  184. data/test/fixtures/user_availability_schedules/retrieve.json +22 -0
  185. data/test/fixtures/user_busy_times/list.json +39 -0
  186. data/test/fixtures/users/reload.json +5 -4
  187. data/test/fixtures/users/retrieve.json +5 -4
  188. data/test/fixtures/webhooks/create.json +4 -4
  189. data/test/fixtures/webhooks/list.json +4 -4
  190. data/test/fixtures/webhooks/retrieve.json +4 -4
  191. data/test/fixtures/webhooks/sample.json +105 -0
  192. metadata +159 -62
  193. data/lib/calendlyr/objects/event_invitees.rb +0 -4
  194. data/lib/calendlyr/objects/event_types.rb +0 -4
  195. data/lib/calendlyr/objects/events.rb +0 -4
  196. data/lib/calendlyr/objects/invitations.rb +0 -11
  197. data/lib/calendlyr/objects/memberships.rb +0 -7
  198. data/lib/calendlyr/objects/organizations.rb +0 -35
  199. data/lib/calendlyr/objects/scheduling_links.rb +0 -4
  200. data/lib/calendlyr/objects/users.rb +0 -19
  201. data/lib/calendlyr/objects/webhooks.rb +0 -11
  202. data/lib/calendlyr/resources/event_invitees.rb +0 -12
  203. data/lib/calendlyr/resources/event_types.rb +0 -12
  204. data/lib/calendlyr/resources/events.rb +0 -12
  205. data/lib/calendlyr/resources/organizations.rb +0 -33
  206. data/lib/calendlyr/resources/users.rb +0 -11
  207. data/lib/calendlyr/resources/webhooks.rb +0 -21
  208. data/test/calendlyr/resources/event_invitees_test.rb +0 -29
  209. data/test/fixtures/resources/409.json +0 -4
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module EventTypes
6
+ class AvailableTimeObjectTest < Minitest::Test
7
+ def setup
8
+ json = JSON.parse(fixture_file("objects/event_types/available_time")).merge(client: client)
9
+ @available_time = Calendlyr::EventTypes::AvailableTime.new(json)
10
+ end
11
+
12
+ def test_status
13
+ assert_equal "available", @available_time.status
14
+ end
15
+
16
+ def test_invitees_remaining
17
+ assert_equal 2, @available_time.invitees_remaining
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module EventTypes
6
+ class MembershipObjectTest < Minitest::Test
7
+ def setup
8
+ json = JSON.parse(fixture_file("objects/event_types/membership")).merge(client: client)
9
+ @membership = Calendlyr::EventTypes::Membership.new(json)
10
+
11
+ event_type_uuid = "AAAAAAAAAAAAAAAA"
12
+ response = {body: fixture_file("event_types/retrieve"), status: 200}
13
+ stub(path: "event_types/#{event_type_uuid}", response: response)
14
+
15
+ user_uuid = "AAAAAAAAAAAAAAAA"
16
+ response = {body: fixture_file("users/retrieve"), status: 200}
17
+ stub(path: "users/#{user_uuid}", response: response)
18
+ end
19
+
20
+ def test_associated_event_type
21
+ event_type = @membership.associated_event_type
22
+
23
+ assert_equal "15 Minute Meeting", event_type.name
24
+ end
25
+
26
+ def test_associated_member
27
+ member = @membership.associated_member
28
+
29
+ assert_equal "John Doe", member.name
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module EventTypes
6
+ class ProfileObjectTest < Minitest::Test
7
+ def setup
8
+ json = JSON.parse(fixture_file("objects/event_types/profile")).merge(client: client)
9
+ @profile = Calendlyr::EventTypes::Profile.new(json)
10
+
11
+ owner_uuid = "AAAAAAAAAAAAAAAA"
12
+ response = {body: fixture_file("users/retrieve"), status: 200}
13
+ stub(path: "users/#{owner_uuid}", response: response)
14
+ end
15
+
16
+ def test_associated_owner
17
+ owner = @profile.associated_owner
18
+
19
+ assert_equal "John Doe", owner.name
20
+ assert_equal Calendlyr::User, owner.class
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module Events
6
+ class CancellationObjectTest < Minitest::Test
7
+ def setup
8
+ json = JSON.parse(fixture_file("objects/events/cancellation")).merge(client: client)
9
+ @cancellation = Calendlyr::Events::Cancellation.new(json)
10
+ end
11
+
12
+ def test_canceled_by
13
+ assert "string", @cancellation.canceled_by
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module Events
6
+ class GuestObjectTest < Minitest::Test
7
+ def setup
8
+ json = JSON.parse(fixture_file("objects/events/guest")).merge(client: client)
9
+ @guest = Calendlyr::Events::Guest.new(json)
10
+ end
11
+
12
+ def test_email
13
+ assert "user@example.com", @guest.email
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module Events
6
+ class InviteeNoShowObjectTest < Minitest::Test
7
+ def setup
8
+ json = JSON.parse(fixture_file("objects/events/invitee_no_show")).merge(client: client)
9
+ @invitee_no_show = Calendlyr::Events::InviteeNoShow.new(json)
10
+ end
11
+
12
+ def test_created_at
13
+ assert "2019-01-02T03:04:05.678123Z", @invitee_no_show.created_at
14
+ end
15
+
16
+ def test_delete
17
+ response = {body: fixture_file("events/delete_invitee_no_show"), status: 204}
18
+ stub(method: :delete, path: "invitee_no_shows/#{@invitee_no_show.uuid}", response: response)
19
+
20
+ assert @invitee_no_show.delete
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module Events
6
+ class InviteeObjectTest < Minitest::Test
7
+ def setup
8
+ json = JSON.parse(fixture_file("objects/events/invitee")).merge(client: client)
9
+ @invitee = Calendlyr::Events::Invitee.new(json)
10
+ end
11
+
12
+ def test_email
13
+ assert "user@example.com", @invitee.email
14
+ end
15
+
16
+ def test_cancel
17
+ response = {body: fixture_file("events/cancel_invitee"), status: 201}
18
+ stub(method: :post, path: "scheduled_events/#{@invitee.uuid}/cancellation", response: response)
19
+
20
+ cancellation = @invitee.cancel(reason: "I'm busy")
21
+
22
+ assert_instance_of Calendlyr::Events::Cancellation, cancellation
23
+ assert_equal "host", cancellation.canceler_type
24
+ end
25
+
26
+ def test_create_no_shows
27
+ response = {body: fixture_file("events/create_invitee_no_show"), status: 201}
28
+ stub(method: :post, path: "invitee_no_shows", body: {invitee: @invitee.uri}, response: response)
29
+
30
+ no_show = @invitee.create_no_shows
31
+
32
+ assert_instance_of Calendlyr::Events::InviteeNoShow, no_show
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class GroupObjectTest < Minitest::Test
6
+ def setup
7
+ json = JSON.parse(fixture_file("objects/group")).merge(client: client)
8
+ @group = Calendlyr::Group.new(json)
9
+
10
+ @start_time = "2020-01-02T20:00:00.000000Z"
11
+ @end_time = "2020-01-07T24:00:00.000000Z"
12
+
13
+ group_uri = "https://api.calendly.com/groups/AAAAAAAAAAAAAAAA"
14
+ response = {body: fixture_file("events/list"), status: 200}
15
+ stub(path: "scheduled_events?group=#{group_uri}", response: response)
16
+
17
+ response = {body: fixture_file("group_relationships/list"), status: 200}
18
+ stub(path: "group_relationships?group=#{group_uri}", response: response)
19
+ end
20
+
21
+ def test_associated_organization
22
+ organization = @group.associated_organization
23
+
24
+ assert_equal Calendlyr::Organization, organization.class
25
+ end
26
+
27
+ def test_events
28
+ events = @group.events
29
+
30
+ assert_equal 1, events.data.size
31
+ assert_equal Calendlyr::Event, events.data.first.class
32
+ end
33
+
34
+ def test_group_relationships
35
+ group_relationships = @group.group_relationships
36
+
37
+ assert_equal 3, group_relationships.data.size
38
+ assert_equal Calendlyr::Groups::Relationship, group_relationships.data.first.class
39
+ end
40
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module Groups
6
+ class RelationshipObjectTest < Minitest::Test
7
+ def setup
8
+ json = JSON.parse(fixture_file("objects/groups/relationship")).merge(client: client)
9
+ @relationship = Calendlyr::Groups::Relationship.new(json)
10
+
11
+ group_uuid = "AAAAAAAAAAAAAAAA"
12
+ response = {body: fixture_file("groups/retrieve"), status: 200}
13
+ stub(path: "groups/#{group_uuid}", response: response)
14
+ end
15
+
16
+ def test_associated_organization
17
+ organization = @relationship.associated_organization
18
+
19
+ assert_equal Calendlyr::Organization, organization.class
20
+ end
21
+
22
+ def test_associated_group
23
+ group = @relationship.associated_group
24
+
25
+ assert_equal "Sales Team", group.name
26
+ end
27
+
28
+ def test_associated_owner
29
+ organization_membership_uuid = "AAAAAAAAAAAAAAAA"
30
+ response = {body: fixture_file("organization_memberships/retrieve"), status: 200}
31
+ stub(path: "organization_memberships/#{organization_membership_uuid}", response: response)
32
+
33
+ response = {body: fixture_file("users/retrieve"), status: 200}
34
+ stub(path: "users/AAAAAAAAAAAAAAAA", response: response)
35
+
36
+ owner = @relationship.associated_owner
37
+
38
+ assert_equal Calendlyr::Organizations::Membership, owner.class
39
+ assert_equal Calendlyr::User, owner.associated_user.class
40
+ assert_equal "John Doe", owner.associated_user.name
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,157 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class OrganizatonObjectTest < Minitest::Test
6
+ def setup
7
+ json = JSON.parse(fixture_file("objects/organization")).merge(client: client)
8
+ @organization = Calendlyr::Organization.new(json)
9
+
10
+ response = {body: fixture_file("users/retrieve"), status: 200}
11
+ stub(path: "users/AAAAAAAAAAAAAAAA", response: response)
12
+ end
13
+
14
+ def test_activity_logs
15
+ response = {body: fixture_file("activity_log/list"), status: 200}
16
+ stub(path: "activity_log_entries?organization=#{@organization.uri}", response: response)
17
+
18
+ activity_logs = @organization.activity_logs
19
+
20
+ assert_equal 1, activity_logs.data.size
21
+ assert_instance_of Calendlyr::ActivityLog, activity_logs.data.first
22
+ end
23
+
24
+ def test_events
25
+ response = {body: fixture_file("events/list"), status: 200}
26
+ stub(path: "scheduled_events?organization=#{@organization.uri}", response: response)
27
+
28
+ events = @organization.events
29
+
30
+ assert_equal 1, events.data.size
31
+ assert_instance_of Calendlyr::Event, events.data.first
32
+ end
33
+
34
+ def test_event_types
35
+ response = {body: fixture_file("event_types/list"), status: 200}
36
+ stub(path: "event_types?organization=#{@organization.uri}", response: response)
37
+
38
+ event_types = @organization.event_types
39
+
40
+ assert_equal 1, event_types.data.size
41
+ assert_instance_of Calendlyr::EventType, event_types.data.first
42
+ end
43
+
44
+ def test_routing_forms
45
+ response = {body: fixture_file("routing_forms/list"), status: 200}
46
+ stub(path: "routing_forms?organization=#{@organization.uri}", response: response)
47
+
48
+ routing_forms = @organization.routing_forms
49
+
50
+ assert_equal 1, routing_forms.data.size
51
+ assert_instance_of Calendlyr::RoutingForm, routing_forms.data.first
52
+ end
53
+
54
+ def test_groups
55
+ response = {body: fixture_file("groups/list"), status: 200}
56
+ stub(path: "groups?organization=#{@organization.uri}", response: response)
57
+
58
+ groups = @organization.groups
59
+
60
+ assert_equal 1, groups.data.size
61
+ assert_instance_of Calendlyr::Group, groups.data.first
62
+ end
63
+
64
+ def test_group_relationships
65
+ response = {body: fixture_file("group_relationships/list"), status: 200}
66
+ stub(path: "group_relationships?organization=#{@organization.uri}", response: response)
67
+
68
+ group_relationships = @organization.group_relationships
69
+
70
+ assert_equal 3, group_relationships.data.size
71
+ assert_instance_of Calendlyr::Groups::Relationship, group_relationships.data.first
72
+ end
73
+
74
+ def test_memberships
75
+ response = {body: fixture_file("organization_memberships/list"), status: 200}
76
+ stub(path: "organization_memberships?organization=#{@organization.uri}", response: response)
77
+
78
+ memberships = @organization.memberships
79
+
80
+ assert_equal 1, memberships.data.size
81
+ assert_instance_of Calendlyr::Organizations::Membership, memberships.data.first
82
+ end
83
+
84
+ def test_membership
85
+ response = {body: fixture_file("organization_memberships/retrieve"), status: 200}
86
+ stub(path: "organization_memberships/AAAAAAAAAAAAAAAA", response: response)
87
+
88
+ membership = @organization.membership(uuid: "AAAAAAAAAAAAAAAA")
89
+
90
+ assert_instance_of Calendlyr::User, membership.associated_user
91
+ assert_instance_of Calendlyr::Organizations::Membership, membership
92
+ end
93
+
94
+ def test_webhooks
95
+ scope = "user"
96
+ response = {body: fixture_file("webhooks/list"), status: 200}
97
+ stub(path: "webhook_subscriptions?organization=#{@organization.uri}&scope=#{scope}", response: response)
98
+ webhooks = @organization.webhooks(scope: scope)
99
+
100
+ assert_instance_of Calendlyr::Collection, webhooks
101
+ assert_instance_of Calendlyr::Webhooks::Subscription, webhooks.data.first
102
+ assert_equal 1, webhooks.data.count
103
+ assert_equal "sNjq4TvMDfUHEl7zHRR0k0E1PCEJWvdi", webhooks.next_page_token
104
+ end
105
+
106
+ def test_create_webhook
107
+ user_uri = "https://api.calendly.com/users/AAAAAAAAAAAAAAAA"
108
+ body = {url: "https://blah.foo/bar", events: ["invitee.created"], scope: "user", user: user_uri}
109
+ stub(method: :post, path: "webhook_subscriptions", body: body.merge(organization: @organization.uri), response: {body: fixture_file("webhooks/create"), status: 201})
110
+
111
+ assert @organization.create_webhook(**body)
112
+ end
113
+
114
+ def test_sample_webhook_data
115
+ stub(path: "sample_webhook_data?event=invitee.created&scope=organization&organization=https://api.calendly.com/organizations/012345678901234567890", response: {body: fixture_file("webhooks/sample"), status: 200})
116
+ webhook_data = @organization.sample_webhook_data(event: "invitee.created", scope: "organization")
117
+
118
+ assert_instance_of Calendlyr::Object, webhook_data
119
+ assert_equal "invitee.created", webhook_data.event
120
+ end
121
+
122
+ def test_invite_user
123
+ email = "email@example.com"
124
+ response = {body: fixture_file("organizations/invite"), status: 201}
125
+ stub(method: :post, path: "organizations/#{@organization.uuid}/invitations", body: {email: email}, response: response)
126
+ invitation = @organization.invite_user(email: email)
127
+
128
+ assert_instance_of Calendlyr::Organizations::Invitation, invitation
129
+ assert_equal email, invitation.email
130
+ end
131
+
132
+ def test_invitations
133
+ response = {body: fixture_file("organizations/list_invitations"), status: 200}
134
+ stub(path: "organizations/#{@organization.uuid}/invitations", response: response)
135
+ invitations = @organization.invitations
136
+
137
+ assert_instance_of Calendlyr::Collection, invitations
138
+ assert_instance_of Calendlyr::Organizations::Invitation, invitations.data.first
139
+ assert_equal 1, invitations.count
140
+ assert_equal "sNjq4TvMDfUHEl7zHRR0k0E1PCEJWvdi", invitations.next_page_token
141
+ end
142
+
143
+ def test_organization_invitation
144
+ response = {body: fixture_file("organizations/retrieve_invitation"), status: 200}
145
+ stub(path: "organizations/#{@organization.uuid}/invitations/abc123", response: response)
146
+ invitation = @organization.invitation(invitation_uuid: "abc123")
147
+
148
+ assert_instance_of Calendlyr::Organizations::Invitation, invitation
149
+ assert_equal "test@example.com", invitation.email
150
+ end
151
+
152
+ def test_revoke_invitation
153
+ response = {body: fixture_file("organizations/revoke_invitation"), status: 200}
154
+ stub(method: :delete, path: "organizations/#{@organization.uuid}/invitations/abc123", response: response)
155
+ assert @organization.revoke_invitation(invitation_uuid: "abc123")
156
+ end
157
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module Organizations
6
+ class InvitationObjectTest < Minitest::Test
7
+ def setup
8
+ json = JSON.parse(fixture_file("objects/organizations/invitation")).merge(client: client)
9
+ @invitation = Calendlyr::Organizations::Invitation.new(json)
10
+
11
+ response = {body: fixture_file("organizations/revoke_invitation"), status: 204}
12
+ stub(method: :delete, path: "organizations/#{@invitation.associated_organization.uuid}/invitations/#{@invitation.uuid}", response: response)
13
+
14
+ response = {body: fixture_file("users/retrieve"), status: 200}
15
+ stub(path: "users/#{Calendlyr::Object.get_slug(@invitation.user)}", response: response)
16
+ end
17
+
18
+ def test_associated_organization
19
+ organization = @invitation.associated_organization
20
+
21
+ assert_equal Calendlyr::Organization, organization.class
22
+ end
23
+
24
+ def test_associated_user
25
+ user = @invitation.associated_user
26
+
27
+ assert_equal "John Doe", user.name
28
+ end
29
+
30
+ def test_revoke
31
+ assert @invitation.revoke
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module Organizations
6
+ class MembershipObjectTest < Minitest::Test
7
+ def setup
8
+ json = JSON.parse(fixture_file("objects/organizations/membership")).merge(client: client)
9
+ @membership = Calendlyr::Organizations::Membership.new(json)
10
+
11
+ owner_uri = "https://api.calendly.com/organization_memberships/AAAAAAAAAAAAAAAA"
12
+ response = {body: fixture_file("group_relationships/list"), status: 200}
13
+ stub(path: "group_relationships?owner=#{owner_uri}", response: response)
14
+
15
+ user_uuid = "AAAAAAAAAAAAAAAA"
16
+ response = {body: fixture_file("users/retrieve"), status: 200}
17
+ stub(path: "users/#{user_uuid}", response: response)
18
+ end
19
+
20
+ def test_associated_organization
21
+ organization = @membership.associated_organization
22
+
23
+ assert_equal Calendlyr::Organization, organization.class
24
+ end
25
+
26
+ def test_associated_user
27
+ user = @membership.associated_user
28
+
29
+ assert_equal "John Doe", user.name
30
+ end
31
+
32
+ def test_group_relationships
33
+ group_relationships = @membership.group_relationships
34
+
35
+ assert_equal Calendlyr::Groups::Relationship, group_relationships.data.first.class
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class RoutingFormObjectTest < Minitest::Test
6
+ def setup
7
+ json = JSON.parse(fixture_file("objects/routing_form")).merge(client: client)
8
+ @routing_form = Calendlyr::RoutingForm.new(json)
9
+ end
10
+
11
+ def test_associated_organization
12
+ organization = @routing_form.associated_organization
13
+
14
+ assert_instance_of Calendlyr::Organization, organization
15
+ end
16
+
17
+ def test_submissions
18
+ response = {body: fixture_file("routing_forms/list_routing_form_submission"), status: 200}
19
+ stub(path: "routing_form_submissions?form=#{@routing_form.uri}", response: response)
20
+
21
+ submissions = @routing_form.submissions
22
+
23
+ assert_equal 1, submissions.data.size
24
+ assert_instance_of Calendlyr::RoutingForms::Submission, submissions.data.first
25
+ end
26
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module RoutingForms
6
+ class SubmissionObjectTest < Minitest::Test
7
+ def setup
8
+ json = JSON.parse(fixture_file("objects/routing_forms/submission")).merge(client: client)
9
+ @submission = Calendlyr::RoutingForms::Submission.new(json)
10
+ end
11
+
12
+ def test_associated_routing_form
13
+ uuid = "AAAAAAAAAAAAAAAA"
14
+ response = {body: fixture_file("routing_forms/retrieve"), status: 200}
15
+ stub(path: "routing_forms/#{uuid}", response: response)
16
+
17
+ routing_form = @submission.associated_routing_form
18
+
19
+ assert_equal Calendlyr::RoutingForm, routing_form.class
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class ScheduleLinkObjectTest < Minitest::Test
6
+ def test_event_type
7
+ json = JSON.parse(fixture_file("objects/scheduling_links/event_type")).merge(client: client)
8
+ @scheduling_link = Calendlyr::SchedulingLink.new(json)
9
+
10
+ response = {body: fixture_file("event_types/retrieve"), status: 200}
11
+ stub(path: "event_types/GBGBDCAADAEDCRZ2", response: response)
12
+
13
+ event_type = @scheduling_link.event_type
14
+
15
+ assert_equal Calendlyr::EventType, event_type.class
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class ShareObjectTest < Minitest::Test
6
+ def test_associated_scheduling_links
7
+ json = JSON.parse(fixture_file("objects/share")).merge(client: client)
8
+ @share = Calendlyr::Share.new(json)
9
+
10
+ response = {body: fixture_file("event_types/retrieve"), status: 200}
11
+ stub(path: "event_types/AAAAAAAAAAAAAAAA", response: response)
12
+
13
+ scheculing_links = @share.associated_scheduling_links
14
+
15
+ assert_equal 1, scheculing_links.size
16
+ assert_equal Calendlyr::SchedulingLink, scheculing_links.first.class
17
+ assert_equal Calendlyr::EventType, scheculing_links.first.event_type.class
18
+ end
19
+ end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class UserObjectTest < Minitest::Test
6
+ def setup
7
+ json = JSON.parse(fixture_file("objects/user")).merge(client: client)
8
+ @user = Calendlyr::User.new(json)
9
+
10
+ response = {body: fixture_file("users/retrieve"), status: 200}
11
+ stub(path: "users/#{@user.uuid}", response: response)
12
+ end
13
+
14
+ def test_organization
15
+ organization = @user.organization
16
+
17
+ assert_equal Calendlyr::Organization, organization.class
18
+ end
19
+
20
+ def test_availability_schedules
21
+ response = {body: fixture_file("availabilities/user_schedules_list"), status: 200}
22
+ stub(path: "user_availability_schedules?user=#{@user.uri}", response: response)
23
+
24
+ availability_schedules = @user.availability_schedules
25
+
26
+ assert_equal 2, availability_schedules.data.size
27
+ assert_equal Calendlyr::Availabilities::UserSchedule, availability_schedules.data.first.class
28
+ end
29
+
30
+ def test_event_types
31
+ response = {body: fixture_file("event_types/list"), status: 200}
32
+ stub(path: "event_types?user=#{@user.uri}", response: response)
33
+
34
+ event_types = @user.event_types
35
+
36
+ assert_equal 1, event_types.data.size
37
+ assert_equal Calendlyr::EventType, event_types.data.first.class
38
+ end
39
+
40
+ def test_events
41
+ response = {body: fixture_file("events/list"), status: 200}
42
+ stub(path: "scheduled_events?user=#{@user.uri}&organization=#{@user.current_organization}", response: response)
43
+
44
+ events = @user.events
45
+
46
+ assert_equal 1, events.data.size
47
+ assert_equal Calendlyr::Event, events.data.first.class
48
+ end
49
+
50
+ def test_memberships
51
+ response = {body: fixture_file("organization_memberships/list"), status: 200}
52
+ stub(path: "organization_memberships?user=#{@user.uri}&organization=#{@user.organization.uri}", response: response)
53
+
54
+ memberships = @user.memberships
55
+
56
+ assert_equal 1, memberships.data.size
57
+ assert_equal Calendlyr::Organizations::Membership, memberships.data.first.class
58
+ end
59
+
60
+ def test_membership
61
+ response = {body: fixture_file("organization_memberships/retrieve"), status: 200}
62
+ stub(path: "organization_memberships/AAAAAAAAAAAAAAAA", response: response)
63
+
64
+ membership = @user.membership(uuid: "AAAAAAAAAAAAAAAA")
65
+
66
+ assert_equal Calendlyr::User, membership.associated_user.class
67
+ assert_equal Calendlyr::Organizations::Membership, membership.class
68
+ end
69
+
70
+ def test_busy_times
71
+ start_time = "2020-01-02T20:00:00.000000Z"
72
+ end_time = "2020-01-07T24:00:00.000000Z"
73
+ response = {body: fixture_file("availabilities/user_busy_times_list"), status: 200}
74
+ stub(path: "user_busy_times?user=#{@user.uri}&start_time=#{start_time}&end_time=#{end_time}", response: response)
75
+
76
+ busy_times = @user.busy_times(start_time: start_time, end_time: end_time)
77
+
78
+ assert_equal 5, busy_times.data.size
79
+ assert_equal Calendlyr::Availabilities::UserBusyTime, busy_times.data.first.class
80
+ end
81
+ end