From db2a9a4261165d64d1f12212d4ce60d4b9f96267 Mon Sep 17 00:00:00 2001 From: Hauke Klement Date: Thu, 29 Jan 2015 17:21:26 +0100 Subject: [PATCH] sped up some tests --- spec/concerns/submission_scoring_spec.rb | 4 +-- spec/factories/team.rb | 2 +- spec/policies/exercise_policy_spec.rb | 46 ++++++++++++------------ spec/support/docker.rb | 1 + 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/spec/concerns/submission_scoring_spec.rb b/spec/concerns/submission_scoring_spec.rb index e2dfbafa..cc30fe56 100644 --- a/spec/concerns/submission_scoring_spec.rb +++ b/spec/concerns/submission_scoring_spec.rb @@ -9,7 +9,7 @@ describe SubmissionScoring do let(:submission) { FactoryGirl.create(:submission, cause: 'submit') } before(:each) { controller.instance_variable_set(:@current_user, FactoryGirl.create(:external_user)) } - describe '#score_submission', docker: true do + describe '#score_submission' do let(:score_submission) { Proc.new { controller.score_submission(submission) } } before(:each) { score_submission.call } @@ -23,7 +23,7 @@ describe SubmissionScoring do it 'executes the teacher-defined test cases' do submission.collect_files.select(&:teacher_defined_test?).each do |file| - expect_any_instance_of(DockerClient).to receive(:execute_test_command).with(submission, file.name_with_extension).and_call_original + expect_any_instance_of(DockerClient).to receive(:execute_test_command).with(submission, file.name_with_extension).and_return({}) end score_submission.call end diff --git a/spec/factories/team.rb b/spec/factories/team.rb index d883293e..2f1881ed 100644 --- a/spec/factories/team.rb +++ b/spec/factories/team.rb @@ -1,6 +1,6 @@ FactoryGirl.define do factory :team do - internal_users { build_list :teacher, 10 } + internal_users { build_pair :teacher } name 'A-Team' end end diff --git a/spec/policies/exercise_policy_spec.rb b/spec/policies/exercise_policy_spec.rb index 6b4e0966..e11a06f3 100644 --- a/spec/policies/exercise_policy_spec.rb +++ b/spec/policies/exercise_policy_spec.rb @@ -3,20 +3,22 @@ require 'rails_helper' describe ExercisePolicy do subject { ExercisePolicy } - let(:exercise) { FactoryGirl.build(:fibonacci, team: FactoryGirl.create(:team)) } + before(:all) do + @exercise = FactoryGirl.build(:fibonacci, team: FactoryGirl.create(:team)) + end [:create?, :index?, :new?].each do |action| permissions(action) do it 'grants access to admins' do - expect(subject).to permit(FactoryGirl.build(:admin), exercise) + expect(subject).to permit(FactoryGirl.build(:admin), @exercise) end it 'grants access to teachers' do - expect(subject).to permit(FactoryGirl.build(:teacher), exercise) + expect(subject).to permit(FactoryGirl.build(:teacher), @exercise) end it 'does not grant access to external users' do - expect(subject).not_to permit(FactoryGirl.build(:external_user), exercise) + expect(subject).not_to permit(FactoryGirl.build(:external_user), @exercise) end end end @@ -24,20 +26,20 @@ describe ExercisePolicy do [:clone?, :destroy?, :edit?, :show?, :statistics?, :update?].each do |action| permissions(action) do it 'grants access to admins' do - expect(subject).to permit(FactoryGirl.build(:admin), exercise) + expect(subject).to permit(FactoryGirl.build(:admin), @exercise) end it 'grants access to authors' do - expect(subject).to permit(exercise.author, exercise) + expect(subject).to permit(@exercise.author, @exercise) end it 'grants access to team members' do - expect(subject).to permit(exercise.team.members.first, exercise) + expect(subject).to permit(@exercise.team.members.first, @exercise) end it 'does not grant access to all other users' do [:external_user, :teacher].each do |factory_name| - expect(subject).not_to permit(FactoryGirl.build(factory_name), exercise) + expect(subject).not_to permit(FactoryGirl.build(factory_name), @exercise) end end end @@ -55,16 +57,16 @@ describe ExercisePolicy do describe ExercisePolicy::Scope do describe '#resolve' do - let(:admin) { FactoryGirl.create(:admin) } - let(:external_user) { FactoryGirl.create(:external_user) } - let(:teacher) { FactoryGirl.create(:teacher) } - let(:team) { FactoryGirl.create(:team) } + before(:all) do + @admin = FactoryGirl.create(:admin) + @external_user = FactoryGirl.create(:external_user) + @teacher = FactoryGirl.create(:teacher) + @team = FactoryGirl.create(:team) + @team.members << @teacher - before(:each) do - [admin, teacher].each do |user| + [@admin, @teacher].each do |user| [true, false].each do |public| - team.members << teacher - [team, nil].each do |team| + [@team, nil].each do |team| FactoryGirl.create(:fibonacci, public: public, team: team, user_id: user.id, user_type: InternalUser.class.name) end end @@ -72,7 +74,7 @@ describe ExercisePolicy do end context 'for admins' do - let(:scope) { Pundit.policy_scope!(admin, Exercise) } + let(:scope) { Pundit.policy_scope!(@admin, Exercise) } it 'returns all exercises' do expect(scope.map(&:id)).to include(*Exercise.all.map(&:id)) @@ -80,7 +82,7 @@ describe ExercisePolicy do end context 'for external users' do - let(:scope) { Pundit.policy_scope!(external_user, Exercise) } + let(:scope) { Pundit.policy_scope!(@external_user, Exercise) } it 'returns nothing' do expect(scope.count).to be 0 @@ -88,22 +90,22 @@ describe ExercisePolicy do end context 'for teachers' do - let(:scope) { Pundit.policy_scope!(teacher, Exercise) } + let(:scope) { Pundit.policy_scope!(@teacher, Exercise) } it 'includes all public exercises' do expect(scope.map(&:id)).to include(*Exercise.where(public: true).map(&:id)) end it 'includes all authored non-public exercises' do - expect(scope.map(&:id)).to include(*Exercise.where(public: false, user_id: teacher.id).map(&:id)) + expect(scope.map(&:id)).to include(*Exercise.where(public: false, user_id: @teacher.id).map(&:id)) end it "includes all of team members' non-public exercises" do - expect(scope.map(&:id)).to include(*Exercise.where(public: false, team_id: teacher.teams.first.id).map(&:id)) + expect(scope.map(&:id)).to include(*Exercise.where(public: false, team_id: @teacher.teams.first.id).map(&:id)) end it "does not include other authors' non-public exercises" do - expect(scope.map(&:id)).not_to include(*Exercise.where(public: false).where("team_id <> #{teacher.teams.first.id} AND user_id <> #{teacher.id}").map(&:id)) + expect(scope.map(&:id)).not_to include(*Exercise.where(public: false).where("team_id <> #{@team.id} AND user_id <> #{@teacher.id}").map(&:id)) end end end diff --git a/spec/support/docker.rb b/spec/support/docker.rb index 0fbf15a2..6e08d23d 100644 --- a/spec/support/docker.rb +++ b/spec/support/docker.rb @@ -5,6 +5,7 @@ RSpec.configure do |config| unless example.metadata[:docker] allow(DockerClient).to receive(:check_availability!).and_return(true) allow(DockerClient).to receive(:image_tags).and_return([IMAGE]) + allow_any_instance_of(DockerClient).to receive(:execute_command).and_return({}) allow_any_instance_of(DockerClient).to receive(:find_image_by_tag).and_return(IMAGE) allow_any_instance_of(ExecutionEnvironment).to receive(:working_docker_image?) end