Skip to content

Commit 88162af

Browse files
Stop students marking teacher project as finished (#501)
closes #500 --------- Co-authored-by: create-issue-branch[bot] <53036503+create-issue-branch[bot]@users.noreply.github.com> Co-authored-by: Lois Wells <[email protected]>
1 parent 7183dc7 commit 88162af

File tree

3 files changed

+39
-6
lines changed

3 files changed

+39
-6
lines changed

app/controllers/api/school_projects_controller.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@ class SchoolProjectsController < ApiController
77

88
def show_finished
99
@school_project = Project.find_by(identifier: params[:id]).school_project
10+
authorize! :show_finished, @school_project
1011
render :finished, formats: [:json], status: :ok
1112
end
1213

1314
def set_finished
1415
project = Project.find_by(identifier: params[:id])
15-
result = SchoolProject::SetFinished.call(school_project: project.school_project, finished: params[:finished])
16+
@school_project = project.school_project
17+
authorize! :set_finished, @school_project
18+
result = SchoolProject::SetFinished.call(school_project: @school_project, finished: params[:finished])
1619

1720
if result.success?
1821
@school_project = result[:school_project]

spec/requests/school_projects/set_finished_spec.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,19 @@
6565
expect(student_project.school_project.finished).to be_falsey
6666
end
6767
end
68+
69+
context 'when the user does not own the project' do
70+
before do
71+
put("/api/projects/#{teacher_project.identifier}/finished", headers:, params: { finished: true })
72+
teacher_project.reload
73+
end
74+
75+
it 'returns forbidden response' do
76+
expect(response).to have_http_status(:forbidden)
77+
end
78+
79+
it 'does not change the finished flag' do
80+
expect(teacher_project.school_project.finished).to be_falsey
81+
end
82+
end
6883
end

spec/requests/school_projects/show_finished_spec.rb

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,30 @@
2727
context 'when the user is a student' do
2828
before do
2929
authenticated_in_hydra_as(student)
30-
get("/api/projects/#{student_project.identifier}/finished", headers:)
3130
end
3231

33-
it 'returns success response' do
34-
expect(response).to have_http_status(:ok)
32+
context 'when user owns project' do
33+
before do
34+
get("/api/projects/#{student_project.identifier}/finished", headers:)
35+
end
36+
37+
it 'returns success response' do
38+
expect(response).to have_http_status(:ok)
39+
end
40+
41+
it 'returns response containing correct school project data' do
42+
expect(response.body).to eq(school_project_json)
43+
end
3544
end
3645

37-
it 'returns response containing correct school project data' do
38-
expect(response.body).to eq(school_project_json)
46+
context 'when user does not own project' do
47+
before do
48+
get("/api/projects/#{teacher_project.identifier}/finished", headers:)
49+
end
50+
51+
it 'returns forbidden response' do
52+
expect(response).to have_http_status(:forbidden)
53+
end
3954
end
4055
end
4156
end

0 commit comments

Comments
 (0)