diff --git a/spec/controllers/exercises_controller_spec.rb b/spec/controllers/exercises_controller_spec.rb index b509a33f..43dada43 100644 --- a/spec/controllers/exercises_controller_spec.rb +++ b/spec/controllers/exercises_controller_spec.rb @@ -313,30 +313,4 @@ describe ExercisesController do expect_template(:edit) end end - - describe 'redirect after submit' do - - let!(:submission_with_created_at_to_receive_feedback) { FactoryGirl.create(:submission, exercise_id: exercise.id, user_id: user.id, user_type: user.class.name, created_at: (11 - (user.id % 10))) } - - let(:exercise_with_user_feedbacks) { FactoryGirl.build(:dummy_with_user_feedbacks, submission: submission_with_created_at_to_receive_feedback) } - let(:exercise_with_21_user_feedbacks) { FactoryGirl.build(:dummy_with_user_feedbacks, user_exercise_feedback_count: 21, submission: submission_with_created_at_to_receive_feedback)) } - - - - it 'with less than maximal user feedbacks' do - exercise_with_user_feedbacks.send(:redirect_after_submit) - expect_redirect(new_user_exercise_feedback_path(user_exercise_feedback: {exercise_id: @exercise.id})) - end - - it 'with more than maximal user feedbacks' do - exercise_with_user_feedbacks.send(:redirect_after_submit) - expect_redirect(new_user_exercise_feedback_path(user_exercise_feedback: {exercise_id: @exercise.id})) - end - - - - expect_redirect(Exercise.last) - - end - end diff --git a/spec/models/submission_spec.rb b/spec/models/submission_spec.rb index 64f4e49e..227c6b99 100644 --- a/spec/models/submission_spec.rb +++ b/spec/models/submission_spec.rb @@ -85,4 +85,53 @@ describe Submission do expect(submission.to_s).to eq(described_class.model_name.human) end end + + describe '#redirect_to_feedback?' do + + context 'with no exercise feedback' do + let(:exercise) {FactoryGirl.create(:dummy)} + let(:user) {FactoryGirl.build(:external_user, id: (11 - exercise.created_at.to_i % 10) % 10)} + let(:submission) {FactoryGirl.build(:submission, exercise: exercise, user: user)} + + it 'sends 10% of users to feedback page' do + expect(submission.send(:redirect_to_feedback?)).to be_truthy + end + + it 'does not redirect other users' do + 9.times do |i| + submission = FactoryGirl.build(:submission, exercise: exercise, user: FactoryGirl.build(:external_user, id: (11 - exercise.created_at.to_i % 10) - i - 1)) + expect(submission.send(:redirect_to_feedback?)).to be_falsey + end + end + end + + context 'with little exercise feedback' do + let(:exercise) {FactoryGirl.create(:dummy_with_user_feedbacks)} + let(:user) {FactoryGirl.build(:external_user, id: (11 - exercise.created_at.to_i % 10) % 10)} + let(:submission) {FactoryGirl.build(:submission, exercise: exercise, user: user)} + + it 'sends 10% of users to feedback page' do + expect(submission.send(:redirect_to_feedback?)).to be_truthy + end + + it 'does not redirect other users' do + 9.times do |i| + submission = FactoryGirl.build(:submission, exercise: exercise, user: FactoryGirl.build(:external_user, id: (11 - exercise.created_at.to_i % 10) - i - 1)) + expect(submission.send(:redirect_to_feedback?)).to be_falsey + end + end + end + + context 'with enough exercise feedback' do + let(:exercise) {FactoryGirl.create(:dummy_with_user_feedbacks, user_feedbacks_count: 42)} + let(:user) {FactoryGirl.create(:external_user)} + + it 'sends nobody to feedback page' do + 30.times do |i| + submission = FactoryGirl.create(:submission, exercise: exercise, user: FactoryGirl.create(:external_user)) + expect(submission.send(:redirect_to_feedback?)).to be_falsey + end + end + end + end end