descope 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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