scimitar 1.3.3 → 1.5.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.
@@ -42,13 +42,13 @@ RSpec.describe Scimitar::Resources::User do
42
42
  let(:user) { described_class.new }
43
43
 
44
44
  it 'adds the error when the value is a string' do
45
- user.add_errors_from_hash(key: 'some error')
45
+ user.add_errors_from_hash({key: 'some error'})
46
46
  expect(user.errors.messages.to_h).to eql({key: ['some error']})
47
47
  expect(user.errors.full_messages).to eql(['Key some error'])
48
48
  end
49
49
 
50
50
  it 'adds the error when the value is an array' do
51
- user.add_errors_from_hash(key: ['error1', 'error2'])
51
+ user.add_errors_from_hash({key: ['error1', 'error2']})
52
52
  expect(user.errors.messages.to_h).to eql({key: ['error1', 'error2']})
53
53
  expect(user.errors.full_messages).to eql(['Key error1', 'Key error2'])
54
54
  end
@@ -7,9 +7,21 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
7
7
 
8
8
  lmt = Time.parse("2023-01-09 14:25:00 +1300")
9
9
 
10
- @u1 = MockUser.create(username: '1', first_name: 'Foo', last_name: 'Ark', home_email_address: 'home_1@test.com', scim_uid: '001', created_at: lmt, updated_at: lmt + 1)
11
- @u2 = MockUser.create(username: '2', first_name: 'Foo', last_name: 'Bar', home_email_address: 'home_2@test.com', scim_uid: '002', created_at: lmt, updated_at: lmt + 2)
12
- @u3 = MockUser.create(username: '3', first_name: 'Foo', home_email_address: 'home_3@test.com', scim_uid: '003', created_at: lmt, updated_at: lmt + 3)
10
+ # If a sort order is unspecified, the controller defaults to ID ascending.
11
+ # With UUID based IDs, testing life is made easier by ensuring that the
12
+ # creation order matches an ascending UUID sort order (which is what would
13
+ # happen if we were using integer primary keys).
14
+ #
15
+ lmt = Time.parse("2023-01-09 14:25:00 +1300")
16
+ ids = 3.times.map { SecureRandom.uuid }.sort()
17
+
18
+ @u1 = MockUser.create(primary_key: ids.shift(), username: '1', first_name: 'Foo', last_name: 'Ark', home_email_address: 'home_1@test.com', scim_uid: '001', created_at: lmt, updated_at: lmt + 1)
19
+ @u2 = MockUser.create(primary_key: ids.shift(), username: '2', first_name: 'Foo', last_name: 'Bar', home_email_address: 'home_2@test.com', scim_uid: '002', created_at: lmt, updated_at: lmt + 2)
20
+ @u3 = MockUser.create(primary_key: ids.shift(), username: '3', first_name: 'Foo', home_email_address: 'home_3@test.com', scim_uid: '003', created_at: lmt, updated_at: lmt + 3)
21
+
22
+ @g1 = MockGroup.create!(display_name: 'Group 1')
23
+ @g2 = MockGroup.create!(display_name: 'Group 2')
24
+ @g3 = MockGroup.create!(display_name: 'Group 3')
13
25
  end
14
26
 
15
27
  # ===========================================================================
@@ -32,21 +44,41 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
32
44
  end # "context 'with no items' do"
33
45
 
34
46
  context 'with items' do
35
- it 'returns all items' do
36
- get '/Users', params: { format: :scim }
47
+ context 'with a UUID, renamed primary key column' do
48
+ it 'returns all items' do
49
+ get '/Users', params: { format: :scim }
37
50
 
38
- expect(response.status).to eql(200)
39
- result = JSON.parse(response.body)
51
+ expect(response.status).to eql(200)
52
+ result = JSON.parse(response.body)
40
53
 
41
- expect(result['totalResults']).to eql(3)
42
- expect(result['Resources'].size).to eql(3)
54
+ expect(result['totalResults']).to eql(3)
55
+ expect(result['Resources'].size).to eql(3)
43
56
 
44
- ids = result['Resources'].map { |resource| resource['id'] }
45
- expect(ids).to match_array([@u1.id.to_s, @u2.id.to_s, @u3.id.to_s])
57
+ ids = result['Resources'].map { |resource| resource['id'] }
58
+ expect(ids).to match_array([@u1.primary_key.to_s, @u2.primary_key.to_s, @u3.primary_key.to_s])
46
59
 
47
- usernames = result['Resources'].map { |resource| resource['userName'] }
48
- expect(usernames).to match_array(['1', '2', '3'])
49
- end
60
+ usernames = result['Resources'].map { |resource| resource['userName'] }
61
+ expect(usernames).to match_array(['1', '2', '3'])
62
+ end
63
+ end # "context 'with a UUID, renamed primary key column' do"
64
+
65
+ context 'with an integer, conventionally named primary key column' do
66
+ it 'returns all items' do
67
+ get '/Groups', params: { format: :scim }
68
+
69
+ expect(response.status).to eql(200)
70
+ result = JSON.parse(response.body)
71
+
72
+ expect(result['totalResults']).to eql(3)
73
+ expect(result['Resources'].size).to eql(3)
74
+
75
+ ids = result['Resources'].map { |resource| resource['id'] }
76
+ expect(ids).to match_array([@g1.id.to_s, @g2.id.to_s, @g3.id.to_s])
77
+
78
+ usernames = result['Resources'].map { |resource| resource['displayName'] }
79
+ expect(usernames).to match_array(['Group 1', 'Group 2', 'Group 3'])
80
+ end
81
+ end # "context 'with an integer, conventionally named primary key column' do"
50
82
 
51
83
  it 'applies a filter, with case-insensitive value comparison' do
52
84
  get '/Users', params: {
@@ -61,7 +93,7 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
61
93
  expect(result['Resources'].size).to eql(1)
62
94
 
63
95
  ids = result['Resources'].map { |resource| resource['id'] }
64
- expect(ids).to match_array([@u2.id.to_s])
96
+ expect(ids).to match_array([@u2.primary_key.to_s])
65
97
 
66
98
  usernames = result['Resources'].map { |resource| resource['userName'] }
67
99
  expect(usernames).to match_array(['2'])
@@ -80,7 +112,7 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
80
112
  expect(result['Resources'].size).to eql(1)
81
113
 
82
114
  ids = result['Resources'].map { |resource| resource['id'] }
83
- expect(ids).to match_array([@u2.id.to_s])
115
+ expect(ids).to match_array([@u2.primary_key.to_s])
84
116
 
85
117
  usernames = result['Resources'].map { |resource| resource['userName'] }
86
118
  expect(usernames).to match_array(['2'])
@@ -93,7 +125,7 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
93
125
  it 'applies a filter on primary keys, using direct comparison (rather than e.g. case-insensitive operators)' do
94
126
  get '/Users', params: {
95
127
  format: :scim,
96
- filter: "id eq \"#{@u3.id}\""
128
+ filter: "id eq \"#{@u3.primary_key}\""
97
129
  }
98
130
 
99
131
  expect(response.status).to eql(200)
@@ -103,7 +135,7 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
103
135
  expect(result['Resources'].size).to eql(1)
104
136
 
105
137
  ids = result['Resources'].map { |resource| resource['id'] }
106
- expect(ids).to match_array([@u3.id.to_s])
138
+ expect(ids).to match_array([@u3.primary_key.to_s])
107
139
 
108
140
  usernames = result['Resources'].map { |resource| resource['userName'] }
109
141
  expect(usernames).to match_array(['3'])
@@ -122,7 +154,7 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
122
154
  expect(result['Resources'].size).to eql(1)
123
155
 
124
156
  ids = result['Resources'].map { |resource| resource['id'] }
125
- expect(ids).to match_array([@u2.id.to_s])
157
+ expect(ids).to match_array([@u2.primary_key.to_s])
126
158
 
127
159
  usernames = result['Resources'].map { |resource| resource['userName'] }
128
160
  expect(usernames).to match_array(['2'])
@@ -141,7 +173,7 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
141
173
  expect(result['Resources'].size).to eql(1)
142
174
 
143
175
  ids = result['Resources'].map { |resource| resource['id'] }
144
- expect(ids).to match_array([@u3.id.to_s])
176
+ expect(ids).to match_array([@u3.primary_key.to_s])
145
177
 
146
178
  usernames = result['Resources'].map { |resource| resource['userName'] }
147
179
  expect(usernames).to match_array(['3'])
@@ -161,7 +193,7 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
161
193
  expect(result['Resources'].size).to eql(2)
162
194
 
163
195
  ids = result['Resources'].map { |resource| resource['id'] }
164
- expect(ids).to match_array([@u1.id.to_s, @u2.id.to_s])
196
+ expect(ids).to match_array([@u1.primary_key.to_s, @u2.primary_key.to_s])
165
197
 
166
198
  usernames = result['Resources'].map { |resource| resource['userName'] }
167
199
  expect(usernames).to match_array(['1', '2'])
@@ -180,7 +212,7 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
180
212
  expect(result['Resources'].size).to eql(2)
181
213
 
182
214
  ids = result['Resources'].map { |resource| resource['id'] }
183
- expect(ids).to match_array([@u2.id.to_s, @u3.id.to_s])
215
+ expect(ids).to match_array([@u2.primary_key.to_s, @u3.primary_key.to_s])
184
216
 
185
217
  usernames = result['Resources'].map { |resource| resource['userName'] }
186
218
  expect(usernames).to match_array(['2', '3'])
@@ -204,18 +236,34 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
204
236
  # ===========================================================================
205
237
 
206
238
  context '#show' do
207
- it 'shows an item' do
208
- expect_any_instance_of(MockUsersController).to receive(:show).once.and_call_original
209
- get "/Users/#{@u2.id}", params: { format: :scim }
239
+ context 'with a UUID, renamed primary key column' do
240
+ it 'shows an item' do
241
+ expect_any_instance_of(MockUsersController).to receive(:show).once.and_call_original
242
+ get "/Users/#{@u2.primary_key}", params: { format: :scim }
210
243
 
211
- expect(response.status).to eql(200)
212
- result = JSON.parse(response.body)
244
+ expect(response.status).to eql(200)
245
+ result = JSON.parse(response.body)
213
246
 
214
- expect(result['id']).to eql(@u2.id.to_s) # Note - ID was converted String; not Integer
215
- expect(result['userName']).to eql('2')
216
- expect(result['name']['familyName']).to eql('Bar')
217
- expect(result['meta']['resourceType']).to eql('User')
218
- end
247
+ expect(result['id']).to eql(@u2.primary_key.to_s)
248
+ expect(result['userName']).to eql('2')
249
+ expect(result['name']['familyName']).to eql('Bar')
250
+ expect(result['meta']['resourceType']).to eql('User')
251
+ end
252
+ end # "context 'with a UUID, renamed primary key column' do"
253
+
254
+ context 'with an integer, conventionally named primary key column' do
255
+ it 'shows an item' do
256
+ expect_any_instance_of(MockGroupsController).to receive(:show).once.and_call_original
257
+ get "/Groups/#{@g2.id}", params: { format: :scim }
258
+
259
+ expect(response.status).to eql(200)
260
+ result = JSON.parse(response.body)
261
+
262
+ expect(result['id']).to eql(@g2.id.to_s) # Note - ID was converted String; not Integer
263
+ expect(result['displayName']).to eql('Group 2')
264
+ expect(result['meta']['resourceType']).to eql('Group')
265
+ end
266
+ end # "context 'with an integer, conventionally named primary key column' do"
219
267
 
220
268
  it 'renders 404' do
221
269
  get '/Users/xyz', params: { format: :scim }
@@ -248,7 +296,7 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
248
296
  expect(response.status).to eql(201)
249
297
  result = JSON.parse(response.body)
250
298
 
251
- expect(result['id']).to eql(new_mock.id.to_s)
299
+ expect(result['id']).to eql(new_mock.primary_key.to_s)
252
300
  expect(result['meta']['resourceType']).to eql('User')
253
301
  expect(new_mock.username).to eql('4')
254
302
  end
@@ -289,7 +337,7 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
289
337
  expect(response.status).to eql(201)
290
338
  result = JSON.parse(response.body)
291
339
 
292
- expect(result['id']).to eql(new_mock.id.to_s)
340
+ expect(result['id']).to eql(new_mock.primary_key.to_s)
293
341
  expect(result['meta']['resourceType']).to eql('User')
294
342
  expect(new_mock.username).to eql('4')
295
343
  expect(new_mock.first_name).to eql('Given')
@@ -363,13 +411,13 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
363
411
 
364
412
  expect_any_instance_of(MockUsersController).to receive(:replace).once.and_call_original
365
413
  expect {
366
- put "/Users/#{@u2.id}", params: attributes.merge(format: :scim)
414
+ put "/Users/#{@u2.primary_key}", params: attributes.merge(format: :scim)
367
415
  }.to_not change { MockUser.count }
368
416
 
369
417
  expect(response.status).to eql(200)
370
418
  result = JSON.parse(response.body)
371
419
 
372
- expect(result['id']).to eql(@u2.id.to_s)
420
+ expect(result['id']).to eql(@u2.primary_key.to_s)
373
421
  expect(result['meta']['resourceType']).to eql('User')
374
422
 
375
423
  @u2.reload
@@ -391,7 +439,7 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
391
439
 
392
440
  it 'notes schema validation failures' do
393
441
  expect {
394
- put "/Users/#{@u2.id}", params: {
442
+ put "/Users/#{@u2.primary_key}", params: {
395
443
  format: :scim
396
444
  # userName parameter is required by schema, but missing
397
445
  }
@@ -470,13 +518,13 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
470
518
 
471
519
  expect_any_instance_of(MockUsersController).to receive(:update).once.and_call_original
472
520
  expect {
473
- patch "/Users/#{@u2.id}", params: payload.merge(format: :scim)
521
+ patch "/Users/#{@u2.primary_key}", params: payload.merge(format: :scim)
474
522
  }.to_not change { MockUser.count }
475
523
 
476
524
  expect(response.status).to eql(200)
477
525
  result = JSON.parse(response.body)
478
526
 
479
- expect(result['id']).to eql(@u2.id.to_s)
527
+ expect(result['id']).to eql(@u2.primary_key.to_s)
480
528
  expect(result['meta']['resourceType']).to eql('User')
481
529
 
482
530
  @u2.reload
@@ -507,13 +555,13 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
507
555
 
508
556
  expect_any_instance_of(MockUsersController).to receive(:update).once.and_call_original
509
557
  expect {
510
- patch "/Users/#{@u2.id}", params: payload.merge(format: :scim)
558
+ patch "/Users/#{@u2.primary_key}", params: payload.merge(format: :scim)
511
559
  }.to_not change { MockUser.count }
512
560
 
513
561
  expect(response.status).to eql(200)
514
562
  result = JSON.parse(response.body)
515
563
 
516
- expect(result['id']).to eql(@u2.id.to_s)
564
+ expect(result['id']).to eql(@u2.primary_key.to_s)
517
565
  expect(result['meta']['resourceType']).to eql('User')
518
566
 
519
567
  @u2.reload
@@ -539,13 +587,13 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
539
587
 
540
588
  expect_any_instance_of(MockUsersController).to receive(:update).once.and_call_original
541
589
  expect {
542
- patch "/Users/#{@u2.id}", params: payload.merge(format: :scim)
590
+ patch "/Users/#{@u2.primary_key}", params: payload.merge(format: :scim)
543
591
  }.to_not change { MockUser.count }
544
592
 
545
593
  expect(response.status).to eql(200)
546
594
  result = JSON.parse(response.body)
547
595
 
548
- expect(result['id']).to eql(@u2.id.to_s)
596
+ expect(result['id']).to eql(@u2.primary_key.to_s)
549
597
  expect(result['meta']['resourceType']).to eql('User')
550
598
 
551
599
  @u2.reload
@@ -571,13 +619,13 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
571
619
 
572
620
  expect_any_instance_of(MockUsersController).to receive(:update).once.and_call_original
573
621
  expect {
574
- patch "/Users/#{@u2.id}", params: payload.merge(format: :scim)
622
+ patch "/Users/#{@u2.primary_key}", params: payload.merge(format: :scim)
575
623
  }.to_not change { MockUser.count }
576
624
 
577
625
  expect(response.status).to eql(200)
578
626
  result = JSON.parse(response.body)
579
627
 
580
- expect(result['id']).to eql(@u2.id.to_s)
628
+ expect(result['id']).to eql(@u2.primary_key.to_s)
581
629
  expect(result['meta']['resourceType']).to eql('User')
582
630
 
583
631
  @u2.reload
@@ -601,7 +649,7 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
601
649
 
602
650
  it 'notes Rails validation failures' do
603
651
  expect {
604
- patch "/Users/#{@u2.id}", params: {
652
+ patch "/Users/#{@u2.primary_key}", params: {
605
653
  format: :scim,
606
654
  Operations: [
607
655
  {
@@ -645,6 +693,142 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
645
693
  result = JSON.parse(response.body)
646
694
  expect(result['status']).to eql('404')
647
695
  end
696
+
697
+ context 'when removing users from groups' do
698
+ before :each do
699
+ @g1.mock_users << @u1
700
+ @g1.mock_users << @u2
701
+ @g1.mock_users << @u3
702
+
703
+ # (Self-check) Verify group representation
704
+ #
705
+ get "/Groups/#{@g1.id}", params: { format: :scim }
706
+
707
+ expect(response.status).to eql(200)
708
+ result = JSON.parse(response.body)
709
+
710
+ expect(result['members'].map { |m| m['value'] }.sort()).to eql(MockUser.pluck(:primary_key).sort())
711
+ end
712
+
713
+ it 'can remove all users' do
714
+ expect {
715
+ expect {
716
+ patch "/Groups/#{@g1.id}", params: {
717
+ format: :scim,
718
+ Operations: [
719
+ {
720
+ op: 'remove',
721
+ path: 'members'
722
+ }
723
+ ]
724
+ }
725
+ }.to_not change { MockUser.count }
726
+ }.to_not change { MockGroup.count }
727
+
728
+ get "/Groups/#{@g1.id}", params: { format: :scim }
729
+
730
+ expect(response.status).to eql(200)
731
+ result = JSON.parse(response.body)
732
+
733
+ expect(result['members']).to be_empty
734
+ expect(@g1.reload().mock_users).to be_empty
735
+ end
736
+
737
+ # Define via 'let':
738
+ #
739
+ # * Hash 'payload', to send via 'patch'
740
+ # * MockUser 'removed_user', which is the user that should be removed
741
+ #
742
+ shared_examples 'a user remover' do
743
+ it 'which removes the identified user' do
744
+ expect {
745
+ expect {
746
+ patch "/Groups/#{@g1.id}", params: payload()
747
+ }.to_not change { MockUser.count }
748
+ }.to_not change { MockGroup.count }
749
+
750
+ expected_remaining_user_ids = MockUser
751
+ .where.not(primary_key: removed_user().id)
752
+ .pluck(:primary_key)
753
+ .sort()
754
+
755
+ get "/Groups/#{@g1.id}", params: { format: :scim }
756
+
757
+ expect(response.status).to eql(200)
758
+ result = JSON.parse(response.body)
759
+
760
+ expect(result['members'].map { |m| m['value'] }.sort()).to eql(expected_remaining_user_ids)
761
+ expect(@g1.reload().mock_users.map(&:primary_key).sort()).to eql(expected_remaining_user_ids)
762
+ end
763
+ end
764
+
765
+ # https://www.rfc-editor.org/rfc/rfc7644#section-3.5.2.2
766
+ #
767
+ context 'and using an RFC-compliant payload' do
768
+ let(:removed_user) { @u2 }
769
+ let(:payload) do
770
+ {
771
+ format: :scim,
772
+ Operations: [
773
+ {
774
+ op: 'remove',
775
+ path: "members[value eq \"#{removed_user().primary_key}\"]",
776
+ }
777
+ ]
778
+ }
779
+ end
780
+
781
+ it_behaves_like 'a user remover'
782
+ end # context 'and using an RFC-compliant payload' do
783
+
784
+ # https://learn.microsoft.com/en-us/azure/active-directory/app-provisioning/use-scim-to-provision-users-and-groups#update-group-remove-members
785
+ #
786
+ context 'and using a Microsoft variant payload' do
787
+ let(:removed_user) { @u2 }
788
+ let(:payload) do
789
+ {
790
+ format: :scim,
791
+ Operations: [
792
+ {
793
+ op: 'remove',
794
+ path: 'members',
795
+ value: [{
796
+ '$ref' => nil,
797
+ 'value' => removed_user().primary_key
798
+ }]
799
+ }
800
+ ]
801
+ }
802
+ end
803
+
804
+ it_behaves_like 'a user remover'
805
+ end # context 'and using a Microsoft variant payload' do
806
+
807
+ # https://help.salesforce.com/s/articleView?id=sf.identity_scim_manage_groups.htm&type=5
808
+ #
809
+ context 'and using a Salesforce variant payload' do
810
+ let(:removed_user) { @u2 }
811
+ let(:payload) do
812
+ {
813
+ format: :scim,
814
+ Operations: [
815
+ {
816
+ op: 'remove',
817
+ path: 'members',
818
+ value: {
819
+ 'members' => [{
820
+ '$ref' => nil,
821
+ 'value' => removed_user().primary_key
822
+ }]
823
+ }
824
+ }
825
+ ]
826
+ }
827
+ end
828
+
829
+ it_behaves_like 'a user remover'
830
+ end # context 'and using a Salesforce variant payload' do
831
+ end # "context 'when removing users from groups' do"
648
832
  end # "context '#update' do"
649
833
 
650
834
  # ===========================================================================
@@ -654,7 +838,7 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
654
838
  expect_any_instance_of(MockUsersController).to receive(:destroy).once.and_call_original
655
839
  expect_any_instance_of(MockUser).to receive(:destroy!).once.and_call_original
656
840
  expect {
657
- delete "/Users/#{@u2.id}", params: { format: :scim }
841
+ delete "/Users/#{@u2.primary_key}", params: { format: :scim }
658
842
  }.to change { MockUser.count }.by(-1)
659
843
 
660
844
  expect(response.status).to eql(204)
@@ -666,7 +850,7 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
666
850
  expect_any_instance_of(MockUser).to_not receive(:destroy!)
667
851
 
668
852
  expect {
669
- delete "/CustomDestroyUsers/#{@u2.id}", params: { format: :scim }
853
+ delete "/CustomDestroyUsers/#{@u2.primary_key}", params: { format: :scim }
670
854
  }.to_not change { MockUser.count }
671
855
 
672
856
  expect(response.status).to eql(204)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scimitar
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - RIPA Global
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-01-10 00:00:00.000000000 Z
12
+ date: 2023-01-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -211,7 +211,6 @@ files:
211
211
  - spec/apps/dummy/db/migrate/20210304014602_create_mock_users.rb
212
212
  - spec/apps/dummy/db/migrate/20210308020313_create_mock_groups.rb
213
213
  - spec/apps/dummy/db/migrate/20210308044214_create_join_table_mock_groups_mock_users.rb
214
- - spec/apps/dummy/db/migrate/20230109012729_add_timestamps_to_mock_user.rb
215
214
  - spec/apps/dummy/db/schema.rb
216
215
  - spec/controllers/scimitar/application_controller_spec.rb
217
216
  - spec/controllers/scimitar/resource_types_controller_spec.rb
@@ -261,52 +260,51 @@ required_rubygems_version: !ruby/object:Gem::Requirement
261
260
  - !ruby/object:Gem::Version
262
261
  version: '0'
263
262
  requirements: []
264
- rubygems_version: 3.1.6
263
+ rubygems_version: 3.4.4
265
264
  signing_key:
266
265
  specification_version: 4
267
266
  summary: SCIM v2 for Rails
268
267
  test_files:
269
- - spec/spec_helper.rb
270
- - spec/models/scimitar/lists/query_parser_spec.rb
268
+ - spec/apps/dummy/app/controllers/custom_destroy_mock_users_controller.rb
269
+ - spec/apps/dummy/app/controllers/custom_request_verifiers_controller.rb
270
+ - spec/apps/dummy/app/controllers/mock_groups_controller.rb
271
+ - spec/apps/dummy/app/controllers/mock_users_controller.rb
272
+ - spec/apps/dummy/app/models/mock_group.rb
273
+ - spec/apps/dummy/app/models/mock_user.rb
274
+ - spec/apps/dummy/config/application.rb
275
+ - spec/apps/dummy/config/boot.rb
276
+ - spec/apps/dummy/config/environment.rb
277
+ - spec/apps/dummy/config/environments/test.rb
278
+ - spec/apps/dummy/config/initializers/cookies_serializer.rb
279
+ - spec/apps/dummy/config/initializers/scimitar.rb
280
+ - spec/apps/dummy/config/initializers/session_store.rb
281
+ - spec/apps/dummy/config/routes.rb
282
+ - spec/apps/dummy/db/migrate/20210304014602_create_mock_users.rb
283
+ - spec/apps/dummy/db/migrate/20210308020313_create_mock_groups.rb
284
+ - spec/apps/dummy/db/migrate/20210308044214_create_join_table_mock_groups_mock_users.rb
285
+ - spec/apps/dummy/db/schema.rb
286
+ - spec/controllers/scimitar/application_controller_spec.rb
287
+ - spec/controllers/scimitar/resource_types_controller_spec.rb
288
+ - spec/controllers/scimitar/resources_controller_spec.rb
289
+ - spec/controllers/scimitar/schemas_controller_spec.rb
290
+ - spec/controllers/scimitar/service_provider_configurations_controller_spec.rb
291
+ - spec/models/scimitar/complex_types/address_spec.rb
292
+ - spec/models/scimitar/complex_types/email_spec.rb
271
293
  - spec/models/scimitar/lists/count_spec.rb
294
+ - spec/models/scimitar/lists/query_parser_spec.rb
295
+ - spec/models/scimitar/resource_type_spec.rb
296
+ - spec/models/scimitar/resources/base_spec.rb
272
297
  - spec/models/scimitar/resources/base_validation_spec.rb
273
298
  - spec/models/scimitar/resources/mixin_spec.rb
274
299
  - spec/models/scimitar/resources/user_spec.rb
275
- - spec/models/scimitar/resources/base_spec.rb
276
300
  - spec/models/scimitar/schema/attribute_spec.rb
301
+ - spec/models/scimitar/schema/base_spec.rb
277
302
  - spec/models/scimitar/schema/group_spec.rb
278
303
  - spec/models/scimitar/schema/user_spec.rb
279
- - spec/models/scimitar/schema/base_spec.rb
280
- - spec/models/scimitar/resource_type_spec.rb
281
- - spec/models/scimitar/complex_types/email_spec.rb
282
- - spec/models/scimitar/complex_types/address_spec.rb
283
- - spec/requests/controller_configuration_spec.rb
284
- - spec/requests/engine_spec.rb
285
304
  - spec/requests/active_record_backed_resources_controller_spec.rb
286
305
  - spec/requests/application_controller_spec.rb
306
+ - spec/requests/controller_configuration_spec.rb
307
+ - spec/requests/engine_spec.rb
308
+ - spec/spec_helper.rb
287
309
  - spec/spec_helper_spec.rb
288
310
  - spec/support/hash_with_indifferent_case_insensitive_access_spec.rb
289
- - spec/controllers/scimitar/schemas_controller_spec.rb
290
- - spec/controllers/scimitar/resource_types_controller_spec.rb
291
- - spec/controllers/scimitar/resources_controller_spec.rb
292
- - spec/controllers/scimitar/service_provider_configurations_controller_spec.rb
293
- - spec/controllers/scimitar/application_controller_spec.rb
294
- - spec/apps/dummy/app/models/mock_group.rb
295
- - spec/apps/dummy/app/models/mock_user.rb
296
- - spec/apps/dummy/app/controllers/custom_request_verifiers_controller.rb
297
- - spec/apps/dummy/app/controllers/custom_destroy_mock_users_controller.rb
298
- - spec/apps/dummy/app/controllers/mock_groups_controller.rb
299
- - spec/apps/dummy/app/controllers/mock_users_controller.rb
300
- - spec/apps/dummy/config/routes.rb
301
- - spec/apps/dummy/config/environments/test.rb
302
- - spec/apps/dummy/config/environment.rb
303
- - spec/apps/dummy/config/application.rb
304
- - spec/apps/dummy/config/boot.rb
305
- - spec/apps/dummy/config/initializers/session_store.rb
306
- - spec/apps/dummy/config/initializers/cookies_serializer.rb
307
- - spec/apps/dummy/config/initializers/scimitar.rb
308
- - spec/apps/dummy/db/schema.rb
309
- - spec/apps/dummy/db/migrate/20210308020313_create_mock_groups.rb
310
- - spec/apps/dummy/db/migrate/20210308044214_create_join_table_mock_groups_mock_users.rb
311
- - spec/apps/dummy/db/migrate/20230109012729_add_timestamps_to_mock_user.rb
312
- - spec/apps/dummy/db/migrate/20210304014602_create_mock_users.rb
@@ -1,5 +0,0 @@
1
- class AddTimestampsToMockUser < ActiveRecord::Migration[6.1]
2
- def change
3
- add_timestamps :mock_users
4
- end
5
- end