scimaenaga 0.6.2 → 0.7.0

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