scimaenaga 0.6.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ curl 'http://localhost:9999/scim/v2/Groups/1' \
2
+ -X 'PUT' \
3
+ -d '{"schemas": ["urn:ietf:params:scim:api:messages:2.0:PutOp"], "Operations": ["op": "Add", "path": "members", "value": {"$ref": null, "value": "1"}]}' \
4
+ -H 'Content-Type: application/scim+json' \
5
+ -H 'Authorization:Basic dGVzdF9jb21wYW55OjE=' \
File without changes
@@ -5,5 +5,7 @@ FactoryBot.define do
5
5
  first_name { "Test" }
6
6
  last_name { "User" }
7
7
  sequence(:email) { |n| "#{n}@example.com" }
8
+
9
+ deletable { true }
8
10
  end
9
11
  end
@@ -1,63 +1,62 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "spec_helper"
3
+ require 'spec_helper'
4
4
 
5
5
  describe ScimPatchOperation do
6
-
7
6
  let(:op) { 'Replace' }
8
7
  let(:path) { 'userName' }
9
8
  let(:value) { 'taro.suzuki' }
10
- let(:mutable_attributes_schema) {
9
+ let(:mutable_attributes_schema) do
11
10
  {
12
11
  userName: :name,
13
12
  displayName: :display_name,
14
13
  emails: [
15
14
  {
16
- value: :email
15
+ value: :email,
17
16
  }
18
17
  ],
19
18
  name: {
20
19
  familyName: :family_name,
21
- givenName: :given_name
20
+ givenName: :given_name,
22
21
  },
23
- active: :active
22
+ active: :active,
24
23
  }
25
- }
26
- let(:operation) {
24
+ end
25
+ let(:operation) do
27
26
  described_class.new(
28
27
  op,
29
28
  path,
30
29
  value,
31
30
  mutable_attributes_schema
32
31
  )
33
- }
32
+ end
34
33
  describe '#initialize' do
35
34
  context 'replace single attribute' do
36
35
  it {
37
- expect(operation.op).to eq :replace
38
- expect(operation.path_scim).to eq path
39
- expect(operation.path_sp).to eq :name
40
- expect(operation.value).to eq value
36
+ expect(operation.operations[0].op).to eq :replace
37
+ expect(operation.operations[0].path_scim).to eq path
38
+ expect(operation.operations[0].path_sp).to eq :name
39
+ expect(operation.operations[0].value).to eq value
41
40
  }
42
41
  end
43
42
 
44
43
  context 'add single attribute' do
45
44
  let(:op) { 'Add' }
46
45
  it {
47
- expect(operation.op).to eq :add
48
- expect(operation.path_scim).to eq path
49
- expect(operation.path_sp).to eq :name
50
- expect(operation.value).to eq value
46
+ expect(operation.operations[0].op).to eq :add
47
+ expect(operation.operations[0].path_scim).to eq path
48
+ expect(operation.operations[0].path_sp).to eq :name
49
+ expect(operation.operations[0].value).to eq value
51
50
  }
52
51
  end
53
52
 
54
53
  context 'remove single attribute' do
55
54
  let(:op) { 'Remove' }
56
55
  it {
57
- expect(operation.op).to eq :remove
58
- expect(operation.path_scim).to eq path
59
- expect(operation.path_sp).to eq :name
60
- expect(operation.value).to eq value
56
+ expect(operation.operations[0].op).to eq :remove
57
+ expect(operation.operations[0].path_scim).to eq path
58
+ expect(operation.operations[0].path_sp).to eq :name
59
+ expect(operation.operations[0].value).to eq value
61
60
  }
62
61
  end
63
62
 
@@ -65,10 +64,10 @@ describe ScimPatchOperation do
65
64
  let(:path) { 'emails[type eq "work"].value' }
66
65
  let(:value) { 'taro.suzuki@example.com' }
67
66
  it {
68
- expect(operation.op).to eq :replace
69
- expect(operation.path_scim).to eq path
70
- expect(operation.path_sp).to eq :email
71
- expect(operation.value).to eq value
67
+ expect(operation.operations[0].op).to eq :replace
68
+ expect(operation.operations[0].path_scim).to eq path
69
+ expect(operation.operations[0].path_sp).to eq :email
70
+ expect(operation.operations[0].value).to eq value
72
71
  }
73
72
  end
74
73
 
@@ -76,10 +75,10 @@ describe ScimPatchOperation do
76
75
  let(:path) { 'name.familyName' }
77
76
  let(:value) { 'Suzuki' }
78
77
  it {
79
- expect(operation.op).to eq :replace
80
- expect(operation.path_scim).to eq path
81
- expect(operation.path_sp).to eq :family_name
82
- expect(operation.value).to eq value
78
+ expect(operation.operations[0].op).to eq :replace
79
+ expect(operation.operations[0].path_scim).to eq path
80
+ expect(operation.operations[0].path_sp).to eq :family_name
81
+ expect(operation.operations[0].value).to eq value
83
82
  }
84
83
  end
85
84
 
@@ -88,9 +87,30 @@ describe ScimPatchOperation do
88
87
  let(:value) { 'False' }
89
88
 
90
89
  it 'convert string to bool' do
91
- expect(operation.value).to eq false
90
+ expect(operation.operations[0].value).to eq false
92
91
  end
93
92
  end
94
- end
95
93
 
94
+ context 'replace multiple attribute' do
95
+ let(:path) { nil }
96
+ let(:value) do
97
+ {
98
+ 'userName' => 'taro.suzuki',
99
+ 'displayName' => 'Taro Suzuki',
100
+ }
101
+ end
102
+
103
+ it 'parse multiple value' do
104
+ expect(operation.operations[0].op).to eq :replace
105
+ expect(operation.operations[0].path_scim).to eq 'userName'
106
+ expect(operation.operations[0].path_sp).to eq :name
107
+ expect(operation.operations[0].value).to eq 'taro.suzuki'
108
+
109
+ expect(operation.operations[1].op).to eq :replace
110
+ expect(operation.operations[1].path_scim).to eq 'displayName'
111
+ expect(operation.operations[1].path_sp).to eq :display_name
112
+ expect(operation.operations[1].value).to eq 'Taro Suzuki'
113
+ end
114
+ end
115
+ end
96
116
  end
@@ -3,81 +3,79 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe ScimPatch do
6
-
7
- let(:params) {
6
+ let(:params) do
8
7
  {
9
8
  'schemas' => ['urn:ietf:params:scim:api:messages:2.0:PatchOp'],
10
9
  'Operations' => [
11
10
  {
12
11
  'op' => 'Replace',
13
12
  'path' => 'userName',
14
- 'value' => 'taro.suzuki'
13
+ 'value' => 'taro.suzuki',
15
14
  },
16
15
  {
17
- 'op' => 'Replace',
16
+ 'op' => 'Replace',
18
17
  'path' => 'emails[type eq "work"].value',
19
- 'value' => 'taro.suzuki@example.com'
18
+ 'value' => 'taro.suzuki@example.com',
20
19
  },
21
20
  {
22
21
  'op' => 'Replace',
23
22
  'path' => 'name.familyName',
24
- 'value' => 'Suzuki'
23
+ 'value' => 'Suzuki',
25
24
  },
26
25
  {
27
26
  'op' => 'Replace',
28
27
  'path' => 'active',
29
- 'value' => 'False'
28
+ 'value' => 'False',
30
29
  }
31
- ]
30
+ ],
32
31
  }
33
- }
32
+ end
34
33
 
35
- let(:mutable_attributes_schema) {
34
+ let(:mutable_attributes_schema) do
36
35
  {
37
36
  userName: :name,
38
37
  displayName: :display_name,
39
38
  emails: [
40
39
  {
41
- value: :email
40
+ value: :email,
42
41
  }
43
42
  ],
44
43
  name: {
45
44
  familyName: :family_name,
46
- givenName: :given_name
45
+ givenName: :given_name,
47
46
  },
48
- active: :active
47
+ active: :active,
49
48
  }
50
- }
49
+ end
51
50
 
52
51
  let(:patch) { described_class.new(params, mutable_attributes_schema) }
53
52
 
54
53
  describe '#initialize' do
55
54
  it {
56
- expect(patch.operations[0].op).to eq :replace
57
- expect(patch.operations[0].path_scim).to eq 'userName'
58
- expect(patch.operations[0].path_sp).to eq :name
59
- expect(patch.operations[0].value).to eq 'taro.suzuki'
55
+ expect(patch.operations[0].operations[0].op).to eq :replace
56
+ expect(patch.operations[0].operations[0].path_scim).to eq 'userName'
57
+ expect(patch.operations[0].operations[0].path_sp).to eq :name
58
+ expect(patch.operations[0].operations[0].value).to eq 'taro.suzuki'
60
59
 
61
- expect(patch.operations[1].op).to eq :replace
62
- expect(patch.operations[1].path_scim).to eq 'emails[type eq "work"].value'
63
- expect(patch.operations[1].path_sp).to eq :email
64
- expect(patch.operations[1].value).to eq 'taro.suzuki@example.com'
60
+ expect(patch.operations[1].operations[0].op).to eq :replace
61
+ expect(patch.operations[1].operations[0].path_scim).to eq 'emails[type eq "work"].value'
62
+ expect(patch.operations[1].operations[0].path_sp).to eq :email
63
+ expect(patch.operations[1].operations[0].value).to eq 'taro.suzuki@example.com'
65
64
 
66
- expect(patch.operations[2].op).to eq :replace
67
- expect(patch.operations[2].path_scim).to eq 'name.familyName'
68
- expect(patch.operations[2].path_sp).to eq :family_name
69
- expect(patch.operations[2].value).to eq 'Suzuki'
65
+ expect(patch.operations[2].operations[0].op).to eq :replace
66
+ expect(patch.operations[2].operations[0].path_scim).to eq 'name.familyName'
67
+ expect(patch.operations[2].operations[0].path_sp).to eq :family_name
68
+ expect(patch.operations[2].operations[0].value).to eq 'Suzuki'
70
69
 
71
- expect(patch.operations[3].op).to eq :replace
72
- expect(patch.operations[3].path_scim).to eq 'active'
73
- expect(patch.operations[3].path_sp).to eq :active
74
- expect(patch.operations[3].value).to eq false
70
+ expect(patch.operations[3].operations[0].op).to eq :replace
71
+ expect(patch.operations[3].operations[0].path_scim).to eq 'active'
72
+ expect(patch.operations[3].operations[0].path_sp).to eq :active
73
+ expect(patch.operations[3].operations[0].value).to eq false
75
74
  }
76
75
  end
77
76
 
78
77
  # describe '#update' do
79
- # create user by factory bot
80
- # patch.update(user)
78
+ # create user by factory bot
79
+ # patch.update(user)
81
80
  # end
82
-
83
81
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scimaenaga
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Studist Corporation
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-27 00:00:00.000000000 Z
11
+ date: 2022-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -135,7 +135,7 @@ dependencies:
135
135
  - !ruby/object:Gem::Version
136
136
  version: '1.5'
137
137
  description: SCIM Adapter for Rails.
138
- email:
138
+ email:
139
139
  executables: []
140
140
  extensions: []
141
141
  extra_rdoc_files: []
@@ -219,19 +219,26 @@ files:
219
219
  - spec/dummy/config/routes.rb
220
220
  - spec/dummy/config/secrets.yml
221
221
  - spec/dummy/config/spring.rb
222
+ - spec/dummy/db/development.sqlite3
222
223
  - spec/dummy/db/migrate/20181206184304_create_users.rb
223
224
  - spec/dummy/db/migrate/20181206184313_create_companies.rb
224
225
  - spec/dummy/db/migrate/20210423075859_create_groups.rb
225
226
  - spec/dummy/db/migrate/20210423075950_create_group_users.rb
226
227
  - spec/dummy/db/migrate/20220117095407_add_country_to_users.rb
228
+ - spec/dummy/db/migrate/20220131090107_add_deletable_to_users.rb
227
229
  - spec/dummy/db/schema.rb
228
230
  - spec/dummy/db/seeds.rb
231
+ - spec/dummy/db/test.sqlite3
232
+ - spec/dummy/log/development.log
233
+ - spec/dummy/log/test.log
229
234
  - spec/dummy/public/404.html
230
235
  - spec/dummy/public/422.html
231
236
  - spec/dummy/public/500.html
232
237
  - spec/dummy/public/apple-touch-icon-precomposed.png
233
238
  - spec/dummy/public/apple-touch-icon.png
234
239
  - spec/dummy/public/favicon.ico
240
+ - spec/dummy/put_group.http
241
+ - spec/dummy/tmp/restart.txt
235
242
  - spec/factories/company.rb
236
243
  - spec/factories/group.rb
237
244
  - spec/factories/user.rb
@@ -246,7 +253,7 @@ homepage: https://github.com/StudistCorporation/scimaenaga
246
253
  licenses:
247
254
  - MIT
248
255
  metadata: {}
249
- post_install_message:
256
+ post_install_message:
250
257
  rdoc_options: []
251
258
  require_paths:
252
259
  - lib
@@ -265,83 +272,90 @@ required_rubygems_version: !ruby/object:Gem::Requirement
265
272
  version: '0'
266
273
  requirements: []
267
274
  rubygems_version: 3.0.3
268
- signing_key:
275
+ signing_key:
269
276
  specification_version: 4
270
277
  summary: SCIM Adapter for Rails.
271
278
  test_files:
272
- - spec/dummy/config.ru
273
- - spec/dummy/db/migrate/20181206184313_create_companies.rb
274
- - spec/dummy/db/migrate/20181206184304_create_users.rb
275
- - spec/dummy/db/migrate/20210423075950_create_group_users.rb
276
- - spec/dummy/db/migrate/20210423075859_create_groups.rb
277
- - spec/dummy/db/migrate/20220117095407_add_country_to_users.rb
278
- - spec/dummy/db/schema.rb
279
- - spec/dummy/db/seeds.rb
280
- - spec/dummy/config/spring.rb
281
- - spec/dummy/config/environment.rb
282
- - spec/dummy/config/routes.rb
283
- - spec/dummy/config/cable.yml
284
- - spec/dummy/config/database.yml
285
- - spec/dummy/config/secrets.yml
286
- - spec/dummy/config/application.rb
287
- - spec/dummy/config/initializers/mime_types.rb
288
- - spec/dummy/config/initializers/backtrace_silencers.rb
289
- - spec/dummy/config/initializers/wrap_parameters.rb
290
- - spec/dummy/config/initializers/assets.rb
291
- - spec/dummy/config/initializers/inflections.rb
292
- - spec/dummy/config/initializers/new_framework_defaults.rb
293
- - spec/dummy/config/initializers/filter_parameter_logging.rb
294
- - spec/dummy/config/initializers/scim_rails_config.rb
295
- - spec/dummy/config/initializers/session_store.rb
296
- - spec/dummy/config/initializers/cookies_serializer.rb
297
- - spec/dummy/config/initializers/application_controller_renderer.rb
298
- - spec/dummy/config/boot.rb
299
- - spec/dummy/config/puma.rb
300
- - spec/dummy/config/environments/test.rb
301
- - spec/dummy/config/environments/production.rb
302
- - spec/dummy/config/environments/development.rb
303
- - spec/dummy/config/locales/en.yml
279
+ - spec/spec_helper.rb
280
+ - spec/dummy/app/mailers/application_mailer.rb
281
+ - spec/dummy/app/models/group.rb
282
+ - spec/dummy/app/models/company.rb
283
+ - spec/dummy/app/models/group_user.rb
284
+ - spec/dummy/app/models/application_record.rb
285
+ - spec/dummy/app/models/user.rb
286
+ - spec/dummy/app/jobs/application_job.rb
287
+ - spec/dummy/app/controllers/application_controller.rb
288
+ - spec/dummy/app/views/layouts/application.html.erb
304
289
  - spec/dummy/app/views/layouts/mailer.html.erb
305
290
  - spec/dummy/app/views/layouts/mailer.text.erb
306
- - spec/dummy/app/views/layouts/application.html.erb
307
- - spec/dummy/app/channels/application_cable/channel.rb
308
- - spec/dummy/app/channels/application_cable/connection.rb
309
- - spec/dummy/app/jobs/application_job.rb
310
291
  - spec/dummy/app/assets/config/manifest.js
311
- - spec/dummy/app/assets/javascripts/application.js
312
292
  - spec/dummy/app/assets/javascripts/cable.js
293
+ - spec/dummy/app/assets/javascripts/application.js
313
294
  - spec/dummy/app/assets/stylesheets/application.css
314
295
  - spec/dummy/app/helpers/application_helper.rb
315
- - spec/dummy/app/controllers/application_controller.rb
316
- - spec/dummy/app/models/user.rb
317
- - spec/dummy/app/models/group.rb
318
- - spec/dummy/app/models/application_record.rb
319
- - spec/dummy/app/models/group_user.rb
320
- - spec/dummy/app/models/company.rb
321
- - spec/dummy/app/mailers/application_mailer.rb
322
- - spec/dummy/Rakefile
296
+ - spec/dummy/app/channels/application_cable/connection.rb
297
+ - spec/dummy/app/channels/application_cable/channel.rb
298
+ - spec/dummy/bin/update
299
+ - spec/dummy/bin/rake
323
300
  - spec/dummy/bin/setup
324
- - spec/dummy/bin/rails
325
301
  - spec/dummy/bin/bundle
326
- - spec/dummy/bin/rake
327
- - spec/dummy/bin/update
328
- - spec/dummy/public/500.html
329
- - spec/dummy/public/apple-touch-icon-precomposed.png
302
+ - spec/dummy/bin/rails
303
+ - spec/dummy/config/secrets.yml
304
+ - spec/dummy/config/routes.rb
305
+ - spec/dummy/config/locales/en.yml
306
+ - spec/dummy/config/cable.yml
307
+ - spec/dummy/config/environments/production.rb
308
+ - spec/dummy/config/environments/development.rb
309
+ - spec/dummy/config/environments/test.rb
310
+ - spec/dummy/config/spring.rb
311
+ - spec/dummy/config/environment.rb
312
+ - spec/dummy/config/application.rb
313
+ - spec/dummy/config/puma.rb
314
+ - spec/dummy/config/database.yml
315
+ - spec/dummy/config/boot.rb
316
+ - spec/dummy/config/initializers/application_controller_renderer.rb
317
+ - spec/dummy/config/initializers/backtrace_silencers.rb
318
+ - spec/dummy/config/initializers/mime_types.rb
319
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
320
+ - spec/dummy/config/initializers/session_store.rb
321
+ - spec/dummy/config/initializers/wrap_parameters.rb
322
+ - spec/dummy/config/initializers/new_framework_defaults.rb
323
+ - spec/dummy/config/initializers/assets.rb
324
+ - spec/dummy/config/initializers/cookies_serializer.rb
325
+ - spec/dummy/config/initializers/scim_rails_config.rb
326
+ - spec/dummy/config/initializers/inflections.rb
327
+ - spec/dummy/config.ru
328
+ - spec/dummy/put_group.http
329
+ - spec/dummy/Rakefile
330
330
  - spec/dummy/public/favicon.ico
331
- - spec/dummy/public/404.html
332
- - spec/dummy/public/apple-touch-icon.png
333
331
  - spec/dummy/public/422.html
332
+ - spec/dummy/public/apple-touch-icon.png
333
+ - spec/dummy/public/500.html
334
+ - spec/dummy/public/404.html
335
+ - spec/dummy/public/apple-touch-icon-precomposed.png
336
+ - spec/dummy/db/schema.rb
337
+ - spec/dummy/db/seeds.rb
338
+ - spec/dummy/db/test.sqlite3
339
+ - spec/dummy/db/migrate/20220117095407_add_country_to_users.rb
340
+ - spec/dummy/db/migrate/20220131090107_add_deletable_to_users.rb
341
+ - spec/dummy/db/migrate/20181206184304_create_users.rb
342
+ - spec/dummy/db/migrate/20210423075950_create_group_users.rb
343
+ - spec/dummy/db/migrate/20181206184313_create_companies.rb
344
+ - spec/dummy/db/migrate/20210423075859_create_groups.rb
345
+ - spec/dummy/db/development.sqlite3
346
+ - spec/dummy/log/test.log
347
+ - spec/dummy/log/development.log
348
+ - spec/dummy/tmp/restart.txt
349
+ - spec/libraries/scim_patch_operation_spec.rb
350
+ - spec/libraries/scim_patch_spec.rb
351
+ - spec/models/scim_query_parser_spec.rb
334
352
  - spec/support/factory_bot.rb
335
353
  - spec/support/auth_helper.rb
354
+ - spec/factories/group.rb
355
+ - spec/factories/company.rb
356
+ - spec/factories/user.rb
336
357
  - spec/lib/scim_rails/encoder_spec.rb
337
- - spec/controllers/scim_rails/scim_users_controller_spec.rb
338
358
  - spec/controllers/scim_rails/scim_users_request_spec.rb
339
- - spec/controllers/scim_rails/scim_groups_request_spec.rb
359
+ - spec/controllers/scim_rails/scim_users_controller_spec.rb
340
360
  - spec/controllers/scim_rails/scim_groups_controller_spec.rb
341
- - spec/libraries/scim_patch_spec.rb
342
- - spec/libraries/scim_patch_operation_spec.rb
343
- - spec/factories/user.rb
344
- - spec/factories/group.rb
345
- - spec/factories/company.rb
346
- - spec/spec_helper.rb
347
- - spec/models/scim_query_parser_spec.rb
361
+ - spec/controllers/scim_rails/scim_groups_request_spec.rb