Skip to content

Commit ff7252d

Browse files
committed
1 parent 528a786 commit ff7252d

File tree

4 files changed

+61
-6
lines changed

4 files changed

+61
-6
lines changed

lib/concepts/school_student/delete.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def call(school:, student_id:, token:)
1616
private
1717

1818
def delete_student(school, student_id, token)
19-
ProfileApiClient.delete_school_student(token:, student_id:, organisation_id: school.id)
19+
ProfileApiClient.delete_school_student(token:, student_id:, school_id: school.id)
2020
end
2121
end
2222
end

lib/profile_api_client.rb

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,13 +137,12 @@ def update_school_student(token:, school_id:, student_id:, name: nil, username:
137137
end
138138
# rubocop:enable Metrics/AbcSize
139139

140-
def delete_school_student(token:, student_id:, organisation_id:)
140+
def delete_school_student(token:, school_id:, student_id:)
141141
return nil if token.blank?
142142

143-
_ = student_id
144-
_ = organisation_id
143+
response = connection(token).delete("/api/v1/schools/#{school_id}/students/#{student_id}")
145144

146-
{}
145+
raise UnexpectedResponse, response unless response.status == 204
147146
end
148147

149148
def safeguarding_flags(token:)

spec/concepts/school_student/delete_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
# TODO: Replace with WebMock assertion once the profile API has been built.
2323
expect(ProfileApiClient).to have_received(:delete_school_student)
24-
.with(token:, student_id:, organisation_id: school.id)
24+
.with(token:, student_id:, school_id: school.id)
2525
end
2626

2727
context 'when removal fails' do

spec/lib/profile_api_client_spec.rb

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -675,4 +675,60 @@ def school_student
675675
described_class.school_student(token:, school_id: school.id, student_id:)
676676
end
677677
end
678+
679+
describe '.delete_school_student' do
680+
let(:school) { build(:school, id: SecureRandom.uuid) }
681+
let(:delete_student_url) { "#{api_url}/api/v1/schools/#{school.id}/students/#{student_id}" }
682+
let(:student_id) { SecureRandom.uuid }
683+
684+
before do
685+
stub_request(:delete, delete_student_url).to_return(status: 204, body: '', headers: { 'content-type' => 'application/json' })
686+
end
687+
688+
it 'makes a request to the profile api host' do
689+
delete_school_student
690+
expect(WebMock).to have_requested(:delete, delete_student_url)
691+
end
692+
693+
it 'includes token in the authorization request header' do
694+
delete_school_student
695+
expect(WebMock).to have_requested(:delete, delete_student_url).with(headers: { authorization: "Bearer #{token}" })
696+
end
697+
698+
it 'includes the profile api key in the x-api-key request header' do
699+
delete_school_student
700+
expect(WebMock).to have_requested(:delete, delete_student_url).with(headers: { 'x-api-key' => api_key })
701+
end
702+
703+
it 'sets accept header to json' do
704+
delete_school_student
705+
expect(WebMock).to have_requested(:delete, delete_student_url).with(headers: { 'accept' => 'application/json' })
706+
end
707+
708+
it 'returns nil if successful' do
709+
stub_request(:delete, delete_student_url)
710+
.to_return(status: 204, body: '', headers: { 'content-type' => 'application/json' })
711+
expect(delete_school_student).to be_nil
712+
end
713+
714+
it 'raises exception if anything other than a 200 status code is returned' do
715+
stub_request(:delete, delete_student_url)
716+
.to_return(status: 201)
717+
718+
expect { delete_school_student }.to raise_error(ProfileApiClient::UnexpectedResponse)
719+
end
720+
721+
it 'raises faraday exception for 4xx and 5xx responses' do
722+
stub_request(:delete, delete_student_url)
723+
.to_return(status: 401)
724+
725+
expect { delete_school_student }.to raise_error(Faraday::Error)
726+
end
727+
728+
private
729+
730+
def delete_school_student
731+
described_class.delete_school_student(token:, school_id: school.id, student_id:)
732+
end
733+
end
678734
end

0 commit comments

Comments
 (0)