Skip to content

Commit bb1a74f

Browse files
committed
Add ProfileApiClient.delete_safeguarding_flag
1 parent 31a3d5b commit bb1a74f

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed

lib/profile_api_client.rb

+10
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,16 @@ def create_safeguarding_flag(token:, flag:)
226226
raise "Safeguarding flag not created in Profile API. HTTP response code: #{response.status}"
227227
end
228228

229+
def delete_safeguarding_flag(token:, flag:)
230+
response = connection.delete("/api/v1/safeguarding-flags/#{flag}") do |request|
231+
apply_default_headers(request, token)
232+
end
233+
234+
return if response.status == 204
235+
236+
raise "Safeguarding flag not deleted from Profile API. HTTP response code: #{response.status}"
237+
end
238+
229239
private
230240

231241
def connection

spec/lib/profile_api_client_spec.rb

+58
Original file line numberDiff line numberDiff line change
@@ -229,4 +229,62 @@ 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 content-type of request to json' do
257+
delete_safeguarding_flag
258+
expect(WebMock).to have_requested(:delete, delete_safeguarding_flag_url).with(headers: { 'content-type' => 'application/json' })
259+
end
260+
261+
it 'sets accept header to json' do
262+
delete_safeguarding_flag
263+
expect(WebMock).to have_requested(:delete, delete_safeguarding_flag_url).with(headers: { 'accept' => 'application/json' })
264+
end
265+
266+
it 'returns empty body if successful' do
267+
stub_request(:delete, delete_safeguarding_flag_url)
268+
.to_return(status: 204, body: '')
269+
expect(delete_safeguarding_flag).to be_nil
270+
end
271+
272+
it 'raises exception if anything other than a 201 status code is returned' do
273+
stub_request(:delete, delete_safeguarding_flag_url)
274+
.to_return(status: 200)
275+
276+
expect { delete_safeguarding_flag }.to raise_error(RuntimeError)
277+
end
278+
279+
it 'includes details of underlying response when exception is raised' do
280+
stub_request(:delete, delete_safeguarding_flag_url)
281+
.to_return(status: 401)
282+
283+
expect { delete_safeguarding_flag }.to raise_error('Safeguarding flag not deleted from Profile API. HTTP response code: 401')
284+
end
285+
286+
def delete_safeguarding_flag
287+
described_class.delete_safeguarding_flag(token:, flag:)
288+
end
289+
end
232290
end

0 commit comments

Comments
 (0)