calendlyr 0.3.5 → 0.6.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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +1 -1
- data/CHANGELOG.md +3 -31
- data/README.md +27 -4
- data/lib/calendlyr/client.rb +3 -2
- data/lib/calendlyr/collection.rb +3 -0
- data/lib/calendlyr/objects/organizations.rb +8 -0
- data/lib/calendlyr/resource.rb +11 -23
- data/lib/calendlyr/resources/event_invitees.rb +1 -1
- data/lib/calendlyr/resources/organizations.rb +1 -1
- data/lib/calendlyr/version.rb +1 -1
- data/lib/calendlyr.rb +0 -5
- data/test/calendlyr/client_test.rb +5 -2
- data/test/calendlyr/resource_test.rb +14 -0
- data/test/calendlyr/resources/{data_compliance.rb → data_compliance_test.rb} +0 -0
- data/test/calendlyr/resources/organizations_test.rb +26 -11
- data/test/calendlyr/resources/scheduling_links_test.rb +15 -0
- data/test/calendlyr/resources/users_test.rb +15 -3
- data/test/calendlyr/resources/webhooks_test.rb +5 -2
- data/test/fixtures/event_invitees/retrieve.json +36 -34
- data/test/fixtures/organizations/invite.json +9 -7
- data/test/fixtures/organizations/list_invitations.json +1 -1
- data/test/fixtures/organizations/retrieve_invitation.json +1 -1
- data/test/fixtures/resources/400.json +10 -0
- data/test/fixtures/resources/401.json +10 -0
- data/test/fixtures/resources/403.json +10 -0
- data/test/fixtures/resources/404.json +10 -0
- data/test/fixtures/resources/409.json +4 -0
- data/test/fixtures/resources/500.json +10 -0
- data/test/fixtures/users/reload.json +14 -0
- data/test/test_helper.rb +7 -1
- metadata +22 -6
- data/test/calendlyr/resources/scheduling_links.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4dba013e04be70a3fdefdae9d2457b5f14b22d8cfd253b6b9247237b1a33aec6
|
4
|
+
data.tar.gz: 9900aa135496d99c7e6e1a13071e2b7366153f9d47db00d5265ac96b61a029dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 165450520bdd93a7e6f30566035db95ff2bd99b764bd86c1ea44e52e90cdf398636791e49f7829dbbd238ef966cf6e09562f4b2fed0149985152cc11cc81b13b
|
7
|
+
data.tar.gz: 3885225e6feaea75a074f868ae3ad321c33a4c6413455ee9c10a16ba186e7144972391a20a125804f623ba9de92d69164560701fed6815e9fea9d9b1ce8f7f7c
|
data/.github/workflows/ci.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,35 +2,7 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
|
5
|
-
## [0.
|
6
|
-
*
|
5
|
+
## [0.6.0]
|
6
|
+
* First real usable release :tada:
|
7
7
|
|
8
|
-
|
9
|
-
* Fix - Error when trying to send an invitation through the organization
|
10
|
-
* More testing = More coverage
|
11
|
-
|
12
|
-
## [0.3.2]
|
13
|
-
* Minor fixes
|
14
|
-
|
15
|
-
## [0.3.0]
|
16
|
-
* No runtime dependencies
|
17
|
-
* Minor fixes
|
18
|
-
|
19
|
-
## [0.2.0]
|
20
|
-
* Support for ruby 3.0
|
21
|
-
* Minor fixes
|
22
|
-
|
23
|
-
## [0.1.1]
|
24
|
-
* Changed required ruby version from `>= 2.3.0` to `>= 2.4.0`
|
25
|
-
* Minitest
|
26
|
-
* Minor fixes
|
27
|
-
|
28
|
-
## 0.1.0
|
29
|
-
* Birthday!
|
30
|
-
|
31
|
-
[0.3.4]: https://github.com/araluce/calendlyr/compare/v0.3.3...v0.3.4
|
32
|
-
[0.3.3]: https://github.com/araluce/calendlyr/compare/v0.3.2...v0.3.3
|
33
|
-
[0.3.2]: https://github.com/araluce/calendlyr/compare/v0.3.0...v0.3.2
|
34
|
-
[0.3.0]: https://github.com/araluce/calendlyr/compare/v0.2.0...v0.3.0
|
35
|
-
[0.2.0]: https://github.com/araluce/calendlyr/compare/v0.1.1...v0.2.0
|
36
|
-
[0.1.1]: https://github.com/araluce/calendlyr/compare/v0.1.0...v0.1.1
|
8
|
+
[0.6.0]: https://github.com/araluce/calendlyr/compare/v0.1.0...v0.6.0
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
[](https://github.com/araluce/calendlyr/blob/master/LICENSE.txt)
|
2
|
-

|
2
|
+
[](https://github.com/araluce/calendlyr/actions)
|
3
3
|
[](https://codecov.io/gh/araluce/calendlyr)
|
4
4
|
[](https://badge.fury.io/rb/calendlyr)
|
5
5
|
|
@@ -7,10 +7,16 @@
|
|
7
7
|
|
8
8
|
Easy and complete rubygem for [Calendly](https://calendly.com/). Currently supports [API v2](https://calendly.stoplight.io/docs/api-docs).
|
9
9
|
|
10
|
-
|
10
|
+
Just needed a Personal Access Token.
|
11
11
|
|
12
12
|
> If you need a Oauth authentication maybe you need [calendly-api-ruby-client](https://github.com/koshilife/calendly-api-ruby-client)
|
13
13
|
|
14
|
+
## Dependencies
|
15
|
+
|
16
|
+
No dependencies :tada:
|
17
|
+
|
18
|
+
We know about the importance of not add dependencies that you don't want.
|
19
|
+
|
14
20
|
## Installation
|
15
21
|
|
16
22
|
Add this line to your application's Gemfile:
|
@@ -84,6 +90,17 @@ client.me.memberships
|
|
84
90
|
#=> Calendlyr::Collection @data=[#<Calendlyr::MemberShip>, #<Calendlyr::MemberShip>]
|
85
91
|
```
|
86
92
|
|
93
|
+
#### Me (Cached)
|
94
|
+
|
95
|
+
Probably you need to make many calls through `client.me`, so we decided to not make calls for every `client.me` reference by caching it the first time. However, if you need to reload the content of `me` you can `force_relaod` to force a new call.
|
96
|
+
|
97
|
+
```ruby
|
98
|
+
client.me # makes a call and caches the response
|
99
|
+
client.me # no call, value cached
|
100
|
+
client.me(force_reload: true) # makes a new call and update cache value
|
101
|
+
```
|
102
|
+
|
103
|
+
|
87
104
|
### Event Types
|
88
105
|
````ruby
|
89
106
|
client.event_types.list user_uri: "user_uri", organization_uri: "organization_uri"
|
@@ -118,7 +135,7 @@ client.organization.list_invitations
|
|
118
135
|
# Get invitation
|
119
136
|
client.organizations.retrieve_invitation(organization_uuid: "organization_uuid", invitation_uuid: "invitation_uuid")
|
120
137
|
client.organization.invitation(invitation_uuid: "invitation_uuid")
|
121
|
-
#Revoke invitation
|
138
|
+
# Revoke invitation
|
122
139
|
client.organizations.revoke_invitation(organization_uuid: "organization_uuid", invitation_uuid: "organization_uuid")
|
123
140
|
client.organization.revoke_invitation(invitation_uuid: "organization_uuid")
|
124
141
|
invitation = client.organization.invitation(invitation_uuid: "invitation_uuid")
|
@@ -133,12 +150,16 @@ client.organizations.retrieve_membership(membership_uuid: "membership_uuid")
|
|
133
150
|
client.organizations.remove_user(membership_uuid: "membership_uuid")
|
134
151
|
|
135
152
|
client.organization.events
|
153
|
+
|
154
|
+
# List/Creaete webhooks
|
155
|
+
client.organization.list_webhooks(scope: "scope")
|
156
|
+
client.organization.create_webhook(url: "post_callback_url", events: ["invitee.canceled", "invitee.created"], scope: "scope")
|
136
157
|
````
|
137
158
|
|
138
159
|
### Webhooks
|
139
160
|
```ruby
|
140
161
|
client.webhooks.list(organization_uri: "organization_uri", scope: "scope")
|
141
|
-
client.webhooks.create(
|
162
|
+
client.webhooks.create(url: "post_callback_url", events: ["invitee.canceled", "invitee.created"], organization_uri: "organization_uri", scope: "scope")
|
142
163
|
client.webhooks.retrieve(webhook_uuid: "webhook_uuid")
|
143
164
|
client.webhooks.delete(webhook_uuid: "webhook_uuid")
|
144
165
|
```
|
@@ -160,4 +181,6 @@ When adding resources, add to the list of resources in lib/calendlyr. Additional
|
|
160
181
|
|
161
182
|
## Thanks
|
162
183
|
|
184
|
+
Many thanks [@markets](https://github.com/markets) (our contributor in the shadows) for all comments, details and tips for this rubygem project and for made me grow professionally in my day by day :raised_hands:
|
185
|
+
|
163
186
|
Thanks [@excid3](https://github.com/excid3) and his [Vultr.rb](https://github.com/excid3/vultr.rb) rubygem project.
|
data/lib/calendlyr/client.rb
CHANGED
data/lib/calendlyr/collection.rb
CHANGED
@@ -8,6 +8,14 @@ module Calendlyr
|
|
8
8
|
client.organizations.list_invitations organization_uuid: uuid, **params
|
9
9
|
end
|
10
10
|
|
11
|
+
def list_webhooks(**params)
|
12
|
+
client.webhooks.list(organization_uri: uri, **params)
|
13
|
+
end
|
14
|
+
|
15
|
+
def create_webhook(**params)
|
16
|
+
client.webhooks.create(organization_uri: uri, **params)
|
17
|
+
end
|
18
|
+
|
11
19
|
def revoke_invitation(invitation_uuid:)
|
12
20
|
client.organizations.revoke_invitation(organization_uuid: uuid, invitation_uuid: invitation_uuid)
|
13
21
|
end
|
data/lib/calendlyr/resource.rb
CHANGED
@@ -1,7 +1,14 @@
|
|
1
|
+
require "net/http"
|
2
|
+
require "json"
|
3
|
+
require "openssl"
|
4
|
+
require "uri"
|
5
|
+
|
1
6
|
module Calendlyr
|
2
7
|
class Resource
|
3
8
|
attr_reader :client
|
4
9
|
|
10
|
+
ERROR_CODES = %w[400 401 403 404 409 500]
|
11
|
+
|
5
12
|
def initialize(client)
|
6
13
|
@client = client
|
7
14
|
end
|
@@ -16,14 +23,6 @@ module Calendlyr
|
|
16
23
|
handle_response request(url, Net::HTTP::Post, body: body)
|
17
24
|
end
|
18
25
|
|
19
|
-
def patch_request(url, body:)
|
20
|
-
handle_response request(url, Net::HTTP::Patch, body: body)
|
21
|
-
end
|
22
|
-
|
23
|
-
def put_request(url, body)
|
24
|
-
handle_response request(url, Net::HTTP::Put, body: body)
|
25
|
-
end
|
26
|
-
|
27
26
|
def delete_request(url, params: {})
|
28
27
|
handle_response request(url, Net::HTTP::Delete, params: params)
|
29
28
|
end
|
@@ -49,22 +48,11 @@ module Calendlyr
|
|
49
48
|
end
|
50
49
|
|
51
50
|
def handle_response(response)
|
51
|
+
return true unless response.read_body
|
52
|
+
|
52
53
|
body = JSON.parse(response.read_body)
|
53
|
-
|
54
|
-
|
55
|
-
raise Error, "#{body["title"]}. #{body["message"]}"
|
56
|
-
when 401
|
57
|
-
raise Error, "#{body["title"]}. #{body["message"]}"
|
58
|
-
when 403
|
59
|
-
raise Error, "#{body["title"]}. #{body["message"]}"
|
60
|
-
when 404
|
61
|
-
raise Error, "#{body["title"]}. #{body["message"]}"
|
62
|
-
when 429
|
63
|
-
raise Error, "#{body["title"]}. #{body["message"]}"
|
64
|
-
when 500
|
65
|
-
raise Error, "#{body["title"]}. #{body["message"]}"
|
66
|
-
when 503
|
67
|
-
raise Error, "#{body["title"]}. #{body["message"]}"
|
54
|
+
if ERROR_CODES.include? response.code
|
55
|
+
raise Error, "[Error #{response.code}] #{body["title"]}. #{body["message"]}"
|
68
56
|
else
|
69
57
|
body
|
70
58
|
end
|
@@ -6,7 +6,7 @@ module Calendlyr
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def retrieve(event_uuid:, invitee_uuid:)
|
9
|
-
EventInvitee.new get_request("scheduled_events/#{event_uuid}/invitees/#{invitee_uuid}").merge(client: client)
|
9
|
+
EventInvitee.new get_request("scheduled_events/#{event_uuid}/invitees/#{invitee_uuid}").dig("resource").merge(client: client)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Calendlyr
|
2
2
|
class OrganizationResource < Resource
|
3
3
|
def invite(organization_uuid:, email:)
|
4
|
-
Invitation.new post_request("organizations/#{organization_uuid}/invitations", body: {email: email}).merge(client: client)
|
4
|
+
Invitation.new post_request("organizations/#{organization_uuid}/invitations", body: {email: email}).dig("resource").merge(client: client)
|
5
5
|
end
|
6
6
|
|
7
7
|
def list_invitations(organization_uuid:, **params)
|
data/lib/calendlyr/version.rb
CHANGED
data/lib/calendlyr.rb
CHANGED
@@ -2,7 +2,10 @@ require "test_helper"
|
|
2
2
|
|
3
3
|
class ClientTest < Minitest::Test
|
4
4
|
def test_token
|
5
|
-
|
6
|
-
|
5
|
+
assert_equal "fake", client.token
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_inspect
|
9
|
+
assert_equal "#<Calendlyr::Client>", client.inspect
|
7
10
|
end
|
8
11
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class ResourceTest < Minitest::Test
|
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})
|
9
|
+
|
10
|
+
assert_raises Calendlyr::Error do
|
11
|
+
client.me
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
File without changes
|
@@ -40,25 +40,47 @@ class OrganizationsResourceTest < Minitest::Test
|
|
40
40
|
assert_equal "sNjq4TvMDfUHEl7zHRR0k0E1PCEJWvdi", memberships.next_page_token
|
41
41
|
end
|
42
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
|
+
def test_create_webhook
|
54
|
+
body = {url: "https://blah.foo/bar", events: ["invitee.created"], organization: client.organization.uri, scope: "user", user: client.me.uri}
|
55
|
+
stub(method: :post, path: "webhook_subscriptions", body: body, response: {body: fixture_file("webhooks/create"), status: 201})
|
56
|
+
|
57
|
+
assert client.webhooks.create(url: body[:url], events: body[:events], organization_uri: body[:organization], scope: body[:scope], user_uri: body[:user])
|
58
|
+
end
|
59
|
+
|
43
60
|
def test_retrieve_invitation
|
44
|
-
organization_uuid = "AAAAAAAAAAAAAAAA"
|
45
61
|
invitation_uuid = "AAAAAAAAAAAAAAAA"
|
46
|
-
|
47
|
-
stub(path: "organizations/#{
|
48
|
-
|
62
|
+
|
63
|
+
stub(path: "organizations/#{client.organization.uuid}/invitations/#{invitation_uuid}", response: {body: fixture_file("organizations/retrieve_invitation"), status: 200})
|
64
|
+
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)
|
49
66
|
|
50
67
|
assert_equal Calendlyr::Invitation, invitation.class
|
51
68
|
assert_equal "test@example.com", invitation.email
|
69
|
+
|
70
|
+
assert invitation.associated_organization
|
71
|
+
assert invitation.revoke
|
52
72
|
end
|
53
73
|
|
54
74
|
def test_retrieve_membership
|
55
75
|
membership_uuid = "AAAAAAAAAAAAAAAA"
|
56
76
|
response = {body: fixture_file("organizations/retrieve_membership"), status: 200}
|
57
77
|
stub(path: "organization_memberships/#{membership_uuid}", response: response)
|
78
|
+
stub(path: "users/#{membership_uuid}", response: {body: fixture_file("users/retrieve"), status: 200})
|
58
79
|
membership = client.organizations.retrieve_membership(membership_uuid: membership_uuid)
|
59
80
|
|
60
81
|
assert_equal Calendlyr::Membership, membership.class
|
61
82
|
assert_equal "test@example.com", membership.user.email
|
83
|
+
assert_equal membership.associated_user, client.users.retrieve(user_uuid: membership_uuid)
|
62
84
|
end
|
63
85
|
|
64
86
|
def test_revoke_invitation
|
@@ -77,8 +99,6 @@ class OrganizationsResourceTest < Minitest::Test
|
|
77
99
|
end
|
78
100
|
|
79
101
|
def test_organization_invite_user
|
80
|
-
stub(path: "users/me", response: {body: fixture_file("users/retrieve"), status: 200})
|
81
|
-
|
82
102
|
email = "email@example.com"
|
83
103
|
response = {body: fixture_file("organizations/invite"), status: 201}
|
84
104
|
stub(method: :post, path: "organizations/#{client.organization.uuid}/invitations", body: {email: email}, response: response)
|
@@ -90,7 +110,6 @@ class OrganizationsResourceTest < Minitest::Test
|
|
90
110
|
end
|
91
111
|
|
92
112
|
def test_organization_list_invitations
|
93
|
-
stub(path: "users/me", response: {body: fixture_file("users/retrieve"), status: 200})
|
94
113
|
stub(path: "organizations/#{client.organization.uuid}/invitations", response: {body: fixture_file("organizations/list_invitations"), status: 200})
|
95
114
|
invitations = client.organization.list_invitations
|
96
115
|
|
@@ -101,13 +120,11 @@ class OrganizationsResourceTest < Minitest::Test
|
|
101
120
|
end
|
102
121
|
|
103
122
|
def test_organization_revoke_invitation
|
104
|
-
stub(path: "users/me", response: {body: fixture_file("users/retrieve"), status: 200})
|
105
123
|
stub(method: :delete, path: "organizations/#{client.organization.uuid}/invitations/AAAAAAAAAAAAAAAA", response: {body: fixture_file("organizations/revoke_invitation")})
|
106
124
|
assert client.organization.revoke_invitation(invitation_uuid: "AAAAAAAAAAAAAAAA")
|
107
125
|
end
|
108
126
|
|
109
127
|
def test_organization_invitation
|
110
|
-
stub(path: "users/me", response: {body: fixture_file("users/retrieve"), status: 200})
|
111
128
|
response = {body: fixture_file("organizations/retrieve_invitation"), status: 200}
|
112
129
|
stub(path: "organizations/#{client.organization.uuid}/invitations/AAAAAAAAAAAAAAAA", response: response)
|
113
130
|
invitation = client.organization.invitation(invitation_uuid: "AAAAAAAAAAAAAAAA")
|
@@ -117,7 +134,6 @@ class OrganizationsResourceTest < Minitest::Test
|
|
117
134
|
end
|
118
135
|
|
119
136
|
def test_organization_events
|
120
|
-
stub(path: "users/me", response: {body: fixture_file("users/retrieve"), status: 200})
|
121
137
|
stub(path: "scheduled_events?organization=#{client.organization.uri}", response: {body: fixture_file("events/list"), status: 200})
|
122
138
|
events = client.organization.events
|
123
139
|
|
@@ -128,7 +144,6 @@ class OrganizationsResourceTest < Minitest::Test
|
|
128
144
|
end
|
129
145
|
|
130
146
|
def test_organization_memberships
|
131
|
-
stub(path: "users/me", response: {body: fixture_file("users/retrieve"), status: 200})
|
132
147
|
stub(path: "organization_memberships?organization=#{client.organization.uri}", response: {body: fixture_file("organizations/list_memberships"), status: 200})
|
133
148
|
memberships = client.organization.memberships
|
134
149
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class SchedulingLinksResourceTest < Minitest::Test
|
6
|
+
def test_create
|
7
|
+
owner_uri = "https://api.calendly.com/event_types/GBGBDCAADAEDCRZ2"
|
8
|
+
max_event_count = 20
|
9
|
+
owner_type = "EventType"
|
10
|
+
response = {body: fixture_file("scheduling_links/create"), status: 201}
|
11
|
+
stub(method: :post, path: "scheduling_links", body: {owner: owner_uri, max_event_count: max_event_count, owner_type: owner_type}, response: response)
|
12
|
+
|
13
|
+
assert client.scheduling_links.create(owner_uri: owner_uri, max_event_count: max_event_count, owner_type: owner_type)
|
14
|
+
end
|
15
|
+
end
|
@@ -28,6 +28,21 @@ class UsersResourceTest < Minitest::Test
|
|
28
28
|
assert_equal "test@example.com", me.email
|
29
29
|
end
|
30
30
|
|
31
|
+
def test_me_caching
|
32
|
+
response = {body: fixture_file("users/retrieve"), status: 200}
|
33
|
+
stub = stub(path: "users/me", response: response)
|
34
|
+
me = client.me
|
35
|
+
remove_request_stub(stub)
|
36
|
+
assert_equal client.me, me
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_me_caching_reload
|
40
|
+
me = client.me
|
41
|
+
stub(path: "users/me", response: {body: fixture_file("users/reload"), status: 200})
|
42
|
+
reloaded_me = client.me(force_reload: true)
|
43
|
+
assert me.name != reloaded_me.name
|
44
|
+
end
|
45
|
+
|
31
46
|
def test_organization
|
32
47
|
response = {body: fixture_file("users/retrieve"), status: 200}
|
33
48
|
stub(path: "users/me", response: response)
|
@@ -39,7 +54,6 @@ class UsersResourceTest < Minitest::Test
|
|
39
54
|
end
|
40
55
|
|
41
56
|
def test_event_types
|
42
|
-
stub(path: "users/me", response: {body: fixture_file("users/retrieve"), status: 200})
|
43
57
|
me = client.me
|
44
58
|
|
45
59
|
stub(path: "event_types?user=#{me.uri}&organization=#{me.organization.uri}", response: {body: fixture_file("event_types/list"), status: 200})
|
@@ -52,7 +66,6 @@ class UsersResourceTest < Minitest::Test
|
|
52
66
|
end
|
53
67
|
|
54
68
|
def test_events
|
55
|
-
stub(path: "users/me", response: {body: fixture_file("users/retrieve"), status: 200})
|
56
69
|
me = client.me
|
57
70
|
|
58
71
|
stub(path: "scheduled_events?user=#{me.uri}&organization=#{me.organization.uri}", response: {body: fixture_file("events/list"), status: 200})
|
@@ -65,7 +78,6 @@ class UsersResourceTest < Minitest::Test
|
|
65
78
|
end
|
66
79
|
|
67
80
|
def test_memberships
|
68
|
-
stub(path: "users/me", response: {body: fixture_file("users/retrieve"), status: 200})
|
69
81
|
me = client.me
|
70
82
|
|
71
83
|
stub(path: "organization_memberships?user=#{me.uri}&organization=#{me.organization.uri}", response: {body: fixture_file("organizations/list_memberships"), status: 200})
|
@@ -21,16 +21,19 @@ class WebhooksResourceTest < Minitest::Test
|
|
21
21
|
stub(method: :post, path: "webhook_subscriptions", body: body, response: {body: fixture_file("webhooks/create"), status: 201})
|
22
22
|
|
23
23
|
assert client.webhooks.create(url: body[:url], events: body[:events], organization_uri: body[:organization], scope: body[:scope], user_uri: body[:user])
|
24
|
+
assert client.organization.create_webhook(url: body[:url], events: body[:events], scope: body[:scope], user_uri: body[:user])
|
24
25
|
end
|
25
26
|
|
26
27
|
def test_retrieve
|
27
28
|
webhook_uuid = "AAAAAAAAAAAAAAAA"
|
28
|
-
response
|
29
|
-
stub(path: "
|
29
|
+
stub(path: "webhook_subscriptions/#{webhook_uuid}", response: {body: fixture_file("webhooks/retrieve"), status: 200})
|
30
|
+
stub(path: "users/AAAAAAAAAAAAAAAA", response: {body: fixture_file("users/retrieve"), status: 200})
|
30
31
|
webhook = client.webhooks.retrieve(webhook_uuid: webhook_uuid)
|
31
32
|
|
32
33
|
assert_equal Calendlyr::Webhook, webhook.class
|
33
34
|
assert_equal "user", webhook.scope
|
35
|
+
assert_equal webhook.associated_user, client.users.retrieve(user_uuid: "AAAAAAAAAAAAAAAA")
|
36
|
+
assert_equal webhook.associated_organization, client.users.retrieve(user_uuid: "AAAAAAAAAAAAAAAA").organization
|
34
37
|
end
|
35
38
|
|
36
39
|
def test_delete
|
@@ -1,38 +1,40 @@
|
|
1
1
|
{
|
2
|
-
"
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
2
|
+
"resource": {
|
3
|
+
"cancel_url": "https://calendly.com/cancellations/AAAAAAAAAAAAAAAA",
|
4
|
+
"created_at": "2020-01-01T20:30:00Z",
|
5
|
+
"email": "email@example.com",
|
6
|
+
"reschedule_url": "https://calendly.com/reschedulings/AAAAAAAAAAAAAAAA",
|
7
|
+
"event": "https://api.calendly.com/scheduled_events/ABCDABCDABCDABCD",
|
8
|
+
"name": "John Doe",
|
9
|
+
"status": "active",
|
10
|
+
"timezone": "America/New_York",
|
11
|
+
"updated_at": "2020-01-01T20:30:00Z",
|
12
|
+
"uri": "https://api.calendly.com/api/v2/scheduled_events/ABCDABCDABCDABCD/invitees/ABCDABCDABCDABCD",
|
13
|
+
"questions_and_answers": [
|
14
|
+
{
|
15
|
+
"answer": "radio button answer",
|
16
|
+
"position": 0,
|
17
|
+
"question": "Question with Radio Buttons answer type"
|
18
|
+
},
|
19
|
+
{
|
20
|
+
"answer": "Multiple line\nAnswer",
|
21
|
+
"position": 1,
|
22
|
+
"question": "Question with Multiple Lines answer type"
|
23
|
+
},
|
24
|
+
{
|
25
|
+
"answer": "Answer 1\nAnswer 2\nAnswer 3",
|
26
|
+
"position": 2,
|
27
|
+
"question": "Question with Checkboxes answer type"
|
28
|
+
}
|
29
|
+
],
|
30
|
+
"canceled": false,
|
31
|
+
"payment": {
|
32
|
+
"external_id": "ch_AAAAAAAAAAAAAAAAAAAAAAAA",
|
33
|
+
"provider": "stripe",
|
34
|
+
"amount": 1234.56,
|
35
|
+
"currency": "USD",
|
36
|
+
"terms": "sample terms of payment (up to 1,024 characters)",
|
37
|
+
"successful": true
|
27
38
|
}
|
28
|
-
],
|
29
|
-
"canceled": false,
|
30
|
-
"payment": {
|
31
|
-
"external_id": "ch_AAAAAAAAAAAAAAAAAAAAAAAA",
|
32
|
-
"provider": "stripe",
|
33
|
-
"amount": 1234.56,
|
34
|
-
"currency": "USD",
|
35
|
-
"terms": "sample terms of payment (up to 1,024 characters)",
|
36
|
-
"successful": true
|
37
39
|
}
|
38
40
|
}
|
@@ -1,9 +1,11 @@
|
|
1
1
|
{
|
2
|
-
"
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
2
|
+
"resource": {
|
3
|
+
"created_at": "2020-01-01T20:30:00Z",
|
4
|
+
"email": "email@example.com",
|
5
|
+
"last_sent_at": "2020-01-01T20:30:00Z",
|
6
|
+
"organization": "https://api.calendly.com/organizations/ABCDABCDABCDABCD",
|
7
|
+
"status": "pending",
|
8
|
+
"updated_at": "2020-01-01T20:30:00Z",
|
9
|
+
"uri": "https://api.calendly.com/organizations/ABCDABCDABCDABCD/invitations/DCBADCBADCBADCBA"
|
10
|
+
}
|
9
11
|
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"collection": [
|
3
3
|
{
|
4
|
-
"uri": "https://api.calendly.com/organizations/AAAAAAAAAAAAAAAA/invitations",
|
4
|
+
"uri": "https://api.calendly.com/organizations/AAAAAAAAAAAAAAAA/invitations/AAAAAAAAAAAAAAAA",
|
5
5
|
"organization": "https://api.calendly.com/organizations/AAAAAAAAAAAAAAAA",
|
6
6
|
"email": "test@example.com",
|
7
7
|
"status": "accepted",
|
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"resource": {
|
3
|
-
"uri": "https://api.calendly.com/organizations/AAAAAAAAAAAAAAAA/invitations",
|
3
|
+
"uri": "https://api.calendly.com/organizations/AAAAAAAAAAAAAAAA/invitations/AAAAAAAAAAAAAAAA",
|
4
4
|
"organization": "https://api.calendly.com/organizations/AAAAAAAAAAAAAAAA",
|
5
5
|
"email": "test@example.com",
|
6
6
|
"status": "accepted",
|
@@ -0,0 +1,14 @@
|
|
1
|
+
{
|
2
|
+
"resource": {
|
3
|
+
"uri": "https://api.calendly.com/users/AAAAAAAAAAAAAAAA",
|
4
|
+
"name": "John Doe Reloaded",
|
5
|
+
"slug": "acmesales",
|
6
|
+
"email": "test@example.com",
|
7
|
+
"scheduling_url": "https://calendly.com/acmesales",
|
8
|
+
"timezone": "America/New York",
|
9
|
+
"avatar_url": "https://01234567890.cloudfront.net/uploads/user/avatar/0123456/a1b2c3d4.png",
|
10
|
+
"created_at": "2019-01-02T03:04:05.678Z",
|
11
|
+
"updated_at": "2019-08-07T06:05:04.321Z",
|
12
|
+
"current_organization": "https://api.calendly.com/organizations/AAAAAAAAAAAAAAAA"
|
13
|
+
}
|
14
|
+
}
|
data/test/test_helper.rb
CHANGED
@@ -11,8 +11,13 @@ require "minitest/autorun"
|
|
11
11
|
require "webmock/minitest"
|
12
12
|
|
13
13
|
class Minitest::Test
|
14
|
+
def initialize(name)
|
15
|
+
stub(path: "users/me", response: {body: fixture_file("users/retrieve"), status: 200})
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
14
19
|
def client
|
15
|
-
Calendlyr::Client.new(token: "fake")
|
20
|
+
@client ||= Calendlyr::Client.new(token: "fake")
|
16
21
|
end
|
17
22
|
|
18
23
|
def fixture_file(fixture)
|
@@ -23,5 +28,6 @@ class Minitest::Test
|
|
23
28
|
stub_req = stub_request(method, "#{Calendlyr::Client::BASE_URL}/#{path}")
|
24
29
|
stub_req.with(body: body) if [:post, :put, :patch].include?(method)
|
25
30
|
stub_req.to_return(**response)
|
31
|
+
stub_req
|
26
32
|
end
|
27
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calendlyr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- araluce
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -141,12 +141,13 @@ files:
|
|
141
141
|
- lib/calendlyr/version.rb
|
142
142
|
- test/calendlyr/client_test.rb
|
143
143
|
- test/calendlyr/object_test.rb
|
144
|
-
- test/calendlyr/
|
144
|
+
- test/calendlyr/resource_test.rb
|
145
|
+
- test/calendlyr/resources/data_compliance_test.rb
|
145
146
|
- test/calendlyr/resources/event_invitees_test.rb
|
146
147
|
- test/calendlyr/resources/event_types_test.rb
|
147
148
|
- test/calendlyr/resources/events_test.rb
|
148
149
|
- test/calendlyr/resources/organizations_test.rb
|
149
|
-
- test/calendlyr/resources/
|
150
|
+
- test/calendlyr/resources/scheduling_links_test.rb
|
150
151
|
- test/calendlyr/resources/users_test.rb
|
151
152
|
- test/calendlyr/resources/webhooks_test.rb
|
152
153
|
- test/calendlyr_test.rb
|
@@ -164,7 +165,14 @@ files:
|
|
164
165
|
- test/fixtures/organizations/retrieve_invitation.json
|
165
166
|
- test/fixtures/organizations/retrieve_membership.json
|
166
167
|
- test/fixtures/organizations/revoke_invitation.json
|
168
|
+
- test/fixtures/resources/400.json
|
169
|
+
- test/fixtures/resources/401.json
|
170
|
+
- test/fixtures/resources/403.json
|
171
|
+
- test/fixtures/resources/404.json
|
172
|
+
- test/fixtures/resources/409.json
|
173
|
+
- test/fixtures/resources/500.json
|
167
174
|
- test/fixtures/scheduling_links/create.json
|
175
|
+
- test/fixtures/users/reload.json
|
168
176
|
- test/fixtures/users/retrieve.json
|
169
177
|
- test/fixtures/webhooks/create.json
|
170
178
|
- test/fixtures/webhooks/delete.json
|
@@ -198,12 +206,13 @@ summary: Ruby bindings for Calendly API.
|
|
198
206
|
test_files:
|
199
207
|
- test/calendlyr/client_test.rb
|
200
208
|
- test/calendlyr/object_test.rb
|
201
|
-
- test/calendlyr/
|
209
|
+
- test/calendlyr/resource_test.rb
|
210
|
+
- test/calendlyr/resources/data_compliance_test.rb
|
202
211
|
- test/calendlyr/resources/event_invitees_test.rb
|
203
212
|
- test/calendlyr/resources/event_types_test.rb
|
204
213
|
- test/calendlyr/resources/events_test.rb
|
205
214
|
- test/calendlyr/resources/organizations_test.rb
|
206
|
-
- test/calendlyr/resources/
|
215
|
+
- test/calendlyr/resources/scheduling_links_test.rb
|
207
216
|
- test/calendlyr/resources/users_test.rb
|
208
217
|
- test/calendlyr/resources/webhooks_test.rb
|
209
218
|
- test/calendlyr_test.rb
|
@@ -221,7 +230,14 @@ test_files:
|
|
221
230
|
- test/fixtures/organizations/retrieve_invitation.json
|
222
231
|
- test/fixtures/organizations/retrieve_membership.json
|
223
232
|
- test/fixtures/organizations/revoke_invitation.json
|
233
|
+
- test/fixtures/resources/400.json
|
234
|
+
- test/fixtures/resources/401.json
|
235
|
+
- test/fixtures/resources/403.json
|
236
|
+
- test/fixtures/resources/404.json
|
237
|
+
- test/fixtures/resources/409.json
|
238
|
+
- test/fixtures/resources/500.json
|
224
239
|
- test/fixtures/scheduling_links/create.json
|
240
|
+
- test/fixtures/users/reload.json
|
225
241
|
- test/fixtures/users/retrieve.json
|
226
242
|
- test/fixtures/webhooks/create.json
|
227
243
|
- test/fixtures/webhooks/delete.json
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "test_helper"
|
4
|
-
|
5
|
-
class SchedulingLinksResourceTest < Minitest::Test
|
6
|
-
def test_create
|
7
|
-
body = {owner_uri: "https://api.calendly.com/event_types/GBGBDCAADAEDCRZ2", max_event_count: 20, owner_type: "EventType"}
|
8
|
-
stub(method: :post, path: "scheduling_links", body: body, response: {body: fixture_file("scheduling_links/create"), status: 201})
|
9
|
-
|
10
|
-
assert client.data_compliance.delete_invitee_data(**body)
|
11
|
-
end
|
12
|
-
end
|