powerhome-scimitar 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +708 -0
  4. data/Rakefile +16 -0
  5. data/app/controllers/scimitar/active_record_backed_resources_controller.rb +257 -0
  6. data/app/controllers/scimitar/application_controller.rb +157 -0
  7. data/app/controllers/scimitar/resource_types_controller.rb +28 -0
  8. data/app/controllers/scimitar/resources_controller.rb +203 -0
  9. data/app/controllers/scimitar/schemas_controller.rb +21 -0
  10. data/app/controllers/scimitar/service_provider_configurations_controller.rb +8 -0
  11. data/app/models/scimitar/authentication_error.rb +9 -0
  12. data/app/models/scimitar/authentication_scheme.rb +18 -0
  13. data/app/models/scimitar/bulk.rb +8 -0
  14. data/app/models/scimitar/complex_types/address.rb +12 -0
  15. data/app/models/scimitar/complex_types/base.rb +83 -0
  16. data/app/models/scimitar/complex_types/email.rb +12 -0
  17. data/app/models/scimitar/complex_types/entitlement.rb +12 -0
  18. data/app/models/scimitar/complex_types/ims.rb +12 -0
  19. data/app/models/scimitar/complex_types/name.rb +12 -0
  20. data/app/models/scimitar/complex_types/phone_number.rb +12 -0
  21. data/app/models/scimitar/complex_types/photo.rb +12 -0
  22. data/app/models/scimitar/complex_types/reference_group.rb +12 -0
  23. data/app/models/scimitar/complex_types/reference_member.rb +12 -0
  24. data/app/models/scimitar/complex_types/role.rb +12 -0
  25. data/app/models/scimitar/complex_types/x509_certificate.rb +12 -0
  26. data/app/models/scimitar/engine_configuration.rb +32 -0
  27. data/app/models/scimitar/error_response.rb +32 -0
  28. data/app/models/scimitar/errors.rb +14 -0
  29. data/app/models/scimitar/filter.rb +11 -0
  30. data/app/models/scimitar/filter_error.rb +22 -0
  31. data/app/models/scimitar/invalid_syntax_error.rb +9 -0
  32. data/app/models/scimitar/lists/count.rb +64 -0
  33. data/app/models/scimitar/lists/query_parser.rb +745 -0
  34. data/app/models/scimitar/meta.rb +7 -0
  35. data/app/models/scimitar/not_found_error.rb +10 -0
  36. data/app/models/scimitar/resource_invalid_error.rb +9 -0
  37. data/app/models/scimitar/resource_type.rb +29 -0
  38. data/app/models/scimitar/resources/base.rb +190 -0
  39. data/app/models/scimitar/resources/group.rb +13 -0
  40. data/app/models/scimitar/resources/mixin.rb +1524 -0
  41. data/app/models/scimitar/resources/user.rb +13 -0
  42. data/app/models/scimitar/schema/address.rb +25 -0
  43. data/app/models/scimitar/schema/attribute.rb +132 -0
  44. data/app/models/scimitar/schema/base.rb +90 -0
  45. data/app/models/scimitar/schema/derived_attributes.rb +24 -0
  46. data/app/models/scimitar/schema/email.rb +10 -0
  47. data/app/models/scimitar/schema/entitlement.rb +10 -0
  48. data/app/models/scimitar/schema/group.rb +27 -0
  49. data/app/models/scimitar/schema/ims.rb +10 -0
  50. data/app/models/scimitar/schema/name.rb +20 -0
  51. data/app/models/scimitar/schema/phone_number.rb +10 -0
  52. data/app/models/scimitar/schema/photo.rb +10 -0
  53. data/app/models/scimitar/schema/reference_group.rb +23 -0
  54. data/app/models/scimitar/schema/reference_member.rb +21 -0
  55. data/app/models/scimitar/schema/role.rb +10 -0
  56. data/app/models/scimitar/schema/user.rb +52 -0
  57. data/app/models/scimitar/schema/vdtp.rb +18 -0
  58. data/app/models/scimitar/schema/x509_certificate.rb +22 -0
  59. data/app/models/scimitar/service_provider_configuration.rb +60 -0
  60. data/app/models/scimitar/supportable.rb +14 -0
  61. data/app/views/layouts/scimitar/application.html.erb +14 -0
  62. data/config/initializers/scimitar.rb +111 -0
  63. data/config/routes.rb +6 -0
  64. data/lib/scimitar/engine.rb +63 -0
  65. data/lib/scimitar/support/hash_with_indifferent_case_insensitive_access.rb +216 -0
  66. data/lib/scimitar/support/utilities.rb +51 -0
  67. data/lib/scimitar/version.rb +13 -0
  68. data/lib/scimitar.rb +29 -0
  69. data/spec/apps/dummy/app/controllers/custom_create_mock_users_controller.rb +25 -0
  70. data/spec/apps/dummy/app/controllers/custom_destroy_mock_users_controller.rb +24 -0
  71. data/spec/apps/dummy/app/controllers/custom_replace_mock_users_controller.rb +25 -0
  72. data/spec/apps/dummy/app/controllers/custom_request_verifiers_controller.rb +30 -0
  73. data/spec/apps/dummy/app/controllers/custom_save_mock_users_controller.rb +24 -0
  74. data/spec/apps/dummy/app/controllers/custom_update_mock_users_controller.rb +25 -0
  75. data/spec/apps/dummy/app/controllers/mock_groups_controller.rb +13 -0
  76. data/spec/apps/dummy/app/controllers/mock_users_controller.rb +13 -0
  77. data/spec/apps/dummy/app/models/mock_group.rb +83 -0
  78. data/spec/apps/dummy/app/models/mock_user.rb +132 -0
  79. data/spec/apps/dummy/config/application.rb +18 -0
  80. data/spec/apps/dummy/config/boot.rb +2 -0
  81. data/spec/apps/dummy/config/environment.rb +2 -0
  82. data/spec/apps/dummy/config/environments/test.rb +38 -0
  83. data/spec/apps/dummy/config/initializers/cookies_serializer.rb +3 -0
  84. data/spec/apps/dummy/config/initializers/scimitar.rb +61 -0
  85. data/spec/apps/dummy/config/initializers/session_store.rb +3 -0
  86. data/spec/apps/dummy/config/routes.rb +45 -0
  87. data/spec/apps/dummy/db/migrate/20210304014602_create_mock_users.rb +24 -0
  88. data/spec/apps/dummy/db/migrate/20210308020313_create_mock_groups.rb +10 -0
  89. data/spec/apps/dummy/db/migrate/20210308044214_create_join_table_mock_groups_mock_users.rb +13 -0
  90. data/spec/apps/dummy/db/schema.rb +48 -0
  91. data/spec/controllers/scimitar/application_controller_spec.rb +296 -0
  92. data/spec/controllers/scimitar/resource_types_controller_spec.rb +94 -0
  93. data/spec/controllers/scimitar/resources_controller_spec.rb +247 -0
  94. data/spec/controllers/scimitar/schemas_controller_spec.rb +83 -0
  95. data/spec/controllers/scimitar/service_provider_configurations_controller_spec.rb +22 -0
  96. data/spec/models/scimitar/complex_types/address_spec.rb +18 -0
  97. data/spec/models/scimitar/complex_types/email_spec.rb +21 -0
  98. data/spec/models/scimitar/lists/count_spec.rb +147 -0
  99. data/spec/models/scimitar/lists/query_parser_spec.rb +830 -0
  100. data/spec/models/scimitar/resource_type_spec.rb +21 -0
  101. data/spec/models/scimitar/resources/base_spec.rb +485 -0
  102. data/spec/models/scimitar/resources/base_validation_spec.rb +86 -0
  103. data/spec/models/scimitar/resources/mixin_spec.rb +3562 -0
  104. data/spec/models/scimitar/resources/user_spec.rb +68 -0
  105. data/spec/models/scimitar/schema/attribute_spec.rb +99 -0
  106. data/spec/models/scimitar/schema/base_spec.rb +64 -0
  107. data/spec/models/scimitar/schema/group_spec.rb +87 -0
  108. data/spec/models/scimitar/schema/user_spec.rb +720 -0
  109. data/spec/requests/active_record_backed_resources_controller_spec.rb +1354 -0
  110. data/spec/requests/application_controller_spec.rb +61 -0
  111. data/spec/requests/controller_configuration_spec.rb +17 -0
  112. data/spec/requests/engine_spec.rb +45 -0
  113. data/spec/spec_helper.rb +101 -0
  114. data/spec/spec_helper_spec.rb +30 -0
  115. data/spec/support/hash_with_indifferent_case_insensitive_access_spec.rb +169 -0
  116. metadata +321 -0
@@ -0,0 +1,720 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Scimitar::Schema::User do
4
+ let(:expected_attributes) {
5
+ <<-EOJ
6
+ [
7
+ {
8
+ "multiValued": false,
9
+ "required": true,
10
+ "caseExact": false,
11
+ "mutability": "readWrite",
12
+ "uniqueness": "server",
13
+ "returned": "default",
14
+ "name": "userName",
15
+ "type": "string"
16
+ },
17
+
18
+ {
19
+ "multiValued": false,
20
+ "required": false,
21
+ "caseExact": false,
22
+ "mutability": "readWrite",
23
+ "uniqueness": "none",
24
+ "returned": "default",
25
+ "name": "name",
26
+ "type": "complex",
27
+ "subAttributes": [
28
+ {
29
+ "multiValued": false,
30
+ "required": true,
31
+ "caseExact": false,
32
+ "mutability": "readWrite",
33
+ "uniqueness": "none",
34
+ "returned": "default",
35
+ "name": "familyName",
36
+ "type": "string"
37
+ },
38
+ {
39
+ "multiValued": false,
40
+ "required": true,
41
+ "caseExact": false,
42
+ "mutability": "readWrite",
43
+ "uniqueness": "none",
44
+ "returned": "default",
45
+ "name": "givenName",
46
+ "type": "string"
47
+ },
48
+ {
49
+ "multiValued": false,
50
+ "required": false,
51
+ "caseExact": false,
52
+ "mutability": "readWrite",
53
+ "uniqueness": "none",
54
+ "returned": "default",
55
+ "name": "middleName",
56
+ "type": "string"
57
+ },
58
+ {
59
+ "multiValued": false,
60
+ "required": false,
61
+ "caseExact": false,
62
+ "mutability": "readWrite",
63
+ "uniqueness": "none",
64
+ "returned": "default",
65
+ "name": "formatted",
66
+ "type": "string"
67
+ },
68
+ {
69
+ "multiValued": false,
70
+ "required": false,
71
+ "caseExact": false,
72
+ "mutability": "readWrite",
73
+ "uniqueness": "none",
74
+ "returned": "default",
75
+ "name": "honorificPrefix",
76
+ "type": "string"
77
+ },
78
+ {
79
+ "multiValued": false,
80
+ "required": false,
81
+ "caseExact": false,
82
+ "mutability": "readWrite",
83
+ "uniqueness": "none",
84
+ "returned": "default",
85
+ "name": "honorificSuffix",
86
+ "type": "string"
87
+ }
88
+ ]
89
+ },
90
+
91
+ {
92
+ "multiValued": false,
93
+ "required": false,
94
+ "caseExact": false,
95
+ "mutability": "readWrite",
96
+ "uniqueness": "none",
97
+ "returned": "default",
98
+ "name": "displayName",
99
+ "type": "string"
100
+ },
101
+ {
102
+ "multiValued": false,
103
+ "required": false,
104
+ "caseExact": false,
105
+ "mutability": "readWrite",
106
+ "uniqueness": "none",
107
+ "returned": "default",
108
+ "name": "nickName",
109
+ "type": "string"
110
+ },
111
+ {
112
+ "multiValued": false,
113
+ "required": false,
114
+ "caseExact": false,
115
+ "mutability": "readWrite",
116
+ "uniqueness": "none",
117
+ "returned": "default",
118
+ "name": "profileUrl",
119
+ "type": "string"
120
+ },
121
+ {
122
+ "multiValued": false,
123
+ "required": false,
124
+ "caseExact": false,
125
+ "mutability": "readWrite",
126
+ "uniqueness": "none",
127
+ "returned": "default",
128
+ "name": "title",
129
+ "type": "string"
130
+ },
131
+ {
132
+ "multiValued": false,
133
+ "required": false,
134
+ "caseExact": false,
135
+ "mutability": "readWrite",
136
+ "uniqueness": "none",
137
+ "returned": "default",
138
+ "name": "userType",
139
+ "type": "string"
140
+ },
141
+ {
142
+ "multiValued": false,
143
+ "required": false,
144
+ "caseExact": false,
145
+ "mutability": "readWrite",
146
+ "uniqueness": "none",
147
+ "returned": "default",
148
+ "name": "preferredLanguage",
149
+ "type": "string"
150
+ },
151
+ {
152
+ "multiValued": false,
153
+ "required": false,
154
+ "caseExact": false,
155
+ "mutability": "readWrite",
156
+ "uniqueness": "none",
157
+ "returned": "default",
158
+ "name": "locale",
159
+ "type": "string"
160
+ },
161
+ {
162
+ "multiValued": false,
163
+ "required": false,
164
+ "caseExact": false,
165
+ "mutability": "readWrite",
166
+ "uniqueness": "none",
167
+ "returned": "default",
168
+ "name": "timezone",
169
+ "type": "string"
170
+ },
171
+
172
+ {
173
+ "multiValued": false,
174
+ "required": false,
175
+ "caseExact": false,
176
+ "mutability": "readWrite",
177
+ "uniqueness": "none",
178
+ "returned": "default",
179
+ "name": "active",
180
+ "type": "boolean"
181
+ },
182
+
183
+ {
184
+ "multiValued": false,
185
+ "required": false,
186
+ "caseExact": false,
187
+ "mutability": "writeOnly",
188
+ "uniqueness": "none",
189
+ "returned": "never",
190
+ "name": "password",
191
+ "type": "string"
192
+ },
193
+
194
+ {
195
+ "multiValued": true,
196
+ "required": false,
197
+ "caseExact": false,
198
+ "mutability": "readWrite",
199
+ "uniqueness": "none",
200
+ "returned": "default",
201
+ "name": "emails",
202
+ "type": "complex",
203
+ "subAttributes": [
204
+ {
205
+ "multiValued": false,
206
+ "required": true,
207
+ "caseExact": false,
208
+ "mutability": "readWrite",
209
+ "uniqueness": "none",
210
+ "returned": "default",
211
+ "name": "value",
212
+ "type": "string"
213
+ },
214
+ {
215
+ "multiValued": false,
216
+ "required": false,
217
+ "caseExact": false,
218
+ "mutability": "readOnly",
219
+ "uniqueness": "none",
220
+ "returned": "default",
221
+ "name": "display",
222
+ "type": "string"
223
+ },
224
+ {
225
+ "multiValued": false,
226
+ "required": false,
227
+ "caseExact": false,
228
+ "mutability": "readWrite",
229
+ "uniqueness": "none",
230
+ "returned": "default",
231
+ "name": "type",
232
+ "type": "string"
233
+ },
234
+ {
235
+ "multiValued": false,
236
+ "required": false,
237
+ "caseExact": false,
238
+ "mutability": "readWrite",
239
+ "uniqueness": "none",
240
+ "returned": "default",
241
+ "name": "primary",
242
+ "type": "boolean"
243
+ }
244
+ ]
245
+ },
246
+ {
247
+ "multiValued": true,
248
+ "required": false,
249
+ "caseExact": false,
250
+ "mutability": "readWrite",
251
+ "uniqueness": "none",
252
+ "returned": "default",
253
+ "name": "phoneNumbers",
254
+ "type": "complex",
255
+ "subAttributes": [
256
+ {
257
+ "multiValued": false,
258
+ "required": true,
259
+ "caseExact": false,
260
+ "mutability": "readWrite",
261
+ "uniqueness": "none",
262
+ "returned": "default",
263
+ "name": "value",
264
+ "type": "string"
265
+ },
266
+ {
267
+ "multiValued": false,
268
+ "required": false,
269
+ "caseExact": false,
270
+ "mutability": "readOnly",
271
+ "uniqueness": "none",
272
+ "returned": "default",
273
+ "name": "display",
274
+ "type": "string"
275
+ },
276
+ {
277
+ "multiValued": false,
278
+ "required": false,
279
+ "caseExact": false,
280
+ "mutability": "readWrite",
281
+ "uniqueness": "none",
282
+ "returned": "default",
283
+ "name": "type",
284
+ "type": "string"
285
+ },
286
+ {
287
+ "multiValued": false,
288
+ "required": false,
289
+ "caseExact": false,
290
+ "mutability": "readWrite",
291
+ "uniqueness": "none",
292
+ "returned": "default",
293
+ "name": "primary",
294
+ "type": "boolean"
295
+ }
296
+ ]
297
+ },
298
+ {
299
+ "multiValued": true,
300
+ "required": false,
301
+ "caseExact": false,
302
+ "mutability": "readWrite",
303
+ "uniqueness": "none",
304
+ "returned": "default",
305
+ "name": "ims",
306
+ "type": "complex",
307
+ "subAttributes": [
308
+ {
309
+ "multiValued": false,
310
+ "required": true,
311
+ "caseExact": false,
312
+ "mutability": "readWrite",
313
+ "uniqueness": "none",
314
+ "returned": "default",
315
+ "name": "value",
316
+ "type": "string"
317
+ },
318
+ {
319
+ "multiValued": false,
320
+ "required": false,
321
+ "caseExact": false,
322
+ "mutability": "readOnly",
323
+ "uniqueness": "none",
324
+ "returned": "default",
325
+ "name": "display",
326
+ "type": "string"
327
+ },
328
+ {
329
+ "multiValued": false,
330
+ "required": false,
331
+ "caseExact": false,
332
+ "mutability": "readWrite",
333
+ "uniqueness": "none",
334
+ "returned": "default",
335
+ "name": "type",
336
+ "type": "string"
337
+ },
338
+ {
339
+ "multiValued": false,
340
+ "required": false,
341
+ "caseExact": false,
342
+ "mutability": "readWrite",
343
+ "uniqueness": "none",
344
+ "returned": "default",
345
+ "name": "primary",
346
+ "type": "boolean"
347
+ }
348
+ ]
349
+ },
350
+ {
351
+ "multiValued": true,
352
+ "required": false,
353
+ "caseExact": false,
354
+ "mutability": "readWrite",
355
+ "uniqueness": "none",
356
+ "returned": "default",
357
+ "name": "photos",
358
+ "type": "complex",
359
+ "subAttributes": [
360
+ {
361
+ "multiValued": false,
362
+ "required": true,
363
+ "caseExact": false,
364
+ "mutability": "readWrite",
365
+ "uniqueness": "none",
366
+ "returned": "default",
367
+ "name": "value",
368
+ "type": "string"
369
+ },
370
+ {
371
+ "multiValued": false,
372
+ "required": false,
373
+ "caseExact": false,
374
+ "mutability": "readOnly",
375
+ "uniqueness": "none",
376
+ "returned": "default",
377
+ "name": "display",
378
+ "type": "string"
379
+ },
380
+ {
381
+ "multiValued": false,
382
+ "required": false,
383
+ "caseExact": false,
384
+ "mutability": "readWrite",
385
+ "uniqueness": "none",
386
+ "returned": "default",
387
+ "name": "type",
388
+ "type": "string"
389
+ },
390
+ {
391
+ "multiValued": false,
392
+ "required": false,
393
+ "caseExact": false,
394
+ "mutability": "readWrite",
395
+ "uniqueness": "none",
396
+ "returned": "default",
397
+ "name": "primary",
398
+ "type": "boolean"
399
+ }
400
+ ]
401
+ },
402
+ {
403
+ "multiValued": true,
404
+ "required": false,
405
+ "caseExact": false,
406
+ "mutability": "readWrite",
407
+ "uniqueness": "none",
408
+ "returned": "default",
409
+ "name": "addresses",
410
+ "type": "complex",
411
+ "subAttributes": [
412
+ {
413
+ "multiValued": false,
414
+ "required": false,
415
+ "caseExact": false,
416
+ "mutability": "readWrite",
417
+ "uniqueness": "none",
418
+ "returned": "default",
419
+ "name": "type",
420
+ "type": "string"
421
+ },
422
+ {
423
+ "multiValued": false,
424
+ "required": false,
425
+ "caseExact": false,
426
+ "mutability": "readWrite",
427
+ "uniqueness": "none",
428
+ "returned": "default",
429
+ "name": "primary",
430
+ "type": "boolean"
431
+ },
432
+ {
433
+ "multiValued": false,
434
+ "required": false,
435
+ "caseExact": false,
436
+ "mutability": "readWrite",
437
+ "uniqueness": "none",
438
+ "returned": "default",
439
+ "name": "formatted",
440
+ "type": "string"
441
+ },
442
+ {
443
+ "multiValued": false,
444
+ "required": false,
445
+ "caseExact": false,
446
+ "mutability": "readWrite",
447
+ "uniqueness": "none",
448
+ "returned": "default",
449
+ "name": "streetAddress",
450
+ "type": "string"
451
+ },
452
+ {
453
+ "multiValued": false,
454
+ "required": false,
455
+ "caseExact": false,
456
+ "mutability": "readWrite",
457
+ "uniqueness": "none",
458
+ "returned": "default",
459
+ "name": "locality",
460
+ "type": "string"
461
+ },
462
+ {
463
+ "multiValued": false,
464
+ "required": false,
465
+ "caseExact": false,
466
+ "mutability": "readWrite",
467
+ "uniqueness": "none",
468
+ "returned": "default",
469
+ "name": "region",
470
+ "type": "string"
471
+ },
472
+ {
473
+ "multiValued": false,
474
+ "required": false,
475
+ "caseExact": false,
476
+ "mutability": "readWrite",
477
+ "uniqueness": "none",
478
+ "returned": "default",
479
+ "name": "postalCode",
480
+ "type": "string"
481
+ },
482
+ {
483
+ "multiValued": false,
484
+ "required": false,
485
+ "caseExact": false,
486
+ "mutability": "readWrite",
487
+ "uniqueness": "none",
488
+ "returned": "default",
489
+ "name": "country",
490
+ "type": "string"
491
+ }
492
+ ]
493
+ },
494
+ {
495
+ "multiValued": true,
496
+ "required": false,
497
+ "caseExact": false,
498
+ "mutability": "readOnly",
499
+ "uniqueness": "none",
500
+ "returned": "default",
501
+ "name": "groups",
502
+ "type": "complex",
503
+ "subAttributes": [
504
+ {
505
+ "multiValued": false,
506
+ "required": true,
507
+ "caseExact": false,
508
+ "mutability": "readOnly",
509
+ "uniqueness": "none",
510
+ "returned": "default",
511
+ "name": "value",
512
+ "type": "string"
513
+ },
514
+ {
515
+ "multiValued": false,
516
+ "required": false,
517
+ "caseExact": false,
518
+ "mutability": "readOnly",
519
+ "uniqueness": "none",
520
+ "returned": "default",
521
+ "name": "display",
522
+ "type": "string"
523
+ },
524
+ {
525
+ "multiValued": false,
526
+ "required": false,
527
+ "caseExact": false,
528
+ "mutability": "readOnly",
529
+ "uniqueness": "none",
530
+ "returned": "default",
531
+ "name": "type",
532
+ "type": "string"
533
+ }
534
+ ]
535
+ },
536
+ {
537
+ "multiValued": true,
538
+ "required": false,
539
+ "caseExact": false,
540
+ "mutability": "readWrite",
541
+ "uniqueness": "none",
542
+ "returned": "default",
543
+ "name": "entitlements",
544
+ "type": "complex",
545
+ "subAttributes": [
546
+ {
547
+ "multiValued": false,
548
+ "required": true,
549
+ "caseExact": false,
550
+ "mutability": "readWrite",
551
+ "uniqueness": "none",
552
+ "returned": "default",
553
+ "name": "value",
554
+ "type": "string"
555
+ },
556
+ {
557
+ "multiValued": false,
558
+ "required": false,
559
+ "caseExact": false,
560
+ "mutability": "readOnly",
561
+ "uniqueness": "none",
562
+ "returned": "default",
563
+ "name": "display",
564
+ "type": "string"
565
+ },
566
+ {
567
+ "multiValued": false,
568
+ "required": false,
569
+ "caseExact": false,
570
+ "mutability": "readWrite",
571
+ "uniqueness": "none",
572
+ "returned": "default",
573
+ "name": "type",
574
+ "type": "string"
575
+ },
576
+ {
577
+ "multiValued": false,
578
+ "required": false,
579
+ "caseExact": false,
580
+ "mutability": "readWrite",
581
+ "uniqueness": "none",
582
+ "returned": "default",
583
+ "name": "primary",
584
+ "type": "boolean"
585
+ }
586
+ ]
587
+ },
588
+ {
589
+ "multiValued": true,
590
+ "required": false,
591
+ "caseExact": false,
592
+ "mutability": "readWrite",
593
+ "uniqueness": "none",
594
+ "returned": "default",
595
+ "name": "roles",
596
+ "type": "complex",
597
+ "subAttributes": [
598
+ {
599
+ "multiValued": false,
600
+ "required": true,
601
+ "caseExact": false,
602
+ "mutability": "readWrite",
603
+ "uniqueness": "none",
604
+ "returned": "default",
605
+ "name": "value",
606
+ "type": "string"
607
+ },
608
+ {
609
+ "multiValued": false,
610
+ "required": false,
611
+ "caseExact": false,
612
+ "mutability": "readOnly",
613
+ "uniqueness": "none",
614
+ "returned": "default",
615
+ "name": "display",
616
+ "type": "string"
617
+ },
618
+ {
619
+ "multiValued": false,
620
+ "required": false,
621
+ "caseExact": false,
622
+ "mutability": "readWrite",
623
+ "uniqueness": "none",
624
+ "returned": "default",
625
+ "name": "type",
626
+ "type": "string"
627
+ },
628
+ {
629
+ "multiValued": false,
630
+ "required": false,
631
+ "caseExact": false,
632
+ "mutability": "readWrite",
633
+ "uniqueness": "none",
634
+ "returned": "default",
635
+ "name": "primary",
636
+ "type": "boolean"
637
+ }
638
+ ]
639
+ },
640
+ {
641
+ "multiValued": true,
642
+ "required": false,
643
+ "caseExact": false,
644
+ "mutability": "readWrite",
645
+ "uniqueness": "none",
646
+ "returned": "default",
647
+ "name": "x509Certificates",
648
+ "type": "complex",
649
+ "subAttributes": [
650
+ {
651
+ "multiValued": false,
652
+ "required": true,
653
+ "caseExact": false,
654
+ "mutability": "readWrite",
655
+ "uniqueness": "none",
656
+ "returned": "default",
657
+ "name": "value",
658
+ "type": "binary"
659
+ },
660
+ {
661
+ "multiValued": false,
662
+ "required": false,
663
+ "caseExact": false,
664
+ "mutability": "readOnly",
665
+ "uniqueness": "none",
666
+ "returned": "default",
667
+ "name": "display",
668
+ "type": "string"
669
+ },
670
+ {
671
+ "multiValued": false,
672
+ "required": false,
673
+ "caseExact": false,
674
+ "mutability": "readWrite",
675
+ "uniqueness": "none",
676
+ "returned": "default",
677
+ "name": "type",
678
+ "type": "string"
679
+ },
680
+ {
681
+ "multiValued": false,
682
+ "required": false,
683
+ "caseExact": false,
684
+ "mutability": "readWrite",
685
+ "uniqueness": "none",
686
+ "returned": "default",
687
+ "name": "primary",
688
+ "type": "boolean"
689
+ }
690
+ ]
691
+ }
692
+ ]
693
+ EOJ
694
+ }
695
+
696
+ let(:expected_full_schema) {
697
+ <<-EOJ
698
+ {
699
+ "name": "User",
700
+ "id": "urn:ietf:params:scim:schemas:core:2.0:User",
701
+ "description": "Represents a User",
702
+ "meta": {
703
+ "resourceType": "Schema",
704
+ "location": "/Schemas?name=urn%3Aietf%3Aparams%3Ascim%3Aschemas%3Acore%3A2.0%3AUser"
705
+ },
706
+ "attributes": #{expected_attributes()}
707
+ }
708
+ EOJ
709
+ }
710
+
711
+ it 'returns User schema as JSON' do
712
+ actual_full_schema = Scimitar::Schema::User.new
713
+ expect(JSON.parse(actual_full_schema.to_json)).to eql(JSON.parse(expected_full_schema()))
714
+ end
715
+
716
+ it 'returns the schema attributes as JSON' do
717
+ actual_attributes = Scimitar::Schema::User.scim_attributes
718
+ expect(JSON.parse(actual_attributes.to_json)).to eql(JSON.parse(expected_attributes()))
719
+ end
720
+ end