descope 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (197) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ci.yaml +54 -0
  3. data/.gitignore +59 -0
  4. data/.release-please-manifest.json +3 -0
  5. data/.rubocop.yml +10 -0
  6. data/.rubocop_todo.yml +10 -0
  7. data/.ruby-version +1 -0
  8. data/CHANGELOG.md +90 -0
  9. data/Gemfile +22 -0
  10. data/Gemfile.lock +204 -0
  11. data/LICENSE +21 -0
  12. data/README.md +1171 -0
  13. data/Rakefile +31 -0
  14. data/descope.gemspec +34 -0
  15. data/examples/ruby/Gemfile +4 -0
  16. data/examples/ruby/Gemfile.lock +41 -0
  17. data/examples/ruby/access_key_app.rb +45 -0
  18. data/examples/ruby/enchantedlink_app.rb +65 -0
  19. data/examples/ruby/magiclink_app.rb +81 -0
  20. data/examples/ruby/management/Gemfile +5 -0
  21. data/examples/ruby/management/Gemfile.lock +38 -0
  22. data/examples/ruby/management/access_key_app.rb +71 -0
  23. data/examples/ruby/management/audit_app.rb +25 -0
  24. data/examples/ruby/management/authz_app.rb +135 -0
  25. data/examples/ruby/management/authz_files.json +229 -0
  26. data/examples/ruby/management/flow_app.rb +57 -0
  27. data/examples/ruby/management/permission_app.rb +56 -0
  28. data/examples/ruby/management/role_app.rb +58 -0
  29. data/examples/ruby/management/tenant_app.rb +60 -0
  30. data/examples/ruby/management/user_app.rb +60 -0
  31. data/examples/ruby/oauth_app.rb +39 -0
  32. data/examples/ruby/otp_app.rb +50 -0
  33. data/examples/ruby/password_app.rb +76 -0
  34. data/examples/ruby/saml_app.rb +38 -0
  35. data/examples/ruby-on-rails-api/descope/.dockerignore +37 -0
  36. data/examples/ruby-on-rails-api/descope/.gitattributes +9 -0
  37. data/examples/ruby-on-rails-api/descope/.gitignore +40 -0
  38. data/examples/ruby-on-rails-api/descope/.node-version +1 -0
  39. data/examples/ruby-on-rails-api/descope/.ruby-version +1 -0
  40. data/examples/ruby-on-rails-api/descope/Dockerfile +75 -0
  41. data/examples/ruby-on-rails-api/descope/Gemfile +67 -0
  42. data/examples/ruby-on-rails-api/descope/Gemfile.lock +284 -0
  43. data/examples/ruby-on-rails-api/descope/Procfile.dev +3 -0
  44. data/examples/ruby-on-rails-api/descope/README.md +54 -0
  45. data/examples/ruby-on-rails-api/descope/Rakefile +6 -0
  46. data/examples/ruby-on-rails-api/descope/app/assets/builds/.keep +0 -0
  47. data/examples/ruby-on-rails-api/descope/app/assets/config/manifest.js +3 -0
  48. data/examples/ruby-on-rails-api/descope/app/assets/images/.keep +0 -0
  49. data/examples/ruby-on-rails-api/descope/app/assets/images/descope.jpeg +0 -0
  50. data/examples/ruby-on-rails-api/descope/app/assets/images/favicon.ico +0 -0
  51. data/examples/ruby-on-rails-api/descope/app/assets/images/logo192.png +0 -0
  52. data/examples/ruby-on-rails-api/descope/app/assets/images/logo512.png +0 -0
  53. data/examples/ruby-on-rails-api/descope/app/assets/stylesheets/application.bootstrap.scss +67 -0
  54. data/examples/ruby-on-rails-api/descope/app/channels/application_cable/channel.rb +4 -0
  55. data/examples/ruby-on-rails-api/descope/app/channels/application_cable/connection.rb +4 -0
  56. data/examples/ruby-on-rails-api/descope/app/controllers/application_controller.rb +2 -0
  57. data/examples/ruby-on-rails-api/descope/app/controllers/concerns/.keep +0 -0
  58. data/examples/ruby-on-rails-api/descope/app/controllers/homepage_controller.rb +4 -0
  59. data/examples/ruby-on-rails-api/descope/app/controllers/session_controller.rb +66 -0
  60. data/examples/ruby-on-rails-api/descope/app/helpers/application_helper.rb +2 -0
  61. data/examples/ruby-on-rails-api/descope/app/helpers/homepage_helper.rb +2 -0
  62. data/examples/ruby-on-rails-api/descope/app/helpers/session_helper.rb +2 -0
  63. data/examples/ruby-on-rails-api/descope/app/javascript/App.css +53 -0
  64. data/examples/ruby-on-rails-api/descope/app/javascript/application.js +5 -0
  65. data/examples/ruby-on-rails-api/descope/app/javascript/components/App.jsx +4 -0
  66. data/examples/ruby-on-rails-api/descope/app/javascript/components/Dashboard.jsx +60 -0
  67. data/examples/ruby-on-rails-api/descope/app/javascript/components/Home.jsx +27 -0
  68. data/examples/ruby-on-rails-api/descope/app/javascript/components/Login.jsx +45 -0
  69. data/examples/ruby-on-rails-api/descope/app/javascript/components/Profile.jsx +81 -0
  70. data/examples/ruby-on-rails-api/descope/app/javascript/components/index.html +11 -0
  71. data/examples/ruby-on-rails-api/descope/app/javascript/components/index.jsx +24 -0
  72. data/examples/ruby-on-rails-api/descope/app/javascript/controllers/application.js +9 -0
  73. data/examples/ruby-on-rails-api/descope/app/javascript/controllers/index.js +5 -0
  74. data/examples/ruby-on-rails-api/descope/app/javascript/reportWebVitals.js +13 -0
  75. data/examples/ruby-on-rails-api/descope/app/javascript/routes/index.jsx +17 -0
  76. data/examples/ruby-on-rails-api/descope/app/jobs/application_job.rb +7 -0
  77. data/examples/ruby-on-rails-api/descope/app/mailers/application_mailer.rb +4 -0
  78. data/examples/ruby-on-rails-api/descope/app/models/application_record.rb +3 -0
  79. data/examples/ruby-on-rails-api/descope/app/models/concerns/.keep +0 -0
  80. data/examples/ruby-on-rails-api/descope/app/views/homepage/index.html.erb +2 -0
  81. data/examples/ruby-on-rails-api/descope/app/views/layouts/application.html.erb +16 -0
  82. data/examples/ruby-on-rails-api/descope/app/views/layouts/mailer.html.erb +13 -0
  83. data/examples/ruby-on-rails-api/descope/app/views/layouts/mailer.text.erb +1 -0
  84. data/examples/ruby-on-rails-api/descope/app/views/session/index.html.erb +2 -0
  85. data/examples/ruby-on-rails-api/descope/bin/bundle +109 -0
  86. data/examples/ruby-on-rails-api/descope/bin/dev +11 -0
  87. data/examples/ruby-on-rails-api/descope/bin/docker-entrypoint +8 -0
  88. data/examples/ruby-on-rails-api/descope/bin/rails +4 -0
  89. data/examples/ruby-on-rails-api/descope/bin/rake +4 -0
  90. data/examples/ruby-on-rails-api/descope/bin/setup +36 -0
  91. data/examples/ruby-on-rails-api/descope/build.js +30 -0
  92. data/examples/ruby-on-rails-api/descope/config/application.rb +42 -0
  93. data/examples/ruby-on-rails-api/descope/config/boot.rb +4 -0
  94. data/examples/ruby-on-rails-api/descope/config/cable.yml +10 -0
  95. data/examples/ruby-on-rails-api/descope/config/config.yml +9 -0
  96. data/examples/ruby-on-rails-api/descope/config/credentials.yml.enc +1 -0
  97. data/examples/ruby-on-rails-api/descope/config/database.yml +25 -0
  98. data/examples/ruby-on-rails-api/descope/config/environment.rb +5 -0
  99. data/examples/ruby-on-rails-api/descope/config/environments/development.rb +76 -0
  100. data/examples/ruby-on-rails-api/descope/config/environments/production.rb +97 -0
  101. data/examples/ruby-on-rails-api/descope/config/environments/test.rb +64 -0
  102. data/examples/ruby-on-rails-api/descope/config/initializers/assets.rb +13 -0
  103. data/examples/ruby-on-rails-api/descope/config/initializers/content_security_policy.rb +25 -0
  104. data/examples/ruby-on-rails-api/descope/config/initializers/filter_parameter_logging.rb +8 -0
  105. data/examples/ruby-on-rails-api/descope/config/initializers/inflections.rb +16 -0
  106. data/examples/ruby-on-rails-api/descope/config/initializers/load_config.rb +12 -0
  107. data/examples/ruby-on-rails-api/descope/config/initializers/permissions_policy.rb +13 -0
  108. data/examples/ruby-on-rails-api/descope/config/locales/en.yml +31 -0
  109. data/examples/ruby-on-rails-api/descope/config/puma.rb +35 -0
  110. data/examples/ruby-on-rails-api/descope/config/routes.rb +18 -0
  111. data/examples/ruby-on-rails-api/descope/config/storage.yml +34 -0
  112. data/examples/ruby-on-rails-api/descope/config.ru +6 -0
  113. data/examples/ruby-on-rails-api/descope/db/seeds.rb +9 -0
  114. data/examples/ruby-on-rails-api/descope/lib/assets/.keep +0 -0
  115. data/examples/ruby-on-rails-api/descope/lib/tasks/.keep +0 -0
  116. data/examples/ruby-on-rails-api/descope/log/.keep +0 -0
  117. data/examples/ruby-on-rails-api/descope/package-lock.json +19680 -0
  118. data/examples/ruby-on-rails-api/descope/package.json +51 -0
  119. data/examples/ruby-on-rails-api/descope/public/404.html +67 -0
  120. data/examples/ruby-on-rails-api/descope/public/422.html +67 -0
  121. data/examples/ruby-on-rails-api/descope/public/500.html +66 -0
  122. data/examples/ruby-on-rails-api/descope/public/apple-touch-icon-precomposed.png +0 -0
  123. data/examples/ruby-on-rails-api/descope/public/apple-touch-icon.png +0 -0
  124. data/examples/ruby-on-rails-api/descope/public/favicon.ico +0 -0
  125. data/examples/ruby-on-rails-api/descope/public/robots.txt +1 -0
  126. data/examples/ruby-on-rails-api/descope/storage/.keep +0 -0
  127. data/examples/ruby-on-rails-api/descope/tmp/.keep +0 -0
  128. data/examples/ruby-on-rails-api/descope/tmp/pids/.keep +0 -0
  129. data/examples/ruby-on-rails-api/descope/tmp/storage/.keep +0 -0
  130. data/examples/ruby-on-rails-api/descope/vendor/.keep +0 -0
  131. data/examples/ruby-on-rails-api/descope/yarn.lock +10780 -0
  132. data/lib/descope/api/v1/auth/enchantedlink.rb +156 -0
  133. data/lib/descope/api/v1/auth/magiclink.rb +170 -0
  134. data/lib/descope/api/v1/auth/oauth.rb +72 -0
  135. data/lib/descope/api/v1/auth/otp.rb +186 -0
  136. data/lib/descope/api/v1/auth/password.rb +100 -0
  137. data/lib/descope/api/v1/auth/saml.rb +48 -0
  138. data/lib/descope/api/v1/auth/totp.rb +72 -0
  139. data/lib/descope/api/v1/auth.rb +452 -0
  140. data/lib/descope/api/v1/management/access_key.rb +81 -0
  141. data/lib/descope/api/v1/management/audit.rb +82 -0
  142. data/lib/descope/api/v1/management/authz.rb +165 -0
  143. data/lib/descope/api/v1/management/common.rb +147 -0
  144. data/lib/descope/api/v1/management/flow.rb +55 -0
  145. data/lib/descope/api/v1/management/password.rb +58 -0
  146. data/lib/descope/api/v1/management/permission.rb +48 -0
  147. data/lib/descope/api/v1/management/project.rb +53 -0
  148. data/lib/descope/api/v1/management/role.rb +48 -0
  149. data/lib/descope/api/v1/management/scim.rb +206 -0
  150. data/lib/descope/api/v1/management/sso_settings.rb +153 -0
  151. data/lib/descope/api/v1/management/tenant.rb +71 -0
  152. data/lib/descope/api/v1/management/user.rb +619 -0
  153. data/lib/descope/api/v1/management.rb +38 -0
  154. data/lib/descope/api/v1/session.rb +84 -0
  155. data/lib/descope/api/v1.rb +13 -0
  156. data/lib/descope/client.rb +6 -0
  157. data/lib/descope/exception.rb +50 -0
  158. data/lib/descope/mixins/common.rb +129 -0
  159. data/lib/descope/mixins/headers.rb +15 -0
  160. data/lib/descope/mixins/http.rb +133 -0
  161. data/lib/descope/mixins/initializer.rb +80 -0
  162. data/lib/descope/mixins/logging.rb +30 -0
  163. data/lib/descope/mixins/validation.rb +79 -0
  164. data/lib/descope/mixins.rb +22 -0
  165. data/lib/descope/version.rb +7 -0
  166. data/lib/descope.rb +9 -0
  167. data/lib/descope_client.rb +5 -0
  168. data/release-please-config.json +18 -0
  169. data/renovate.json +6 -0
  170. data/spec/factories/user.rb +16 -0
  171. data/spec/lib.descope/api/v1/auth/enchantedlink_spec.rb +159 -0
  172. data/spec/lib.descope/api/v1/auth/magiclink_spec.rb +282 -0
  173. data/spec/lib.descope/api/v1/auth/oauth_spec.rb +117 -0
  174. data/spec/lib.descope/api/v1/auth/otp_spec.rb +285 -0
  175. data/spec/lib.descope/api/v1/auth/password_spec.rb +124 -0
  176. data/spec/lib.descope/api/v1/auth/saml_spec.rb +55 -0
  177. data/spec/lib.descope/api/v1/auth/totp_spec.rb +70 -0
  178. data/spec/lib.descope/api/v1/auth_spec.rb +372 -0
  179. data/spec/lib.descope/api/v1/management/access_key_spec.rb +118 -0
  180. data/spec/lib.descope/api/v1/management/audit_spec.rb +78 -0
  181. data/spec/lib.descope/api/v1/management/authz_spec.rb +336 -0
  182. data/spec/lib.descope/api/v1/management/flow_spec.rb +78 -0
  183. data/spec/lib.descope/api/v1/management/password_spec.rb +25 -0
  184. data/spec/lib.descope/api/v1/management/permission_spec.rb +81 -0
  185. data/spec/lib.descope/api/v1/management/project_spec.rb +63 -0
  186. data/spec/lib.descope/api/v1/management/role_spec.rb +85 -0
  187. data/spec/lib.descope/api/v1/management/scim_spec.rb +312 -0
  188. data/spec/lib.descope/api/v1/management/sso_settings_spec.rb +172 -0
  189. data/spec/lib.descope/api/v1/management/tenant_spec.rb +141 -0
  190. data/spec/lib.descope/api/v1/management/user_spec.rb +667 -0
  191. data/spec/lib.descope/api/v1/session_spec.rb +117 -0
  192. data/spec/lib.descope/client_spec.rb +40 -0
  193. data/spec/spec_helper.rb +72 -0
  194. data/spec/support/client_config.rb +14 -0
  195. data/spec/support/dummy_class.rb +36 -0
  196. data/spec/support/utils.rb +32 -0
  197. metadata +420 -0
@@ -0,0 +1,667 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Descope::Api::V1::Management::User do
6
+ before(:all) do
7
+ dummy_instance = DummyClass.new
8
+ dummy_instance.extend(Descope::Api::V1::Management::User)
9
+ @instance = dummy_instance
10
+ end
11
+
12
+ context '.create_user' do
13
+ it 'is expected to respond to a user create method' do
14
+ expect(@instance).to respond_to(:create_user)
15
+ end
16
+
17
+ it 'is expected to create a user with user data' do
18
+ user_tenants_args = [
19
+ {
20
+ tenant_id: 'tenant1'
21
+ },
22
+ {
23
+ tenant_id: 'tenant2',
24
+ role_names: %w[role1 role2]
25
+ }
26
+ ]
27
+ expect(@instance).to receive(:post).with(
28
+ USER_CREATE_PATH, {
29
+ loginId: 'name@mail.com',
30
+ email: 'name@mail.com',
31
+ phone: '+1-212-669-2542',
32
+ name: 'name',
33
+ givenName: 'name',
34
+ familyName: 'Ruby SDK',
35
+ userTenants: associated_tenants_to_hash_array(user_tenants_args),
36
+ test: false,
37
+ picture: 'https://www.example.com/picture.png',
38
+ customAttributes: { 'attr1' => 'value1', 'attr2' => 'value2' },
39
+ additionalIdentifiers: %w[id-1 id-2],
40
+ password: 's3cr3t',
41
+ ssoAppIds: %w[app1 app2],
42
+ invite: false
43
+ }
44
+ )
45
+
46
+ expect do
47
+ @instance.create_user(
48
+ login_id: 'name@mail.com',
49
+ email: 'name@mail.com',
50
+ phone: '+1-212-669-2542',
51
+ name: 'name',
52
+ given_name: 'name',
53
+ family_name: 'Ruby SDK',
54
+ user_tenants: user_tenants_args,
55
+ picture: 'https://www.example.com/picture.png',
56
+ custom_attributes: { 'attr1' => 'value1', 'attr2' => 'value2' },
57
+ additional_identifiers: %w[id-1 id-2],
58
+ password: 's3cr3t',
59
+ sso_app_ids: %w[app1 app2]
60
+ )
61
+ end.not_to raise_error
62
+ end
63
+ end
64
+
65
+ context '.create_batch_users' do
66
+ it 'is expected to respond to a batch user create method' do
67
+ expect(@instance).to respond_to(:create_batch_users)
68
+ end
69
+
70
+ it "is expected to post #{USER_CREATE_BATCH_PATH} with user data" do
71
+ users_input = [
72
+ { 'login_id': 'first@mail.com', 'email': 'first@mail.com' },
73
+ { 'login_id': 'second@mail.com', 'email': 'second@mail.com' },
74
+ { 'login_id': 'third@mail.com', 'email': 'third@mail.com' }
75
+ ]
76
+
77
+ users_params = {
78
+ users: [
79
+ {
80
+ loginId: 'first@mail.com', email: 'first@mail.com', test: false, invite: false
81
+ },
82
+ {
83
+ loginId: 'second@mail.com', email: 'second@mail.com', test: false, invite: false
84
+ },
85
+ {
86
+ loginId: 'third@mail.com', email: 'third@mail.com', test: false, invite: false
87
+ }
88
+ ]
89
+ }
90
+ expect(@instance).to receive(:post).with(
91
+ USER_CREATE_BATCH_PATH, users_params
92
+ )
93
+
94
+ expect do
95
+ @instance.create_batch_users(users_input)
96
+ end.not_to raise_error
97
+ end
98
+ end
99
+
100
+ context '.invite_user' do
101
+ it 'is expected to respond to a user invite method' do
102
+ expect(@instance).to respond_to(:invite_user)
103
+ end
104
+
105
+ it "is expected to post #{USER_CREATE_PATH} with invite true" do
106
+ expect(@instance).to receive(:post).with(
107
+ USER_CREATE_PATH, {
108
+ loginId: 'name@mail.com',
109
+ email: 'name@mail.com',
110
+ test: false,
111
+ invite: true
112
+ }
113
+ )
114
+
115
+ expect do
116
+ @instance.invite_user(
117
+ login_id: 'name@mail.com',
118
+ email: 'name@mail.com'
119
+ )
120
+ end.not_to raise_error
121
+ end
122
+ end
123
+
124
+ context '.update_user' do
125
+ it 'is expected to respond to a update user method' do
126
+ expect(@instance).to respond_to(:update_user)
127
+ end
128
+
129
+ it 'is expected to respond to a user update method' do
130
+ expect(@instance).to receive(:post).with(
131
+ USER_UPDATE_PATH, {
132
+ loginId: 'name@mail.com',
133
+ email: 'name@mail.com',
134
+ givenName: 'mister',
135
+ name: 'something else',
136
+ test: false,
137
+ invite: false
138
+ }
139
+ )
140
+
141
+ expect do
142
+ @instance.update_user(
143
+ login_id: 'name@mail.com',
144
+ email: 'name@mail.com',
145
+ given_name: 'mister',
146
+ name: 'something else'
147
+ )
148
+ end.not_to raise_error
149
+ end
150
+ end
151
+
152
+ context '.delete_user' do
153
+ it 'is expected to respond to a user delete method' do
154
+ expect(@instance).to respond_to(:delete_user)
155
+ end
156
+
157
+ it 'is expected to respond to a user delete method' do
158
+ expect(@instance).to receive(:post).with(
159
+ USER_DELETE_PATH, { loginId: 'name@mail.com' }
160
+ )
161
+
162
+ expect do
163
+ @instance.delete_user('name@mail.com')
164
+ end.not_to raise_error
165
+ end
166
+ end
167
+
168
+ context '.delete_all_user' do
169
+ it 'is expected to respond to a user delete method' do
170
+ expect(@instance).to receive(:delete).with(USER_DELETE_ALL_TEST_USERS_PATH)
171
+
172
+ expect do
173
+ @instance.delete_all_test_users
174
+ end.not_to raise_error
175
+ end
176
+ end
177
+
178
+ context '.load_user' do
179
+ it 'is expected to respond to a user load (by login id) method' do
180
+ expect(@instance).to respond_to(:load_user)
181
+ end
182
+
183
+ it "is expected to get #{USER_LOAD_PATH} with login_id" do
184
+ expect(@instance).to receive(:get).with(
185
+ USER_LOAD_PATH, { loginId: 'someone' }
186
+ )
187
+ expect { @instance.load_user('someone') }.not_to raise_error
188
+ end
189
+ end
190
+
191
+ context '.load_by_user_id' do
192
+ it "is expected to get #{USER_LOAD_PATH} with user_id" do
193
+ allow(@instance).to receive(:get).with(
194
+ USER_LOAD_PATH, { userId: 'ABCD' }
195
+ )
196
+ expect { @instance.load_by_user_id('ABCD') }.not_to raise_error
197
+ end
198
+ end
199
+
200
+ context '.logout_user' do
201
+ it 'is expected to respond to a logout user method' do
202
+ expect(@instance).to receive(:post).with(
203
+ USER_LOGOUT_PATH, { loginId: 'name@mail.com' }
204
+ )
205
+
206
+ expect do
207
+ @instance.logout_user('name@mail.com')
208
+ end.not_to raise_error
209
+ end
210
+
211
+ it 'is expected to respond to a logout user by id method' do
212
+ expect(@instance).to receive(:post).with(
213
+ USER_LOGOUT_PATH, { userId: 'U2ZpARjKAJJmq0fzU2lXNNCGnF4j' }
214
+ )
215
+
216
+ expect do
217
+ @instance.logout_user_by_id('U2ZpARjKAJJmq0fzU2lXNNCGnF4j')
218
+ end.not_to raise_error
219
+ end
220
+ end
221
+
222
+ context '.search_users' do
223
+ it 'is expected to respond to a search_all method' do
224
+ expect(@instance).to respond_to(:search_all_users)
225
+
226
+ expect(@instance).to receive(:post).with(
227
+ USERS_SEARCH_PATH, {
228
+ loginId: 'someone@example.com',
229
+ tenantIds: [],
230
+ roleNames: [],
231
+ limit: 10,
232
+ page: 1,
233
+ ssoAppIds: [],
234
+ ssoOnly: false,
235
+ text: 'some text',
236
+ testUsersOnly: false,
237
+ withTestUser: false
238
+ }
239
+ )
240
+
241
+ expect do
242
+ @instance.search_all_users(
243
+ login_id: 'someone@example.com',
244
+ tenant_ids: [],
245
+ role_names: [],
246
+ text: 'some text',
247
+ limit: 10,
248
+ page: 1,
249
+ sso_app_ids: [],
250
+ test_users_only: false,
251
+ with_test_user: false
252
+ )
253
+ end.not_to raise_error
254
+ end
255
+ end
256
+
257
+ context '.get_provider_token' do
258
+ it 'is expected to respond to a get_provider_token method' do
259
+ expect(@instance).to respond_to(:get_provider_token)
260
+
261
+ expect(@instance).to receive(:get).with(
262
+ USER_GET_PROVIDER_TOKEN, {
263
+ loginId: 'someone@example.com',
264
+ provider: 'google-oauth2'
265
+ }
266
+ )
267
+
268
+ expect do
269
+ @instance.get_provider_token(
270
+ login_id: 'someone@example.com',
271
+ provider: 'google-oauth2'
272
+ )
273
+ end.not_to raise_error
274
+ end
275
+ end
276
+
277
+ context '.activate' do
278
+ it 'is expected to respond to a activate method' do
279
+ expect(@instance).to respond_to(:activate)
280
+
281
+ expect(@instance).to receive(:post).with(
282
+ USER_UPDATE_STATUS_PATH, {
283
+ loginId: 'someone@example.com',
284
+ status: 'enabled'
285
+ }
286
+ )
287
+
288
+ expect do
289
+ @instance.activate('someone@example.com')
290
+ end.not_to raise_error
291
+ end
292
+ end
293
+
294
+ context '.deactivate' do
295
+ it 'is expected to respond to a activate method' do
296
+ expect(@instance).to respond_to(:activate)
297
+
298
+ expect(@instance).to receive(:post).with(
299
+ USER_UPDATE_STATUS_PATH, {
300
+ loginId: 'someone@example.com',
301
+ status: 'disabled'
302
+ }
303
+ )
304
+
305
+ expect do
306
+ @instance.deactivate('someone@example.com')
307
+ end.not_to raise_error
308
+ end
309
+ end
310
+
311
+ context '.update_email' do
312
+ it 'is expected to respond to a update_email method' do
313
+ expect(@instance).to respond_to(:update_email)
314
+
315
+ expect(@instance).to receive(:post).with(
316
+ USER_UPDATE_EMAIL_PATH, {
317
+ loginId: 'someone@example.com',
318
+ email: 'tester@test.com',
319
+ verified: true
320
+ }
321
+ )
322
+
323
+ expect do
324
+ @instance.update_email(
325
+ login_id: 'someone@example.com',
326
+ email: 'tester@test.com',
327
+ verified: true
328
+ )
329
+ end.not_to raise_error
330
+ end
331
+ end
332
+
333
+ context '.update_phone' do
334
+ it 'is expected to respond to a update_phone method' do
335
+ expect(@instance).to respond_to(:update_phone)
336
+
337
+ expect(@instance).to receive(:post).with(
338
+ USER_UPDATE_PHONE_PATH, {
339
+ loginId: 'someone@example.com',
340
+ phone: '1234567890',
341
+ verified: true
342
+ }
343
+ )
344
+
345
+ expect do
346
+ @instance.update_phone(
347
+ login_id: 'someone@example.com',
348
+ phone: '1234567890',
349
+ verified: true
350
+ )
351
+ end.not_to raise_error
352
+ end
353
+ end
354
+
355
+ context '.update_display_name' do
356
+ it 'is expected to respond to a update_display_name method' do
357
+ expect(@instance).to respond_to(:update_display_name)
358
+
359
+ expect(@instance).to receive(:post).with(
360
+ USER_UPDATE_NAME_PATH, {
361
+ loginId: 'someone@example.com',
362
+ name: 'some guy',
363
+ givenName: 'some',
364
+ familyName: 'guy',
365
+ middleName: 'middle'
366
+ }
367
+ )
368
+
369
+ expect do
370
+ @instance.update_display_name(
371
+ login_id: 'someone@example.com',
372
+ name: 'some guy',
373
+ given_name: 'some',
374
+ family_name: 'guy',
375
+ middle_name: 'middle'
376
+ )
377
+ end.not_to raise_error
378
+ end
379
+ end
380
+
381
+ context '.update_picture' do
382
+ it 'is expected to respond to a update_picture method' do
383
+ expect(@instance).to respond_to(:update_picture)
384
+
385
+ expect(@instance).to receive(:post).with(
386
+ USER_UPDATE_PICTURE_PATH, {
387
+ loginId: 'someone@example.com',
388
+ picture: 'https://www.example.com/picture.png'
389
+ }
390
+ )
391
+
392
+ expect do
393
+ @instance.update_picture(
394
+ login_id: 'someone@example.com',
395
+ picture: 'https://www.example.com/picture.png'
396
+ )
397
+ end.not_to raise_error
398
+ end
399
+ end
400
+
401
+ context '.update_custom_attribute' do
402
+ it 'is expected to respond to a update_custom_attribute method' do
403
+ expect(@instance).to respond_to(:update_custom_attribute)
404
+
405
+ expect(@instance).to receive(:post).with(
406
+ USER_UPDATE_CUSTOM_ATTRIBUTE_PATH, {
407
+ loginId: 'someone@example.com',
408
+ attributeKey: 'OU',
409
+ attributeValue: 'Engineering'
410
+ }
411
+ )
412
+
413
+ expect do
414
+ @instance.update_custom_attribute(
415
+ login_id: 'someone@example.com',
416
+ attribute_key: 'OU',
417
+ attribute_value: 'Engineering'
418
+ )
419
+ end.not_to raise_error
420
+ end
421
+ end
422
+
423
+ context '.add_roles' do
424
+ it 'is expected to respond to a add_roles method' do
425
+ expect(@instance).to respond_to(:user_add_roles)
426
+
427
+ expect(@instance).to receive(:post).with(
428
+ USER_ADD_ROLE_PATH, {
429
+ loginId: 'someone@example.com',
430
+ roleNames: %w[role1 role2],
431
+ tenantId: 'tenant1'
432
+ }
433
+ )
434
+
435
+ expect do
436
+ @instance.user_add_roles(
437
+ login_id: 'someone@example.com',
438
+ role_names: %w[role1 role2],
439
+ tenant_id: 'tenant1'
440
+ )
441
+ end.not_to raise_error
442
+ end
443
+ end
444
+
445
+ context '.user_remove_roles' do
446
+ it 'is expected to respond to a user_remove_roles method' do
447
+ expect(@instance).to respond_to(:user_remove_roles)
448
+
449
+ expect(@instance).to receive(:post).with(
450
+ USER_REMOVE_ROLE_PATH, {
451
+ loginId: 'someone@example.com',
452
+ roleNames: %w[role1 role2],
453
+ tenantId: 'tenant1'
454
+ }
455
+ )
456
+
457
+ expect do
458
+ @instance.user_remove_roles(
459
+ login_id: 'someone@example.com',
460
+ role_names: %w[role1 role2],
461
+ tenant_id: 'tenant1'
462
+ )
463
+ end.not_to raise_error
464
+ end
465
+ end
466
+
467
+ context '.add_tenant' do
468
+ it 'is expected to respond to a add_tenant method' do
469
+ expect(@instance).to respond_to(:user_add_tenant)
470
+
471
+ expect(@instance).to receive(:post).with(
472
+ USER_ADD_TENANT_PATH, {
473
+ loginId: 'someone@example.com',
474
+ tenantId: 'tenant1'
475
+ }
476
+ )
477
+
478
+ expect do
479
+ @instance.user_add_tenant(
480
+ login_id: 'someone@example.com',
481
+ tenant_id: 'tenant1'
482
+ )
483
+ end.not_to raise_error
484
+ end
485
+ end
486
+
487
+ context '.remove_tenant' do
488
+ it 'is expected to respond to a remove_tenant method' do
489
+ expect(@instance).to respond_to(:user_remove_tenant)
490
+
491
+ expect(@instance).to receive(:post).with(
492
+ USER_REMOVE_TENANT_PATH, {
493
+ loginId: 'someone@example.com',
494
+ tenantId: 'tenant1'
495
+ }
496
+ )
497
+
498
+ expect do
499
+ @instance.user_remove_tenant(
500
+ login_id: 'someone@example.com',
501
+ tenant_id: 'tenant1'
502
+ )
503
+ end.not_to raise_error
504
+ end
505
+ end
506
+
507
+ context '.add_tenant_role' do
508
+ it 'is expected to respond to a add_tenant_role method' do
509
+ expect(@instance).to respond_to(:add_tenant_role)
510
+
511
+ expect(@instance).to receive(:post).with(
512
+ USER_ADD_TENANT_PATH, {
513
+ loginId: 'someone@example.com',
514
+ tenantId: 'tenant1',
515
+ roleNames: %w[role1 role2]
516
+ }
517
+ )
518
+
519
+ expect do
520
+ @instance.add_tenant_role(
521
+ login_id: 'someone@example.com',
522
+ tenant_id: 'tenant1',
523
+ role_names: %w[role1 role2]
524
+ )
525
+ end.not_to raise_error
526
+ end
527
+ end
528
+
529
+ context '.remove_tenant_role' do
530
+ it 'is expected to respond to a remove_tenant_role method' do
531
+ expect(@instance).to respond_to(:user_remove_tenant_roles)
532
+
533
+ expect(@instance).to receive(:post).with(
534
+ USER_REMOVE_TENANT_PATH, {
535
+ loginId: 'someone@example.com',
536
+ tenantId: 'tenant1',
537
+ roleNames: %w[role1 role2]
538
+ }
539
+ )
540
+
541
+ expect do
542
+ @instance.user_remove_tenant_roles(
543
+ login_id: 'someone@example.com',
544
+ tenant_id: 'tenant1',
545
+ role_names: %w[role1 role2]
546
+ )
547
+ end.not_to raise_error
548
+ end
549
+ end
550
+
551
+ context '.set_password' do
552
+ it 'is expected to respond to a set_password method' do
553
+ expect(@instance).to respond_to(:set_password)
554
+
555
+ expect(@instance).to receive(:post).with(
556
+ USER_SET_PASSWORD_PATH, {
557
+ loginId: 'someone@example.com',
558
+ password: 's3cr3t'
559
+ }
560
+ )
561
+
562
+ expect do
563
+ @instance.set_password(
564
+ login_id: 'someone@example.com',
565
+ password: 's3cr3t'
566
+ )
567
+ end.not_to raise_error
568
+ end
569
+ end
570
+
571
+ context '.expire_password' do
572
+ it 'is expected to respond to a expire_password method' do
573
+ expect(@instance).to respond_to(:expire_password)
574
+
575
+ expect(@instance).to receive(:post).with(
576
+ USER_EXPIRE_PASSWORD_PATH, { loginId: 'someone@example.com' }
577
+ )
578
+
579
+ expect { @instance.expire_password('someone@example.com') }.not_to raise_error
580
+ end
581
+ end
582
+
583
+ context '.generate_otp_for_test' do
584
+ it 'is expected to respond to a generate_otp_for_test method' do
585
+ expect(@instance).to respond_to(:generate_otp_for_test_user)
586
+
587
+ expect(@instance).to receive(:post).with(
588
+ USER_GENERATE_OTP_FOR_TEST_PATH, {
589
+ loginId: 'someone@example.com',
590
+ deliveryMethod: 'email'
591
+ }
592
+ )
593
+
594
+ expect do
595
+ @instance.generate_otp_for_test_user(
596
+ method: DeliveryMethod::EMAIL,
597
+ login_id: 'someone@example.com'
598
+ )
599
+ end.not_to raise_error
600
+ end
601
+ end
602
+
603
+ context '.generate_enchanted_link_for_test' do
604
+ it 'is expected to respond to a generate_enchanted_link_for_test method' do
605
+ expect(@instance).to respond_to(:generate_enchanted_link_for_test_user)
606
+
607
+ expect(@instance).to receive(:post).with(
608
+ USER_GENERATE_ENCHANTED_LINK_FOR_TEST_PATH, {
609
+ loginId: 'someone@example.com',
610
+ URI: 'https://www.example.com'
611
+ }
612
+ )
613
+
614
+ expect do
615
+ @instance.generate_enchanted_link_for_test_user(
616
+ login_id: 'someone@example.com',
617
+ uri: 'https://www.example.com'
618
+ )
619
+ end.not_to raise_error
620
+ end
621
+ end
622
+
623
+ context '.update_jwt' do
624
+ it 'is expected to respond to a update_jwt method' do
625
+ expect(@instance).to respond_to(:update_jwt)
626
+
627
+ expect(@instance).to receive(:post).with(
628
+ UPDATE_JWT_PATH, {
629
+ jwt: 'eyJ3abcde12345',
630
+ customClaims: { 'claim1' => 'value1', 'claim2' => 'value2' }
631
+ }
632
+ )
633
+
634
+ expect do
635
+ @instance.update_jwt(
636
+ jwt: 'eyJ3abcde12345',
637
+ custom_claims: { 'claim1' => 'value1', 'claim2' => 'value2' }
638
+ )
639
+ end.not_to raise_error
640
+ end
641
+ end
642
+
643
+ context '.generate_embedded_link' do
644
+ it 'is expected to respond to generate_embedded_link' do
645
+ expect(@instance).to respond_to(:generate_embedded_link)
646
+ end
647
+
648
+ it 'is expected to generate embedded link' do
649
+ request_params = {
650
+ loginId: 'test',
651
+ customClaims: { 'abc': '123' }
652
+ }
653
+
654
+ expect(@instance).to receive(:post).with(
655
+ USER_GENERATE_EMBEDDED_LINK_PATH,
656
+ request_params
657
+ )
658
+
659
+ expect do
660
+ @instance.generate_embedded_link(
661
+ login_id: 'test',
662
+ custom_claims: { 'abc': '123' }
663
+ )
664
+ end.not_to raise_error
665
+ end
666
+ end
667
+ end