Commit 33ae0dfe6f794eae190783af02ecd99ac923e395
Exists in
master
Merge remote-tracking branch 'upstream/master'
Showing
7 changed files
with
78 additions
and
222 deletions
Show diff stats
.gitignore
Gemfile
Gemfile.lock
... | ... | @@ -1,164 +0,0 @@ |
1 | -PATH | |
2 | - remote: . | |
3 | - specs: | |
4 | - scim_rails (0.3.0) | |
5 | - jwt (~> 1.5.1) | |
6 | - rails (>= 5.0, < 6.1) | |
7 | - | |
8 | -GEM | |
9 | - remote: https://rubygems.org/ | |
10 | - specs: | |
11 | - actioncable (5.2.4.3) | |
12 | - actionpack (= 5.2.4.3) | |
13 | - nio4r (~> 2.0) | |
14 | - websocket-driver (>= 0.6.1) | |
15 | - actionmailer (5.2.4.3) | |
16 | - actionpack (= 5.2.4.3) | |
17 | - actionview (= 5.2.4.3) | |
18 | - activejob (= 5.2.4.3) | |
19 | - mail (~> 2.5, >= 2.5.4) | |
20 | - rails-dom-testing (~> 2.0) | |
21 | - actionpack (5.2.4.3) | |
22 | - actionview (= 5.2.4.3) | |
23 | - activesupport (= 5.2.4.3) | |
24 | - rack (~> 2.0, >= 2.0.8) | |
25 | - rack-test (>= 0.6.3) | |
26 | - rails-dom-testing (~> 2.0) | |
27 | - rails-html-sanitizer (~> 1.0, >= 1.0.2) | |
28 | - actionview (5.2.4.3) | |
29 | - activesupport (= 5.2.4.3) | |
30 | - builder (~> 3.1) | |
31 | - erubi (~> 1.4) | |
32 | - rails-dom-testing (~> 2.0) | |
33 | - rails-html-sanitizer (~> 1.0, >= 1.0.3) | |
34 | - activejob (5.2.4.3) | |
35 | - activesupport (= 5.2.4.3) | |
36 | - globalid (>= 0.3.6) | |
37 | - activemodel (5.2.4.3) | |
38 | - activesupport (= 5.2.4.3) | |
39 | - activerecord (5.2.4.3) | |
40 | - activemodel (= 5.2.4.3) | |
41 | - activesupport (= 5.2.4.3) | |
42 | - arel (>= 9.0) | |
43 | - activestorage (5.2.4.3) | |
44 | - actionpack (= 5.2.4.3) | |
45 | - activerecord (= 5.2.4.3) | |
46 | - marcel (~> 0.3.1) | |
47 | - activesupport (5.2.4.3) | |
48 | - concurrent-ruby (~> 1.0, >= 1.0.2) | |
49 | - i18n (>= 0.7, < 2) | |
50 | - minitest (~> 5.1) | |
51 | - tzinfo (~> 1.1) | |
52 | - arel (9.0.0) | |
53 | - builder (3.2.4) | |
54 | - coderay (1.1.2) | |
55 | - concurrent-ruby (1.1.6) | |
56 | - crass (1.0.6) | |
57 | - diff-lcs (1.3) | |
58 | - erubi (1.9.0) | |
59 | - factory_bot (5.1.0) | |
60 | - activesupport (>= 4.2.0) | |
61 | - factory_bot_rails (5.1.0) | |
62 | - factory_bot (~> 5.1.0) | |
63 | - railties (>= 4.2.0) | |
64 | - globalid (0.4.2) | |
65 | - activesupport (>= 4.2.0) | |
66 | - i18n (1.8.2) | |
67 | - concurrent-ruby (~> 1.0) | |
68 | - jwt (1.5.6) | |
69 | - loofah (2.5.0) | |
70 | - crass (~> 1.0.2) | |
71 | - nokogiri (>= 1.5.9) | |
72 | - mail (2.7.1) | |
73 | - mini_mime (>= 0.1.1) | |
74 | - marcel (0.3.3) | |
75 | - mimemagic (~> 0.3.2) | |
76 | - method_source (0.9.2) | |
77 | - mimemagic (0.3.5) | |
78 | - mini_mime (1.0.2) | |
79 | - mini_portile2 (2.4.0) | |
80 | - minitest (5.14.1) | |
81 | - nio4r (2.5.2) | |
82 | - nokogiri (1.10.9) | |
83 | - mini_portile2 (~> 2.4.0) | |
84 | - pry (0.12.2) | |
85 | - coderay (~> 1.1.0) | |
86 | - method_source (~> 0.9.0) | |
87 | - rack (2.2.2) | |
88 | - rack-test (1.1.0) | |
89 | - rack (>= 1.0, < 3) | |
90 | - rails (5.2.4.3) | |
91 | - actioncable (= 5.2.4.3) | |
92 | - actionmailer (= 5.2.4.3) | |
93 | - actionpack (= 5.2.4.3) | |
94 | - actionview (= 5.2.4.3) | |
95 | - activejob (= 5.2.4.3) | |
96 | - activemodel (= 5.2.4.3) | |
97 | - activerecord (= 5.2.4.3) | |
98 | - activestorage (= 5.2.4.3) | |
99 | - activesupport (= 5.2.4.3) | |
100 | - bundler (>= 1.3.0) | |
101 | - railties (= 5.2.4.3) | |
102 | - sprockets-rails (>= 2.0.0) | |
103 | - rails-dom-testing (2.0.3) | |
104 | - activesupport (>= 4.2.0) | |
105 | - nokogiri (>= 1.6) | |
106 | - rails-html-sanitizer (1.3.0) | |
107 | - loofah (~> 2.3) | |
108 | - railties (5.2.4.3) | |
109 | - actionpack (= 5.2.4.3) | |
110 | - activesupport (= 5.2.4.3) | |
111 | - method_source | |
112 | - rake (>= 0.8.7) | |
113 | - thor (>= 0.19.0, < 2.0) | |
114 | - rake (13.0.1) | |
115 | - rspec-core (3.8.2) | |
116 | - rspec-support (~> 3.8.0) | |
117 | - rspec-expectations (3.8.4) | |
118 | - diff-lcs (>= 1.2.0, < 2.0) | |
119 | - rspec-support (~> 3.8.0) | |
120 | - rspec-mocks (3.8.1) | |
121 | - diff-lcs (>= 1.2.0, < 2.0) | |
122 | - rspec-support (~> 3.8.0) | |
123 | - rspec-rails (3.8.2) | |
124 | - actionpack (>= 3.0) | |
125 | - activesupport (>= 3.0) | |
126 | - railties (>= 3.0) | |
127 | - rspec-core (~> 3.8.0) | |
128 | - rspec-expectations (~> 3.8.0) | |
129 | - rspec-mocks (~> 3.8.0) | |
130 | - rspec-support (~> 3.8.0) | |
131 | - rspec-support (3.8.2) | |
132 | - sprockets (3.7.2) | |
133 | - concurrent-ruby (~> 1.0) | |
134 | - rack (> 1, < 3) | |
135 | - sprockets-rails (3.2.1) | |
136 | - actionpack (>= 4.0) | |
137 | - activesupport (>= 4.0) | |
138 | - sprockets (>= 3.0.0) | |
139 | - sqlite3 (1.4.1) | |
140 | - thor (1.0.1) | |
141 | - thread_safe (0.3.6) | |
142 | - tzinfo (1.2.7) | |
143 | - thread_safe (~> 0.1) | |
144 | - websocket-driver (0.7.2) | |
145 | - websocket-extensions (>= 0.1.0) | |
146 | - websocket-extensions (0.1.5) | |
147 | - | |
148 | -PLATFORMS | |
149 | - ruby | |
150 | - | |
151 | -DEPENDENCIES | |
152 | - bundler (~> 2.0) | |
153 | - factory_bot_rails | |
154 | - pry | |
155 | - rake (~> 13.0) | |
156 | - rspec-rails (~> 3.0) | |
157 | - scim_rails! | |
158 | - sqlite3 (~> 1.3, < 1.5) | |
159 | - | |
160 | -RUBY VERSION | |
161 | - ruby 2.4.4p296 | |
162 | - | |
163 | -BUNDLED WITH | |
164 | - 2.0.2 |
app/controllers/scim_rails/scim_users_controller.rb
... | ... | @@ -146,9 +146,9 @@ module ScimRails |
146 | 146 | end |
147 | 147 | |
148 | 148 | def valid_patch_operation?(operation) |
149 | - operation["op"] == "replace" && | |
149 | + operation["op"].casecmp("replace") && | |
150 | 150 | operation["value"] && |
151 | - operation["value"]["active"] | |
151 | + [true, false].include?(operation["value"]["active"]) | |
152 | 152 | end |
153 | 153 | end |
154 | 154 | end | ... | ... |
spec/controllers/scim_rails/scim_users_controller_spec.rb
... | ... | @@ -10,13 +10,13 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
10 | 10 | |
11 | 11 | context "when unauthorized" do |
12 | 12 | it "returns scim+json content type" do |
13 | - get :index | |
13 | + get :index, as: :json | |
14 | 14 | |
15 | 15 | expect(response.media_type).to eq "application/scim+json" |
16 | 16 | end |
17 | 17 | |
18 | 18 | it "fails with no credentials" do |
19 | - get :index | |
19 | + get :index, as: :json | |
20 | 20 | |
21 | 21 | expect(response.status).to eq 401 |
22 | 22 | end |
... | ... | @@ -24,7 +24,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
24 | 24 | it "fails with invalid credentials" do |
25 | 25 | request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials("unauthorized","123456") |
26 | 26 | |
27 | - get :index | |
27 | + get :index, as: :json | |
28 | 28 | |
29 | 29 | expect(response.status).to eq 401 |
30 | 30 | end |
... | ... | @@ -36,13 +36,13 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
36 | 36 | end |
37 | 37 | |
38 | 38 | it "returns scim+json content type" do |
39 | - get :index | |
39 | + get :index, as: :json | |
40 | 40 | |
41 | 41 | expect(response.media_type).to eq "application/scim+json" |
42 | 42 | end |
43 | 43 | |
44 | 44 | it "is successful with valid credentials" do |
45 | - get :index | |
45 | + get :index, as: :json | |
46 | 46 | |
47 | 47 | expect(response.status).to eq 200 |
48 | 48 | end |
... | ... | @@ -50,7 +50,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
50 | 50 | it "returns all results" do |
51 | 51 | create_list(:user, 10, company: company) |
52 | 52 | |
53 | - get :index | |
53 | + get :index, as: :json | |
54 | 54 | response_body = JSON.parse(response.body) |
55 | 55 | expect(response_body.dig("schemas", 0)).to eq "urn:ietf:params:scim:api:messages:2.0:ListResponse" |
56 | 56 | expect(response_body["totalResults"]).to eq 10 |
... | ... | @@ -59,7 +59,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
59 | 59 | it "defaults to 100 results" do |
60 | 60 | create_list(:user, 300, company: company) |
61 | 61 | |
62 | - get :index | |
62 | + get :index, as: :json | |
63 | 63 | response_body = JSON.parse(response.body) |
64 | 64 | expect(response_body["totalResults"]).to eq 300 |
65 | 65 | expect(response_body["Resources"].count).to eq 100 |
... | ... | @@ -72,7 +72,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
72 | 72 | get :index, params: { |
73 | 73 | startIndex: 101, |
74 | 74 | count: 200, |
75 | - } | |
75 | + }, as: :json | |
76 | 76 | response_body = JSON.parse(response.body) |
77 | 77 | expect(response_body["totalResults"]).to eq 400 |
78 | 78 | expect(response_body["Resources"].count).to eq 200 |
... | ... | @@ -88,7 +88,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
88 | 88 | get :index, params: { |
89 | 89 | startIndex: 1, |
90 | 90 | count: 10, |
91 | - } | |
91 | + }, as: :json | |
92 | 92 | response_body = JSON.parse(response.body) |
93 | 93 | expect(response_body["totalResults"]).to eq 400 |
94 | 94 | expect(response_body["Resources"].count).to eq 10 |
... | ... | @@ -101,7 +101,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
101 | 101 | |
102 | 102 | get :index, params: { |
103 | 103 | filter: "email eq test1@example.com" |
104 | - } | |
104 | + }, as: :json | |
105 | 105 | response_body = JSON.parse(response.body) |
106 | 106 | expect(response_body["totalResults"]).to eq 1 |
107 | 107 | expect(response_body["Resources"].count).to eq 1 |
... | ... | @@ -113,7 +113,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
113 | 113 | |
114 | 114 | get :index, params: { |
115 | 115 | filter: "familyName eq Shellstrop" |
116 | - } | |
116 | + }, as: :json | |
117 | 117 | response_body = JSON.parse(response.body) |
118 | 118 | expect(response_body["totalResults"]).to eq 1 |
119 | 119 | expect(response_body["Resources"].count).to eq 1 |
... | ... | @@ -122,7 +122,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
122 | 122 | it "returns no results for unfound filter parameters" do |
123 | 123 | get :index, params: { |
124 | 124 | filter: "familyName eq fake_not_there" |
125 | - } | |
125 | + }, as: :json | |
126 | 126 | response_body = JSON.parse(response.body) |
127 | 127 | expect(response_body["totalResults"]).to eq 0 |
128 | 128 | expect(response_body["Resources"].count).to eq 0 |
... | ... | @@ -131,7 +131,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
131 | 131 | it "returns no results for undefined filter queries" do |
132 | 132 | get :index, params: { |
133 | 133 | filter: "address eq 101 Nowhere USA" |
134 | - } | |
134 | + }, as: :json | |
135 | 135 | expect(response.status).to eq 400 |
136 | 136 | response_body = JSON.parse(response.body) |
137 | 137 | expect(response_body.dig("schemas", 0)).to eq "urn:ietf:params:scim:api:messages:2.0:Error" |
... | ... | @@ -145,13 +145,13 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
145 | 145 | |
146 | 146 | context "when unauthorized" do |
147 | 147 | it "returns scim+json content type" do |
148 | - get :show, params: { id: 1 } | |
148 | + get :show, params: { id: 1 }, as: :json | |
149 | 149 | |
150 | 150 | expect(response.media_type).to eq "application/scim+json" |
151 | 151 | end |
152 | 152 | |
153 | 153 | it "fails with no credentials" do |
154 | - get :show, params: { id: 1 } | |
154 | + get :show, params: { id: 1 }, as: :json | |
155 | 155 | |
156 | 156 | expect(response.status).to eq 401 |
157 | 157 | end |
... | ... | @@ -159,7 +159,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
159 | 159 | it "fails with invalid credentials" do |
160 | 160 | request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials("unauthorized","123456") |
161 | 161 | |
162 | - get :show, params: { id: 1 } | |
162 | + get :show, params: { id: 1 }, as: :json | |
163 | 163 | |
164 | 164 | expect(response.status).to eq 401 |
165 | 165 | end |
... | ... | @@ -171,20 +171,20 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
171 | 171 | end |
172 | 172 | |
173 | 173 | it "returns scim+json content type" do |
174 | - get :show, params: { id: 1 } | |
174 | + get :show, params: { id: 1 }, as: :json | |
175 | 175 | |
176 | 176 | expect(response.media_type).to eq "application/scim+json" |
177 | 177 | end |
178 | 178 | |
179 | 179 | it "is successful with valid credentials" do |
180 | 180 | create(:user, id: 1, company: company) |
181 | - get :show, params: { id: 1 } | |
181 | + get :show, params: { id: 1 }, as: :json | |
182 | 182 | |
183 | 183 | expect(response.status).to eq 200 |
184 | 184 | end |
185 | 185 | |
186 | 186 | it "returns :not_found for id that cannot be found" do |
187 | - get :show, params: { id: "fake_id" } | |
187 | + get :show, params: { id: "fake_id" }, as: :json | |
188 | 188 | |
189 | 189 | expect(response.status).to eq 404 |
190 | 190 | end |
... | ... | @@ -193,7 +193,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
193 | 193 | new_company = create(:company) |
194 | 194 | create(:user, company: new_company, id: 1) |
195 | 195 | |
196 | - get :show, params: { id: 1 } | |
196 | + get :show, params: { id: 1 }, as: :json | |
197 | 197 | |
198 | 198 | expect(response.status).to eq 404 |
199 | 199 | end |
... | ... | @@ -206,13 +206,13 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
206 | 206 | |
207 | 207 | context "when unauthorized" do |
208 | 208 | it "returns scim+json content type" do |
209 | - post :create | |
209 | + post :create, as: :json | |
210 | 210 | |
211 | 211 | expect(response.media_type).to eq "application/scim+json" |
212 | 212 | end |
213 | 213 | |
214 | 214 | it "fails with no credentials" do |
215 | - post :create | |
215 | + post :create, as: :json | |
216 | 216 | |
217 | 217 | expect(response.status).to eq 401 |
218 | 218 | end |
... | ... | @@ -220,7 +220,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
220 | 220 | it "fails with invalid credentials" do |
221 | 221 | request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials("unauthorized","123456") |
222 | 222 | |
223 | - post :create | |
223 | + post :create, as: :json | |
224 | 224 | |
225 | 225 | expect(response.status).to eq 401 |
226 | 226 | end |
... | ... | @@ -242,7 +242,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
242 | 242 | value: "new@example.com" |
243 | 243 | } |
244 | 244 | ] |
245 | - } | |
245 | + }, as: :json | |
246 | 246 | |
247 | 247 | expect(response.media_type).to eq "application/scim+json" |
248 | 248 | end |
... | ... | @@ -260,7 +260,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
260 | 260 | value: "new@example.com" |
261 | 261 | } |
262 | 262 | ] |
263 | - } | |
263 | + }, as: :json | |
264 | 264 | |
265 | 265 | expect(response.status).to eq 201 |
266 | 266 | expect(company.users.count).to eq 1 |
... | ... | @@ -283,7 +283,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
283 | 283 | value: "new@example.com" |
284 | 284 | } |
285 | 285 | ] |
286 | - } | |
286 | + }, as: :json | |
287 | 287 | |
288 | 288 | expect(response.status).to eq 201 |
289 | 289 | expect(company.users.count).to eq 1 |
... | ... | @@ -299,7 +299,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
299 | 299 | value: "new@example.com" |
300 | 300 | } |
301 | 301 | ] |
302 | - } | |
302 | + }, as: :json | |
303 | 303 | |
304 | 304 | expect(response.status).to eq 422 |
305 | 305 | expect(company.users.count).to eq 0 |
... | ... | @@ -318,7 +318,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
318 | 318 | value: "new@example.com" |
319 | 319 | } |
320 | 320 | ] |
321 | - } | |
321 | + }, as: :json | |
322 | 322 | |
323 | 323 | expect(response.status).to eq 201 |
324 | 324 | expect(company.users.count).to eq 1 |
... | ... | @@ -339,7 +339,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
339 | 339 | value: "new@example.com" |
340 | 340 | } |
341 | 341 | ] |
342 | - } | |
342 | + }, as: :json | |
343 | 343 | |
344 | 344 | expect(response.status).to eq 409 |
345 | 345 | expect(company.users.count).to eq 1 |
... | ... | @@ -359,7 +359,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
359 | 359 | }, |
360 | 360 | ], |
361 | 361 | active: "false" |
362 | - } | |
362 | + }, as: :json | |
363 | 363 | |
364 | 364 | expect(response.status).to eq 201 |
365 | 365 | expect(company.users.count).to eq 1 |
... | ... | @@ -375,13 +375,13 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
375 | 375 | |
376 | 376 | context "when unauthorized" do |
377 | 377 | it "returns scim+json content type" do |
378 | - put :put_update, params: { id: 1 } | |
378 | + put :put_update, params: { id: 1 }, as: :json | |
379 | 379 | |
380 | 380 | expect(response.media_type).to eq "application/scim+json" |
381 | 381 | end |
382 | 382 | |
383 | 383 | it "fails with no credentials" do |
384 | - put :put_update, params: { id: 1 } | |
384 | + put :put_update, params: { id: 1 }, as: :json | |
385 | 385 | |
386 | 386 | expect(response.status).to eq 401 |
387 | 387 | end |
... | ... | @@ -389,7 +389,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
389 | 389 | it "fails with invalid credentials" do |
390 | 390 | request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials("unauthorized","123456") |
391 | 391 | |
392 | - put :put_update, params: { id: 1 } | |
392 | + put :put_update, params: { id: 1 }, as: :json | |
393 | 393 | |
394 | 394 | expect(response.status).to eq 401 |
395 | 395 | end |
... | ... | @@ -403,20 +403,20 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
403 | 403 | end |
404 | 404 | |
405 | 405 | it "returns scim+json content type" do |
406 | - put :put_update, params: put_params | |
406 | + put :put_update, params: put_params, as: :json | |
407 | 407 | |
408 | 408 | expect(response.media_type).to eq "application/scim+json" |
409 | 409 | end |
410 | 410 | |
411 | 411 | it "is successful with with valid credentials" do |
412 | - put :put_update, params: put_params | |
412 | + put :put_update, params: put_params, as: :json | |
413 | 413 | |
414 | 414 | expect(response.status).to eq 200 |
415 | 415 | end |
416 | 416 | |
417 | 417 | it "deprovisions an active record" do |
418 | 418 | request.content_type = "application/scim+json" |
419 | - put :put_update, params: put_params(active: false) | |
419 | + put :put_update, params: put_params(active: false), as: :json | |
420 | 420 | |
421 | 421 | expect(response.status).to eq 200 |
422 | 422 | expect(user.reload.active?).to eq false |
... | ... | @@ -426,14 +426,14 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
426 | 426 | user.archive! |
427 | 427 | expect(user.reload.active?).to eq false |
428 | 428 | request.content_type = "application/scim+json" |
429 | - put :put_update, params: put_params(active: true) | |
429 | + put :put_update, params: put_params(active: true), as: :json | |
430 | 430 | |
431 | 431 | expect(response.status).to eq 200 |
432 | 432 | expect(user.reload.active?).to eq true |
433 | 433 | end |
434 | 434 | |
435 | 435 | it "returns :not_found for id that cannot be found" do |
436 | - get :put_update, params: { id: "fake_id" } | |
436 | + get :put_update, params: { id: "fake_id" }, as: :json | |
437 | 437 | |
438 | 438 | expect(response.status).to eq 404 |
439 | 439 | end |
... | ... | @@ -442,7 +442,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
442 | 442 | new_company = create(:company) |
443 | 443 | create(:user, company: new_company, id: 1000) |
444 | 444 | |
445 | - get :put_update, params: { id: 1000 } | |
445 | + get :put_update, params: { id: 1000 }, as: :json | |
446 | 446 | |
447 | 447 | expect(response.status).to eq 404 |
448 | 448 | end |
... | ... | @@ -457,7 +457,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
457 | 457 | }, |
458 | 458 | ], |
459 | 459 | active: "true" |
460 | - } | |
460 | + }, as: :json | |
461 | 461 | |
462 | 462 | expect(response.status).to eq 422 |
463 | 463 | end |
... | ... | @@ -470,13 +470,13 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
470 | 470 | |
471 | 471 | context "when unauthorized" do |
472 | 472 | it "returns scim+json content type" do |
473 | - patch :patch_update, params: patch_params(id: 1) | |
473 | + patch :patch_update, params: patch_params(id: 1), as: :json | |
474 | 474 | |
475 | 475 | expect(response.media_type).to eq "application/scim+json" |
476 | 476 | end |
477 | 477 | |
478 | 478 | it "fails with no credentials" do |
479 | - patch :patch_update, params: patch_params(id: 1) | |
479 | + patch :patch_update, params: patch_params(id: 1), as: :json | |
480 | 480 | |
481 | 481 | expect(response.status).to eq 401 |
482 | 482 | end |
... | ... | @@ -484,7 +484,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
484 | 484 | it "fails with invalid credentials" do |
485 | 485 | request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials("unauthorized","123456") |
486 | 486 | |
487 | - patch :patch_update, params: patch_params(id: 1) | |
487 | + patch :patch_update, params: patch_params(id: 1), as: :json | |
488 | 488 | |
489 | 489 | expect(response.status).to eq 401 |
490 | 490 | end |
... | ... | @@ -498,19 +498,19 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
498 | 498 | end |
499 | 499 | |
500 | 500 | it "returns scim+json content type" do |
501 | - patch :patch_update, params: patch_params(id: 1) | |
501 | + patch :patch_update, params: patch_params(id: 1), as: :json | |
502 | 502 | |
503 | 503 | expect(response.media_type).to eq "application/scim+json" |
504 | 504 | end |
505 | 505 | |
506 | 506 | it "is successful with valid credentials" do |
507 | - patch :patch_update, params: patch_params(id: 1) | |
507 | + patch :patch_update, params: patch_params(id: 1), as: :json | |
508 | 508 | |
509 | 509 | expect(response.status).to eq 200 |
510 | 510 | end |
511 | 511 | |
512 | 512 | it "returns :not_found for id that cannot be found" do |
513 | - get :patch_update, params: patch_params(id: "fake_id") | |
513 | + get :patch_update, params: patch_params(id: "fake_id"), as: :json | |
514 | 514 | |
515 | 515 | expect(response.status).to eq 404 |
516 | 516 | end |
... | ... | @@ -519,7 +519,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
519 | 519 | new_company = create(:company) |
520 | 520 | create(:user, company: new_company, id: 1000) |
521 | 521 | |
522 | - get :patch_update, params: patch_params(id: 1000) | |
522 | + get :patch_update, params: patch_params(id: 1000), as: :json | |
523 | 523 | |
524 | 524 | expect(response.status).to eq 404 |
525 | 525 | end |
... | ... | @@ -529,7 +529,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
529 | 529 | user = company.users.first |
530 | 530 | expect(user.archived?).to eq false |
531 | 531 | |
532 | - patch :patch_update, params: patch_params(id: 1) | |
532 | + patch :patch_update, params: patch_params(id: 1), as: :json | |
533 | 533 | |
534 | 534 | expect(response.status).to eq 200 |
535 | 535 | expect(company.users.count).to eq 1 |
... | ... | @@ -542,7 +542,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
542 | 542 | user = company.users.first.tap(&:archive!) |
543 | 543 | expect(user.archived?).to eq true |
544 | 544 | |
545 | - patch :patch_update, params: patch_params(id: 1, active: true) | |
545 | + patch :patch_update, params: patch_params(id: 1, active: true), as: :json | |
546 | 546 | |
547 | 547 | expect(response.status).to eq 200 |
548 | 548 | expect(company.users.count).to eq 1 |
... | ... | @@ -550,6 +550,24 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
550 | 550 | expect(user.archived?).to eq false |
551 | 551 | end |
552 | 552 | |
553 | + it "is case insensetive for op value" do | |
554 | + # Note, this is for backward compatibility. op should always | |
555 | + # be lower case and support for case insensitivity will be removed | |
556 | + patch :patch_update, params: { | |
557 | + id: 1, | |
558 | + Operations: [ | |
559 | + { | |
560 | + op: "Replace", | |
561 | + value: { | |
562 | + active: false | |
563 | + } | |
564 | + } | |
565 | + ] | |
566 | + }, as: :json | |
567 | + | |
568 | + expect(response.status).to eq 200 | |
569 | + end | |
570 | + | |
553 | 571 | it "throws an error for non status updates" do |
554 | 572 | patch :patch_update, params: { |
555 | 573 | id: 1, |
... | ... | @@ -563,14 +581,14 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
563 | 581 | } |
564 | 582 | } |
565 | 583 | ] |
566 | - } | |
584 | + }, as: :json | |
567 | 585 | |
568 | 586 | expect(response.status).to eq 422 |
569 | 587 | response_body = JSON.parse(response.body) |
570 | 588 | expect(response_body.dig("schemas", 0)).to eq "urn:ietf:params:scim:api:messages:2.0:Error" |
571 | 589 | end |
572 | 590 | |
573 | - it "returns 422 when value is " do | |
591 | + it "returns 422 when value is not an object" do | |
574 | 592 | patch :patch_update, params: { |
575 | 593 | id: 1, |
576 | 594 | Operations: [ |
... | ... | @@ -595,7 +613,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
595 | 613 | op: "replace" |
596 | 614 | } |
597 | 615 | ] |
598 | - } | |
616 | + }, as: :json | |
599 | 617 | |
600 | 618 | expect(response.status).to eq 422 |
601 | 619 | response_body = JSON.parse(response.body) |
... | ... | @@ -610,7 +628,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :controller do |
610 | 628 | op: "replace" |
611 | 629 | } |
612 | 630 | ] |
613 | - } | |
631 | + }, as: :json | |
614 | 632 | |
615 | 633 | expect(response.status).to eq 422 |
616 | 634 | response_body = JSON.parse(response.body) | ... | ... |
spec/controllers/scim_rails/scim_users_request_spec.rb
... | ... | @@ -8,7 +8,7 @@ RSpec.describe ScimRails::ScimUsersController, type: :request do |
8 | 8 | def post_request(content_type = "application/scim+json") |
9 | 9 | # params need to be transformed into a string to test if they are being parsed by Rack |
10 | 10 | |
11 | - post "/scim_rails/scim/v2/Users", | |
11 | + post "/scim/v2/Users", | |
12 | 12 | params: { |
13 | 13 | name: { |
14 | 14 | givenName: "New", | ... | ... |
spec/dummy/config/routes.rb