Skip to content

Commit f52f166

Browse files
committed
Add ProfileApiClient.delete_safeguarding_flag
1 parent 1a7b056 commit f52f166

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed

lib/profile_api_client.rb

Lines changed: 10 additions & 0 deletions
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

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

0 commit comments

Comments
 (0)