Skip to content

Commit d32fb7e

Browse files
committed
Test coverage for the SchoolClass feature
This commit adds broader tests for the behaviour of marked-as-deleted classes.
1 parent 0531006 commit d32fb7e

4 files changed

Lines changed: 93 additions & 0 deletions

File tree

spec/features/school_class/deleting_a_school_class_spec.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
expect(response).to have_http_status(:no_content)
1919
end
2020

21+
it 'marks the class as deleted instead of destroying it' do
22+
delete("/api/schools/#{school.id}/classes/#{school_class.id}", headers:)
23+
expect(school_class.reload.deleted?).to be true
24+
end
25+
2126
it 'responds 204 No Content when the user is the class teacher' do
2227
authenticated_in_hydra_as(teacher)
2328

@@ -53,4 +58,11 @@
5358
delete("/api/schools/#{school.id}/classes/#{school_class.id}", headers:)
5459
expect(response).to have_http_status(:forbidden)
5560
end
61+
62+
it 'responds 403 Forbidden when the class is already deleted' do
63+
school_class.update!(deleted: true)
64+
65+
delete("/api/schools/#{school.id}/classes/#{school_class.id}", headers:)
66+
expect(response).to have_http_status(:forbidden)
67+
end
5668
end

spec/features/school_class/listing_school_classes_spec.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,30 @@ def create_remix_with_feedback(school_class:, student:, feedback_attrs: [])
102102
data = get_classes
103103
expect(data.size).to eq(1)
104104
end
105+
106+
it 'does not include deleted classes' do
107+
school_class.update!(deleted: true)
108+
109+
data = get_classes
110+
expect(data.pluck(:name)).not_to include('Test School Class')
111+
end
112+
113+
it 'does not include deleted classes for school-teachers' do
114+
authenticated_in_hydra_as(teacher)
115+
school_class.update!(deleted: true)
116+
117+
data = get_classes
118+
expect(data).to be_empty
119+
end
120+
121+
it 'does not include deleted classes for school-students' do
122+
authenticated_in_hydra_as(student)
123+
stub_user_info_api_for(teacher)
124+
school_class.update!(deleted: true)
125+
126+
data = get_classes
127+
expect(data).to be_empty
128+
end
105129
end
106130

107131
describe 'submitted_count' do

spec/features/school_class/showing_a_school_class_spec.rb

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,31 @@
104104
get("/api/schools/#{school.id}/classes/#{school_class.id}", headers:)
105105
expect(response).to have_http_status(:forbidden)
106106
end
107+
108+
it 'responds 403 Forbidden when the class is deleted even if student is a member' do
109+
student = create(:student, school:)
110+
authenticated_in_hydra_as(student)
111+
create(:class_student, school_class:, student_id: student.id)
112+
school_class.update!(deleted: true)
113+
114+
get("/api/schools/#{school.id}/classes/#{school_class.id}", headers:)
115+
expect(response).to have_http_status(:forbidden)
116+
end
117+
118+
it 'responds 403 Forbidden when the class is deleted even if user is the teacher' do
119+
authenticated_in_hydra_as(teacher)
120+
school_class.update!(deleted: true)
121+
122+
get("/api/schools/#{school.id}/classes/#{school_class.id}", headers:)
123+
expect(response).to have_http_status(:forbidden)
124+
end
125+
126+
it 'responds 403 Forbidden when the class is deleted even if user is a school owner' do
127+
school_class.update!(deleted: true)
128+
129+
get("/api/schools/#{school.id}/classes/#{school_class.id}", headers:)
130+
expect(response).to have_http_status(:forbidden)
131+
end
107132
end
108133

109134
context 'when school and class codes are provided' do
@@ -201,5 +226,30 @@
201226
get("/api/schools/#{school.code}/classes/#{school_class.code}", headers:)
202227
expect(response).to have_http_status(:forbidden)
203228
end
229+
230+
it 'responds 403 Forbidden when the class is deleted even if student is a member' do
231+
student = create(:student, school:)
232+
authenticated_in_hydra_as(student)
233+
create(:class_student, school_class:, student_id: student.id)
234+
school_class.update!(deleted: true)
235+
236+
get("/api/schools/#{school.code}/classes/#{school_class.code}", headers:)
237+
expect(response).to have_http_status(:forbidden)
238+
end
239+
240+
it 'responds 403 Forbidden when the class is deleted even if user is the teacher' do
241+
authenticated_in_hydra_as(teacher)
242+
school_class.update!(deleted: true)
243+
244+
get("/api/schools/#{school.code}/classes/#{school_class.code}", headers:)
245+
expect(response).to have_http_status(:forbidden)
246+
end
247+
248+
it 'responds 403 Forbidden when the class is deleted even if user is a school owner' do
249+
school_class.update!(deleted: true)
250+
251+
get("/api/schools/#{school.code}/classes/#{school_class.code}", headers:)
252+
expect(response).to have_http_status(:forbidden)
253+
end
204254
end
205255
end

spec/features/school_class/updating_a_school_class_spec.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,11 @@
8484
put("/api/schools/#{school.id}/classes/#{school_class.id}", headers:, params:)
8585
expect(response).to have_http_status(:forbidden)
8686
end
87+
88+
it 'responds 403 Forbidden when the class is deleted even if user is the teacher' do
89+
school_class.update!(deleted: true)
90+
91+
put("/api/schools/#{school.id}/classes/#{school_class.id}", headers:, params:)
92+
expect(response).to have_http_status(:forbidden)
93+
end
8794
end

0 commit comments

Comments
 (0)