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,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module Webhooks
6
+ class InviteePayloadObjectTest < Minitest::Test
7
+ def setup
8
+ json = JSON.parse(fixture_file("objects/webhooks/invite_payload")).merge(client: client)
9
+ @invite_payload = Calendlyr::Webhooks::InviteePayload.new(json)
10
+
11
+ response = {body: fixture_file("users/retrieve"), status: 200}
12
+ stub(path: "users/AAAAAAAAAAAAAAAA", response: response)
13
+ end
14
+
15
+ def test_associated_event
16
+ response = {body: fixture_file("events/retrieve"), status: 200}
17
+ stub(path: "scheduled_events/AAAAAAAAAAAAAAAA", response: response)
18
+
19
+ event = @invite_payload.associated_event
20
+
21
+ assert_equal Calendlyr::Event, event.class
22
+ end
23
+
24
+ def test_associated_routing_form_submission
25
+ response = {body: fixture_file("routing_forms/retrieve_routing_form_submission"), status: 200}
26
+ stub(path: "routing_form_submissions/AAAAAAAAAAAAAAAA", response: response)
27
+
28
+ routing_form = @invite_payload.associated_routing_form_submission
29
+
30
+ assert_equal Calendlyr::RoutingForms::Submission, routing_form.class
31
+ end
32
+
33
+ def test_associated_invitee_no_show
34
+ response = {body: fixture_file("events/retrieve_invitee_no_show"), status: 200}
35
+ stub(path: "invitee_no_shows/6ee96ed4-83a3-4966-a278-cd19b3c02e09", response: response)
36
+
37
+ invitee_no_show = @invite_payload.associated_invitee_no_show
38
+
39
+ assert_equal Calendlyr::Events::InviteeNoShow, invitee_no_show.class
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module Webhooks
6
+ class PayloadObjectTest < Minitest::Test
7
+ def setup
8
+ json = JSON.parse(fixture_file("objects/webhooks/payload")).merge(client: client)
9
+ @payload = Calendlyr::Webhooks::Payload.new(json)
10
+ end
11
+
12
+ def test_event
13
+ assert_equal "invitee.created", @payload.event
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module Webhooks
6
+ class SubscriptionObjectTest < Minitest::Test
7
+ def setup
8
+ json = JSON.parse(fixture_file("objects/webhooks/subscription")).merge(client: client)
9
+ @subscription = Calendlyr::Webhooks::Subscription.new(json)
10
+
11
+ user_uuid = "AAAAAAAAAAAAAAAA"
12
+ response = {body: fixture_file("users/retrieve"), status: 200}
13
+ stub(path: "users/#{user_uuid}", response: response)
14
+ end
15
+
16
+ def test_associated_organization
17
+ organization = @subscription.associated_organization
18
+
19
+ assert_equal Calendlyr::Organization, organization.class
20
+ end
21
+
22
+ def test_associated_user
23
+ user = @subscription.associated_user
24
+
25
+ assert_equal Calendlyr::User, user.class
26
+ end
27
+
28
+ def test_associated_creator
29
+ creator = @subscription.associated_creator
30
+
31
+ assert_equal Calendlyr::User, creator.class
32
+ end
33
+
34
+ def test_active?
35
+ assert @subscription.active?
36
+ end
37
+
38
+ def test_disabled?
39
+ refute @subscription.disabled?
40
+ end
41
+ end
42
+ end
@@ -4,10 +4,19 @@ require "test_helper"
4
4
 
5
5
  class ResourceTest < Minitest::Test
6
6
  def test_handle_response_error
7
- error_code = Calendlyr::Resource::ERROR_CODES.sample
8
- stub(path: "users/me", response: {body: fixture_file("resources/#{error_code}"), status: error_code.to_i})
7
+ Calendlyr::ResponseErrorHandler::ERROR_TYPES.each do |error_code, error_class|
8
+ stub(path: "users/me", response: {body: fixture_file("resources/#{error_code}"), status: error_code.to_i})
9
9
 
10
- assert_raises Calendlyr::Error do
10
+ assert_raises "Calendlyr::#{error_class}" do
11
+ client.me
12
+ end
13
+ end
14
+ end
15
+
16
+ def test_handle_response_error_payment
17
+ stub(path: "users/me", response: {body: fixture_file("resources/403_payment_required"), status: 403})
18
+
19
+ assert_raises Calendlyr::PaymentRequired do
11
20
  client.me
12
21
  end
13
22
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module Availabilities
6
+ class UserBusyTimeTest < Minitest::Test
7
+ def setup
8
+ @user_uri = "https://api.calendly.com/users/abc123"
9
+ @start_time = "2020-01-02T20:00:00.000000Z"
10
+ @end_time = "2020-01-02T20:30:00.000000Z"
11
+ response = {body: fixture_file("user_busy_times/list"), status: 200}
12
+ stub(path: "user_busy_times?user=#{@user_uri}&start_time=#{@start_time}&end_time=#{@end_time}", response: response)
13
+ end
14
+
15
+ def test_list
16
+ user_busy_times = client.availability.list_user_busy_times(user: @user_uri, start_time: @start_time, end_time: @end_time)
17
+
18
+ assert_equal Calendlyr::Collection, user_busy_times.class
19
+ assert_equal Calendlyr::Availabilities::UserBusyTime, user_busy_times.data.first.class
20
+ assert_equal 5, user_busy_times.data.count
21
+ end
22
+
23
+ def test_list_from_user
24
+ user_busy_times = client.me.busy_times(start_time: @start_time, end_time: @end_time)
25
+
26
+ assert_equal Calendlyr::Collection, user_busy_times.class
27
+ assert_equal Calendlyr::Availabilities::UserBusyTime, user_busy_times.data.first.class
28
+ assert_equal 5, user_busy_times.data.count
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module Availabilities
6
+ class UserScheduleTest < Minitest::Test
7
+ def setup
8
+ @user_uri = "https://api.calendly.com/users/abc123"
9
+ @uuid = "abc123"
10
+ stub(path: "users/abc123", response: {body: fixture_file("users/retrieve"), status: 200})
11
+ stub(path: "user_availability_schedules?user=#{@user_uri}", response: {body: fixture_file("user_availability_schedules/list"), status: 200})
12
+ stub(path: "user_availability_schedules/#{@uuid}", response: {body: fixture_file("user_availability_schedules/retrieve"), status: 200})
13
+ end
14
+
15
+ def test_list
16
+ user_availability_schedules = client.availability.list_user_schedules(user: @user_uri)
17
+
18
+ assert_equal 2, user_availability_schedules.data.count
19
+ assert_equal Calendlyr::Collection, user_availability_schedules.class
20
+ assert_equal Calendlyr::Availabilities::UserSchedule, user_availability_schedules.data.first.class
21
+ end
22
+
23
+ def test_list_from_user
24
+ availability_schedules = client.me.availability_schedules
25
+
26
+ assert_equal Calendlyr::Collection, availability_schedules.class
27
+ assert_equal Calendlyr::Availabilities::UserSchedule, availability_schedules.data.first.class
28
+ assert_equal 2, availability_schedules.data.count
29
+ end
30
+
31
+ def test_retrieve
32
+ user_availability_schedule = client.availability.retrieve_user_schedule(uuid: @uuid)
33
+
34
+ assert_equal Calendlyr::Availabilities::UserSchedule, user_availability_schedule.class
35
+ end
36
+ end
37
+ end
@@ -10,4 +10,15 @@ class DataComplianceResourceTest < Minitest::Test
10
10
 
11
11
  assert client.data_compliance.delete_invitee_data(**body)
12
12
  end
13
+
14
+ def test_delete_scheduled_event_data
15
+ body = {
16
+ start_time: "2019-01-02T03:04:05.678123Z",
17
+ end_time: "2021-01-01T02:04:05.678123Z"
18
+ }
19
+ response = {body: fixture_file("data_compliance/delete_scheduled_event_data"), status: 202}
20
+ stub(method: :post, path: "data_compliance/deletion/events", body: body, response: response)
21
+
22
+ assert client.data_compliance.delete_scheduled_event_data(**body)
23
+ end
13
24
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module EventTypes
6
+ class MembershipTest < Minitest::Test
7
+ def setup
8
+ @event_type_uri = "https://api.calendly.com/event_types/abc123"
9
+ response = {body: fixture_file("event_type_hosts/list"), status: 200}
10
+ stub(path: "event_type_memberships?event_type=#{@event_type_uri}", response: response)
11
+ end
12
+
13
+ def test_list
14
+ event_type_hosts = client.event_types.list_memberships(event_type: @event_type_uri)
15
+
16
+ assert_equal Calendlyr::Collection, event_type_hosts.class
17
+ assert_equal Calendlyr::EventTypes::Membership, event_type_hosts.data.first.class
18
+ assert_equal 1, event_type_hosts.data.count
19
+ assert_equal "sNjq4TvMDfUHEl7zHRR0k0E1PCEJWvdi", event_type_hosts.next_page_token
20
+ end
21
+ end
22
+ end
@@ -3,24 +3,69 @@
3
3
  require "test_helper"
4
4
 
5
5
  class EventTypesResourceTest < Minitest::Test
6
+ def setup
7
+ @user_uri = "https://api.calendly.com/users/abc123"
8
+ @organization_uri = "https://api.calendly.com/organizations/abc123"
9
+ @event_type_uuid = "AAAAAAAAAAAAAAAA"
10
+ list_response = {body: fixture_file("event_types/list"), status: 200}
11
+ stub(path: "event_types?user=#{@user_uri}&organization=#{@organization_uri}", response: list_response)
12
+ stub(path: "event_types?organization=#{@organization_uri}", response: list_response)
13
+ stub(path: "event_types?user=#{@user_uri}", response: list_response)
14
+ retrieve_response = {body: fixture_file("event_types/retrieve"), status: 200}
15
+ stub(path: "event_types/#{@event_type_uuid}", response: retrieve_response)
16
+ end
17
+
6
18
  def test_list
7
- user_uri = "https://api.calendly.com/users/AAAAAAAAAAAAAAAA"
8
- organization_uri = "https://api.calendly.com/organizations/AAAAAAAAAAAAAAAA"
9
- response = {body: fixture_file("event_types/list"), status: 200}
10
- stub(path: "event_types?user=#{user_uri}&organization=#{organization_uri}", response: response)
11
- event_types = client.event_types.list(user_uri: user_uri, organization_uri: organization_uri)
19
+ event_types = client.event_types.list(user: @user_uri, organization: @organization_uri)
20
+
21
+ assert_equal Calendlyr::Collection, event_types.class
22
+ assert_equal Calendlyr::EventType, event_types.data.first.class
23
+ assert_equal 1, event_types.data.count
24
+ assert_equal "sNjq4TvMDfUHEl7zHRR0k0E1PCEJWvdi", event_types.next_page_token
25
+ end
26
+
27
+ def test_list_from_user
28
+ event_types = client.me.event_types
12
29
 
13
30
  assert_equal Calendlyr::Collection, event_types.class
14
31
  assert_equal Calendlyr::EventType, event_types.data.first.class
15
- assert_equal 1, event_types.count
32
+ assert_equal 1, event_types.data.count
16
33
  assert_equal "sNjq4TvMDfUHEl7zHRR0k0E1PCEJWvdi", event_types.next_page_token
17
34
  end
18
35
 
19
36
  def test_retrieve
20
- event_type_uuid = "AAAAAAAAAAAAAAAA"
21
- response = {body: fixture_file("event_types/retrieve"), status: 200}
22
- stub(path: "event_types/#{event_type_uuid}", response: response)
23
- event_type = client.event_types.retrieve(event_type_uuid: event_type_uuid)
37
+ event_type = client.event_types.retrieve(uuid: @event_type_uuid)
38
+
39
+ assert_equal Calendlyr::EventType, event_type.class
40
+ assert_equal "https://api.calendly.com/event_types/AAAAAAAAAAAAAAAA", event_type.uri
41
+ assert_equal "15 Minute Meeting", event_type.name
42
+ assert_equal "acmesales", event_type.slug
43
+ assert_equal 30, event_type.duration
44
+ end
45
+
46
+ def test_create_one_off
47
+ body = {
48
+ name: "My Meeting",
49
+ host: "https://api.calendly.com/users/AAAAAAAAAAAAAAAA",
50
+ co_hosts: [
51
+ "https://api.calendly.com/users/BBBBBBBBBBBBBBBB",
52
+ "https://api.calendly.com/users/CCCCCCCCCCCCCCCC"
53
+ ],
54
+ duration: 30,
55
+ timezone: "string",
56
+ date_setting: {
57
+ type: "date_range",
58
+ start_date: "2020-01-07",
59
+ end_date: "2020-01-09"
60
+ },
61
+ location: {
62
+ kind: "physical",
63
+ location: "Main Office",
64
+ additonal_info: "string"
65
+ }
66
+ }
67
+ stub(method: :post, path: "one_off_event_types", response: {body: fixture_file("event_types/create_one_off"), status: 201})
68
+ event_type = client.event_types.create_one_off(**body)
24
69
 
25
70
  assert_equal Calendlyr::EventType, event_type.class
26
71
  assert_equal "https://api.calendly.com/event_types/AAAAAAAAAAAAAAAA", event_type.uri
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module Events
6
+ class InviteeTest < Minitest::Test
7
+ def test_list
8
+ event_uuid = "ABCDABCDABCDABCD"
9
+ response = {body: fixture_file("event_invitees/list"), status: 200}
10
+ stub(path: "scheduled_events/#{event_uuid}/invitees", response: response)
11
+ event_invitees = client.events.list_invitees(uuid: event_uuid)
12
+
13
+ assert_equal Calendlyr::Collection, event_invitees.class
14
+ assert_equal Calendlyr::Events::Invitee, event_invitees.data.first.class
15
+ assert_equal 1, event_invitees.data.count
16
+ assert_equal "sNjq4TvMDfUHEl7zHRR0k0E1PCEJWvdi", event_invitees.next_page_token
17
+ end
18
+
19
+ def test_retrieve
20
+ event_uuid = "abc123"
21
+ invitee_uuid = "abc123"
22
+ response = {body: fixture_file("event_invitees/retrieve"), status: 200}
23
+ stub(path: "scheduled_events/#{event_uuid}/invitees/#{invitee_uuid}", response: response)
24
+ event_invitee = client.events.retrieve_invitee(event_uuid: event_uuid, invitee_uuid: invitee_uuid)
25
+
26
+ assert_equal Calendlyr::Events::Invitee, event_invitee.class
27
+ assert_equal "https://api.calendly.com/api/v2/scheduled_events/ABCDABCDABCDABCD/invitees/ABCDABCDABCDABCD", event_invitee.uri
28
+ assert_equal "John Doe", event_invitee.name
29
+ end
30
+ end
31
+ end
@@ -3,24 +3,36 @@
3
3
  require "test_helper"
4
4
 
5
5
  class EventsResourceTest < Minitest::Test
6
+ def setup
7
+ @user_uri = "https://api.calendly.com/users/abc123"
8
+ @organization_uri = "https://api.calendly.com/organizations/abc123"
9
+ @event_uuid = "abc123"
10
+ list_response = {body: fixture_file("events/list"), status: 200}
11
+ stub(path: "scheduled_events?user=#{@user_uri}&organization=#{@organization_uri}", response: list_response)
12
+ retrieve_response = {body: fixture_file("events/retrieve"), status: 200}
13
+ stub(path: "scheduled_events/#{@event_uuid}", response: retrieve_response)
14
+ end
15
+
6
16
  def test_list
7
- user_uri = "https://api.calendly.com/users/AAAAAAAAAAAAAAAA"
8
- organization_uri = "https://api.calendly.com/organizations/AAAAAAAAAAAAAAAA"
9
- response = {body: fixture_file("events/list"), status: 200}
10
- stub(path: "scheduled_events?user=#{user_uri}&organization=#{organization_uri}", response: response)
11
- events = client.events.list(user_uri: user_uri, organization_uri: organization_uri)
17
+ events = client.events.list(user: @user_uri, organization: @organization_uri)
18
+
19
+ assert_equal Calendlyr::Collection, events.class
20
+ assert_equal Calendlyr::Event, events.data.first.class
21
+ assert_equal 1, events.data.count
22
+ assert_equal "sNjq4TvMDfUHEl7zHRR0k0E1PCEJWvdi", events.next_page_token
23
+ end
24
+
25
+ def test_list_from_user
26
+ events = client.me.events
12
27
 
13
28
  assert_equal Calendlyr::Collection, events.class
14
29
  assert_equal Calendlyr::Event, events.data.first.class
15
- assert_equal 1, events.count
30
+ assert_equal 1, events.data.count
16
31
  assert_equal "sNjq4TvMDfUHEl7zHRR0k0E1PCEJWvdi", events.next_page_token
17
32
  end
18
33
 
19
34
  def test_retrieve
20
- event_uuid = "AAAAAAAAAAAAAAAA"
21
- response = {body: fixture_file("events/retrieve"), status: 200}
22
- stub(path: "scheduled_events/#{event_uuid}", response: response)
23
- event = client.events.retrieve(event_uuid: event_uuid)
35
+ event = client.events.retrieve(uuid: @event_uuid)
24
36
 
25
37
  assert_equal Calendlyr::Event, event.class
26
38
  assert_equal "https://api.calendly.com/scheduled_events/GBGBDCAADAEDCRZ2", event.uri
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class GroupsResourceTest < Minitest::Test
6
+ def test_list
7
+ organization = "https://api.calendly.com/groups/AAAAAAAAAAAAAAAA"
8
+ response = {body: fixture_file("groups/list"), status: 200}
9
+ stub(path: "groups?organization=#{organization}", response: response)
10
+
11
+ groups = client.groups.list(organization: organization)
12
+
13
+ assert_equal 1, groups.data.size
14
+ assert_instance_of Calendlyr::Group, groups.data.first
15
+ end
16
+
17
+ def test_retrieve
18
+ uuid = "abc123"
19
+ response = {body: fixture_file("group_relationships/retrieve"), status: 200}
20
+ stub(path: "group_relationships/#{uuid}", response: response)
21
+ relationship = client.groups.retrieve_relationship(uuid: uuid)
22
+
23
+ assert_instance_of Calendlyr::Groups::Relationship, relationship
24
+ assert_equal "member", relationship.role
25
+ end
26
+ end
@@ -11,145 +11,81 @@ class OrganizationsResourceTest < Minitest::Test
11
11
 
12
12
  invitation = client.organizations.invite(organization_uuid: organization_uuid, email: email)
13
13
 
14
- assert_equal Calendlyr::Invitation, invitation.class
14
+ assert_equal Calendlyr::Organizations::Invitation, invitation.class
15
15
  assert_equal email, invitation.email
16
16
  end
17
17
 
18
18
  def test_list_invitations
19
- organization_uuid = "AAAAAAAAAAAAAAAA"
19
+ organization_uuid = "abc123"
20
20
  response = {body: fixture_file("organizations/list_invitations"), status: 200}
21
21
  stub(path: "organizations/#{organization_uuid}/invitations", response: response)
22
- invitations = client.organizations.list_invitations(organization_uuid: organization_uuid)
22
+ invitations = client.organizations.list_invitations(uuid: organization_uuid)
23
23
 
24
24
  assert_equal Calendlyr::Collection, invitations.class
25
- assert_equal Calendlyr::Invitation, invitations.data.first.class
25
+ assert_equal Calendlyr::Organizations::Invitation, invitations.data.first.class
26
26
  assert_equal 1, invitations.count
27
27
  assert_equal "sNjq4TvMDfUHEl7zHRR0k0E1PCEJWvdi", invitations.next_page_token
28
28
  end
29
29
 
30
- def test_list_memberships
31
- user_uri = "AAAAAAAAAAAAAAAA"
32
- organization_uri = "AAAAAAAAAAAAAAAA"
33
- response = {body: fixture_file("organizations/list_memberships"), status: 200}
34
- stub(path: "organization_memberships?user=#{user_uri}&organization=#{organization_uri}", response: response)
35
- memberships = client.organizations.list_memberships(user_uri: user_uri, organization_uri: organization_uri)
36
-
37
- assert_equal Calendlyr::Collection, memberships.class
38
- assert_equal Calendlyr::Membership, memberships.data.first.class
39
- assert_equal 1, memberships.count
40
- assert_equal "sNjq4TvMDfUHEl7zHRR0k0E1PCEJWvdi", memberships.next_page_token
41
- end
42
-
43
- def test_list_webhooks
44
- stub(path: "webhook_subscriptions?organization=#{client.organization.uri}&scope=user", response: {body: fixture_file("webhooks/list"), status: 200})
45
- webhooks = client.organization.list_webhooks(scope: "user")
46
-
47
- assert_equal Calendlyr::Collection, webhooks.class
48
- assert_equal Calendlyr::Webhook, webhooks.data.first.class
49
- assert_equal 1, webhooks.count
50
- assert_equal "sNjq4TvMDfUHEl7zHRR0k0E1PCEJWvdi", webhooks.next_page_token
51
- end
52
-
53
30
  def test_create_webhook
54
31
  body = {url: "https://blah.foo/bar", events: ["invitee.created"], organization: client.organization.uri, scope: "user", user: client.me.uri}
55
32
  stub(method: :post, path: "webhook_subscriptions", body: body, response: {body: fixture_file("webhooks/create"), status: 201})
56
33
 
57
- assert client.webhooks.create(url: body[:url], events: body[:events], organization_uri: body[:organization], scope: body[:scope], user_uri: body[:user])
34
+ assert client.webhooks.create(**body)
58
35
  end
59
36
 
60
37
  def test_retrieve_invitation
61
- invitation_uuid = "AAAAAAAAAAAAAAAA"
38
+ invitation_uuid = "abc123"
62
39
 
63
40
  stub(path: "organizations/#{client.organization.uuid}/invitations/#{invitation_uuid}", response: {body: fixture_file("organizations/retrieve_invitation"), status: 200})
64
41
  stub(method: :delete, path: "organizations/#{client.organization.uuid}/invitations/#{invitation_uuid}", response: {body: fixture_file("organizations/revoke_invitation")})
65
- invitation = client.organizations.retrieve_invitation(organization_uuid: client.organization.uuid, invitation_uuid: invitation_uuid)
42
+ invitation = client.organizations.retrieve_invitation(org_uuid: client.organization.uuid, uuid: invitation_uuid)
66
43
 
67
- assert_equal Calendlyr::Invitation, invitation.class
44
+ assert_equal Calendlyr::Organizations::Invitation, invitation.class
68
45
  assert_equal "test@example.com", invitation.email
69
46
 
70
47
  assert invitation.associated_organization
71
48
  assert invitation.revoke
72
49
  end
73
50
 
74
- def test_retrieve_membership
75
- membership_uuid = "AAAAAAAAAAAAAAAA"
76
- response = {body: fixture_file("organizations/retrieve_membership"), status: 200}
77
- stub(path: "organization_memberships/#{membership_uuid}", response: response)
78
- stub(path: "users/#{membership_uuid}", response: {body: fixture_file("users/retrieve"), status: 200})
79
- membership = client.organizations.retrieve_membership(membership_uuid: membership_uuid)
80
-
81
- assert_equal Calendlyr::Membership, membership.class
82
- assert_equal "test@example.com", membership.user.email
83
- assert_equal membership.associated_user, client.users.retrieve(user_uuid: membership_uuid)
84
- end
85
-
86
51
  def test_revoke_invitation
87
- organization_uuid = "AAAAAAAAAAAAAAAA"
88
- invitation_uuid = "AAAAAAAAAAAAAAAA"
52
+ organization_uuid = "abc123"
53
+ invitation_uuid = "abc123"
89
54
  response = {body: fixture_file("organizations/revoke_invitation")}
90
55
  stub(method: :delete, path: "organizations/#{organization_uuid}/invitations/#{invitation_uuid}", response: response)
91
- assert client.organizations.revoke_invitation(organization_uuid: organization_uuid, invitation_uuid: invitation_uuid)
92
- end
93
-
94
- def test_remove_user
95
- membership_uuid = "AAAAAAAAAAAAAAAA"
96
- response = {body: fixture_file("organizations/remove_user")}
97
- stub(method: :delete, path: "organization_memberships/#{membership_uuid}", response: response)
98
- assert client.organizations.remove_user(membership_uuid: membership_uuid)
99
- end
100
-
101
- def test_organization_invite_user
102
- email = "email@example.com"
103
- response = {body: fixture_file("organizations/invite"), status: 201}
104
- stub(method: :post, path: "organizations/#{client.organization.uuid}/invitations", body: {email: email}, response: response)
105
-
106
- invitation = client.organization.invite_user(email: email)
107
-
108
- assert_equal Calendlyr::Invitation, invitation.class
109
- assert_equal email, invitation.email
110
- end
111
-
112
- def test_organization_list_invitations
113
- stub(path: "organizations/#{client.organization.uuid}/invitations", response: {body: fixture_file("organizations/list_invitations"), status: 200})
114
- invitations = client.organization.list_invitations
115
-
116
- assert_equal Calendlyr::Collection, invitations.class
117
- assert_equal Calendlyr::Invitation, invitations.data.first.class
118
- assert_equal 1, invitations.count
119
- assert_equal "sNjq4TvMDfUHEl7zHRR0k0E1PCEJWvdi", invitations.next_page_token
120
- end
121
-
122
- def test_organization_revoke_invitation
123
- stub(method: :delete, path: "organizations/#{client.organization.uuid}/invitations/AAAAAAAAAAAAAAAA", response: {body: fixture_file("organizations/revoke_invitation")})
124
- assert client.organization.revoke_invitation(invitation_uuid: "AAAAAAAAAAAAAAAA")
56
+ assert client.organizations.revoke_invitation(org_uuid: organization_uuid, uuid: invitation_uuid)
125
57
  end
126
58
 
127
- def test_organization_invitation
128
- response = {body: fixture_file("organizations/retrieve_invitation"), status: 200}
129
- stub(path: "organizations/#{client.organization.uuid}/invitations/AAAAAAAAAAAAAAAA", response: response)
130
- invitation = client.organization.invitation(invitation_uuid: "AAAAAAAAAAAAAAAA")
59
+ # Memberships
60
+ def test_list_memberships
61
+ user_uri = "abc123"
62
+ organization_uri = "abc123"
63
+ response = {body: fixture_file("organizations/list_memberships"), status: 200}
64
+ stub(path: "organization_memberships?user=#{user_uri}&organization=#{organization_uri}", response: response)
65
+ memberships = client.organizations.list_memberships(user: user_uri, organization: organization_uri)
131
66
 
132
- assert_equal Calendlyr::Invitation, invitation.class
133
- assert_equal "test@example.com", invitation.email
67
+ assert_equal Calendlyr::Collection, memberships.class
68
+ assert_equal Calendlyr::Organizations::Membership, memberships.data.first.class
69
+ assert_equal 1, memberships.data.count
70
+ assert_equal "sNjq4TvMDfUHEl7zHRR0k0E1PCEJWvdi", memberships.next_page_token
134
71
  end
135
72
 
136
- def test_organization_events
137
- stub(path: "scheduled_events?organization=#{client.organization.uri}", response: {body: fixture_file("events/list"), status: 200})
138
- events = client.organization.events
73
+ def test_retrieve_membership
74
+ membership_uuid = "abc123"
75
+ response = {body: fixture_file("organizations/retrieve_membership"), status: 200}
76
+ stub(path: "organization_memberships/#{membership_uuid}", response: response)
77
+ stub(path: "users/#{membership_uuid}", response: {body: fixture_file("users/retrieve"), status: 200})
78
+ membership = client.organizations.retrieve_membership(uuid: membership_uuid)
139
79
 
140
- assert_equal Calendlyr::Collection, events.class
141
- assert_equal Calendlyr::Event, events.data.first.class
142
- assert_equal 1, events.count
143
- assert_equal "sNjq4TvMDfUHEl7zHRR0k0E1PCEJWvdi", events.next_page_token
80
+ assert_equal Calendlyr::Organizations::Membership, membership.class
81
+ assert_equal "test@example.com", membership.user.email
82
+ assert_equal membership.associated_user, client.users.retrieve(uuid: membership_uuid)
144
83
  end
145
84
 
146
- def test_organization_memberships
147
- stub(path: "organization_memberships?organization=#{client.organization.uri}", response: {body: fixture_file("organizations/list_memberships"), status: 200})
148
- memberships = client.organization.memberships
149
-
150
- assert_equal Calendlyr::Collection, memberships.class
151
- assert_equal Calendlyr::Membership, memberships.data.first.class
152
- assert_equal 1, memberships.count
153
- assert_equal "sNjq4TvMDfUHEl7zHRR0k0E1PCEJWvdi", memberships.next_page_token
85
+ def test_remove_user
86
+ membership_uuid = "abc123"
87
+ response = {body: fixture_file("organizations/remove_user")}
88
+ stub(method: :delete, path: "organization_memberships/#{membership_uuid}", response: response)
89
+ assert client.organizations.remove_user(uuid: membership_uuid)
154
90
  end
155
91
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class OutgoingCommunicationsResourceTest < Minitest::Test
6
+ def test_list
7
+ response = {body: fixture_file("outgoing_communications/list"), status: 200}
8
+ stub(path: "outgoing_communications", response: response)
9
+ outgoing_communications = client.outgoing_communications.list
10
+
11
+ assert_equal Calendlyr::Collection, outgoing_communications.class
12
+ assert_equal Calendlyr::Object, outgoing_communications.data.first.class
13
+ assert_equal 1, outgoing_communications.data.count
14
+ assert_equal "sms", outgoing_communications.data.first.type
15
+ end
16
+ end
@@ -10,6 +10,6 @@ class SchedulingLinksResourceTest < Minitest::Test
10
10
  response = {body: fixture_file("scheduling_links/create"), status: 201}
11
11
  stub(method: :post, path: "scheduling_links", body: {owner: owner_uri, max_event_count: max_event_count, owner_type: owner_type}, response: response)
12
12
 
13
- assert client.scheduling_links.create(owner_uri: owner_uri, max_event_count: max_event_count, owner_type: owner_type)
13
+ assert client.scheduling_links.create(owner: owner_uri, max_event_count: max_event_count, owner_type: owner_type)
14
14
  end
15
15
  end