Skip to content

Commit 7a9ff1d

Browse files
committed
Add ProfileApiClient.delete_safeguarding_flag
We're not using this at the moment but it makes it easier to test in development if we can create and delete safeguarding flags for a user. Note that I'm intentionally not doing anything different if `BYPASS_OAUTH` is set. Given how tightly coupled Editor API and Profile API are I'm less convinced it makes sense to attempt to run one without the other in development. API docs: https://my.raspberrypi.org/api/v1/documentation/#/Safeguarding%20Flags/delete_safeguarding_flags__flag_
1 parent 1379992 commit 7a9ff1d

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

lib/profile_api_client.rb

+8
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,14 @@ def create_safeguarding_flag(token:, flag:)
222222
raise "Safeguarding flag not created in Profile API (status code #{response.status})"
223223
end
224224

225+
def delete_safeguarding_flag(token:, flag:)
226+
response = connection(token).delete("/api/v1/safeguarding-flags/#{flag}")
227+
228+
return if response.status == 204
229+
230+
raise "Safeguarding flag not deleted from Profile API (status code #{response.status})"
231+
end
232+
225233
private
226234

227235
def connection(token)

spec/lib/profile_api_client_spec.rb

+53
Original file line numberDiff line numberDiff line change
@@ -229,4 +229,57 @@ def create_safeguarding_flag
229229
described_class.create_safeguarding_flag(token:, flag:)
230230
end
231231
end
232+
233+
describe '.delete_safeguarding_flag' do
234+
let(:flag) { 'school:owner' }
235+
let(:delete_safeguarding_flag_url) { "#{api_url}/api/v1/safeguarding-flags/#{flag}" }
236+
237+
before do
238+
stub_request(:delete, delete_safeguarding_flag_url).to_return(status: 204, body: '')
239+
end
240+
241+
it 'makes a request to the profile api host' do
242+
delete_safeguarding_flag
243+
expect(WebMock).to have_requested(:delete, delete_safeguarding_flag_url)
244+
end
245+
246+
it 'includes token in the authorization request header' do
247+
delete_safeguarding_flag
248+
expect(WebMock).to have_requested(:delete, delete_safeguarding_flag_url).with(headers: { authorization: "Bearer #{token}" })
249+
end
250+
251+
it 'includes the profile api key in the x-api-key request header' do
252+
delete_safeguarding_flag
253+
expect(WebMock).to have_requested(:delete, delete_safeguarding_flag_url).with(headers: { 'x-api-key' => api_key })
254+
end
255+
256+
it 'sets accept header to json' do
257+
delete_safeguarding_flag
258+
expect(WebMock).to have_requested(:delete, delete_safeguarding_flag_url).with(headers: { 'accept' => 'application/json' })
259+
end
260+
261+
it 'returns empty body if successful' do
262+
stub_request(:delete, delete_safeguarding_flag_url)
263+
.to_return(status: 204, body: '')
264+
expect(delete_safeguarding_flag).to be_nil
265+
end
266+
267+
it 'raises exception if anything other than a 204 status code is returned' do
268+
stub_request(:delete, delete_safeguarding_flag_url)
269+
.to_return(status: 200)
270+
271+
expect { delete_safeguarding_flag }.to raise_error(RuntimeError)
272+
end
273+
274+
it 'includes details of underlying response when exception is raised' do
275+
stub_request(:delete, delete_safeguarding_flag_url)
276+
.to_return(status: 401)
277+
278+
expect { delete_safeguarding_flag }.to raise_error('Safeguarding flag not deleted from Profile API (status code 401)')
279+
end
280+
281+
def delete_safeguarding_flag
282+
described_class.delete_safeguarding_flag(token:, flag:)
283+
end
284+
end
232285
end

0 commit comments

Comments
 (0)