Skip to content

Commit 7d6b823

Browse files
committed
Allow ExCS admin to update starter projects
This gives users with the "experience-cs-admin" role permission to update starter (or "public") projects (i.e. projects with no `user_id` set). I've added an example to the "Updating a project" feature spec to check this works as intended.
1 parent 3b51b24 commit 7d6b823

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

app/models/ability.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ def define_experience_cs_admin_abilities(user)
106106
return unless user&.experience_cs_admin?
107107

108108
can :create, Project
109+
can :update, Project
109110
end
110111

111112
def school_teacher_can_manage_lesson?(user:, school:, lesson:)

spec/features/project/updating_a_project_spec.rb

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
RSpec.describe 'Updating a project', type: :request do
66
let(:headers) { { Authorization: UserProfileMock::TOKEN } }
77
let(:locale) { 'en' }
8-
let!(:project) { create(:project, name: 'Test Project', user_id: owner.id, locale:) }
8+
let(:project_type) { Project::Types::PYTHON }
9+
let!(:project) { create(:project, name: 'Test Project', user_id: owner.id, locale:, project_type:) }
910
let(:owner) { create(:owner, school:) }
1011
let(:school) { create(:school) }
1112

@@ -77,4 +78,37 @@
7778
expect(response).to have_http_status(:not_found)
7879
end
7980
end
81+
82+
context 'when the user is an Experience CS admin and project type is scratch' do
83+
let(:experience_cs_admin) { create(:experience_cs_admin_user) }
84+
let(:project_type) { Project::Types::SCRATCH }
85+
let(:params) do
86+
{
87+
project: {
88+
identifier: 'test-project',
89+
name: 'Test Project',
90+
locale: 'fr',
91+
project_type: Project::Types::SCRATCH,
92+
user_id: nil,
93+
components: []
94+
}
95+
}
96+
end
97+
98+
before do
99+
authenticated_in_hydra_as(experience_cs_admin)
100+
end
101+
102+
it 'responds 200 OK' do
103+
put("/api/projects/#{project.identifier}?project_type=scratch", headers:, params:)
104+
expect(response).to have_http_status(:success)
105+
end
106+
107+
it 'sets the project name to the specified value' do
108+
put("/api/projects/#{project.identifier}?project_type=scratch", headers:, params:)
109+
data = JSON.parse(response.body, symbolize_names: true)
110+
111+
expect(data[:name]).to eq('Test Project')
112+
end
113+
end
80114
end

spec/models/ability_spec.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@
143143
let(:user) { build(:experience_cs_admin_user) }
144144

145145
it { is_expected.to be_able_to(:create, starter_project) }
146+
it { is_expected.to be_able_to(:update, starter_project) }
146147
end
147148

148149
# rubocop:disable RSpec/MultipleMemoizedHelpers

0 commit comments

Comments
 (0)