calendlyr 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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