From 0280c0282e98e2236b19011576681a2e113476de Mon Sep 17 00:00:00 2001 From: Konrad Hanff Date: Tue, 8 Jun 2021 13:58:09 +0200 Subject: [PATCH] Add tests for synchronizing all execution environments This adds policy tests to ensure only an admin can synchronize all execution environments. It also adds controller tests that check that all execution environments get synchronized. --- .../execution_environments_controller_spec.rb | 16 ++++++++++++++++ .../execution_environment_policy_spec.rb | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/spec/controllers/execution_environments_controller_spec.rb b/spec/controllers/execution_environments_controller_spec.rb index 3507fc8a..fa76b4dd 100644 --- a/spec/controllers/execution_environments_controller_spec.rb +++ b/spec/controllers/execution_environments_controller_spec.rb @@ -192,4 +192,20 @@ describe ExecutionEnvironmentsController do end end end + + describe '#synchronize_all_to_poseidon' do + let(:execution_environments) { FactoryBot.build_list(:ruby, 3) } + + it 'copies all execution environments to Poseidon' do + allow(ExecutionEnvironment).to receive(:all).and_return(execution_environments) + + execution_environments.each do |execution_environment| + allow(execution_environment).to receive(:copy_to_poseidon).and_return(true) + end + + post :synchronize_all_to_poseidon + + expect(execution_environments).to all(have_received(:copy_to_poseidon).once) + end + end end diff --git a/spec/policies/execution_environment_policy_spec.rb b/spec/policies/execution_environment_policy_spec.rb index 41715025..9d0b2539 100644 --- a/spec/policies/execution_environment_policy_spec.rb +++ b/spec/policies/execution_environment_policy_spec.rb @@ -58,4 +58,20 @@ describe ExecutionEnvironmentPolicy do end end end + + permissions(:synchronize_all_to_poseidon?) do + it 'grants access to the admin' do + expect(policy).to permit(FactoryBot.build(:admin)) + end + + shared_examples 'it does not grant access' do |user| + it "does not grant access to a user with role #{user.role}" do + expect(policy).not_to permit(user) + end + end + + %i[teacher external_user].each do |user| + include_examples 'it does not grant access', FactoryBot.build(user) + end + end end