added tests
This commit is contained in:
@ -27,7 +27,7 @@ class Exercise < ActiveRecord::Base
|
|||||||
ActiveRecord::Base.connection.execute("SELECT AVG(score) AS average_score FROM (SELECT MAX(score) AS score FROM submissions WHERE cause = 'submit' AND exercise_id = '#{id}' GROUP BY user_id) AS maximum_scores")[0]['average_score'].to_f.round(2)
|
ActiveRecord::Base.connection.execute("SELECT AVG(score) AS average_score FROM (SELECT MAX(score) AS score FROM submissions WHERE cause = 'submit' AND exercise_id = '#{id}' GROUP BY user_id) AS maximum_scores")[0]['average_score'].to_f.round(2)
|
||||||
end
|
end
|
||||||
|
|
||||||
def duplicate(attributes)
|
def duplicate(attributes = {})
|
||||||
exercise = dup
|
exercise = dup
|
||||||
exercise.attributes = attributes
|
exercise.attributes = attributes
|
||||||
files.each { |file| exercise.files << file.dup }
|
files.each { |file| exercise.files << file.dup }
|
||||||
|
@ -5,6 +5,24 @@ describe ExercisesController do
|
|||||||
let(:user) { FactoryGirl.create(:admin) }
|
let(:user) { FactoryGirl.create(:admin) }
|
||||||
before(:each) { allow(controller).to receive(:current_user).and_return(user) }
|
before(:each) { allow(controller).to receive(:current_user).and_return(user) }
|
||||||
|
|
||||||
|
describe 'POST #clone' do
|
||||||
|
let(:request) { proc { post :clone, id: exercise.id } }
|
||||||
|
before(:each) { request.call }
|
||||||
|
|
||||||
|
expect_assigns(exercise: Exercise)
|
||||||
|
|
||||||
|
it 'clones the exercise' do
|
||||||
|
expect_any_instance_of(Exercise).to receive(:duplicate).with(hash_including(public: false, user: user)).and_call_original
|
||||||
|
expect { request.call }.to change(Exercise, :count).by(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'generates a new token' do
|
||||||
|
expect(Exercise.last.token).not_to eq(exercise.token)
|
||||||
|
end
|
||||||
|
|
||||||
|
expect_redirect
|
||||||
|
end
|
||||||
|
|
||||||
describe 'POST #create' do
|
describe 'POST #create' do
|
||||||
let(:exercise_attributes) { FactoryGirl.build(:dummy).attributes }
|
let(:exercise_attributes) { FactoryGirl.build(:dummy).attributes }
|
||||||
|
|
||||||
|
@ -27,4 +27,28 @@ describe Exercise do
|
|||||||
expect(exercise.errors[:user_id]).to be_present
|
expect(exercise.errors[:user_id]).to be_present
|
||||||
expect(exercise.errors[:user_type]).to be_present
|
expect(exercise.errors[:user_type]).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#duplicate' do
|
||||||
|
let(:exercise) { FactoryGirl.create(:fibonacci) }
|
||||||
|
after(:each) { exercise.duplicate }
|
||||||
|
|
||||||
|
it 'duplicates the exercise' do
|
||||||
|
expect(exercise).to receive(:dup).and_call_original
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'overwrites the supplied attributes' do
|
||||||
|
title = Forgery(:basic).text
|
||||||
|
expect(exercise.duplicate(title: title).title).to eq(title)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'duplicates all associated files' do
|
||||||
|
exercise.files.each do
|
||||||
|
|file| expect(file).to receive(:dup).and_call_original
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns the duplicated exercise' do
|
||||||
|
expect(exercise.duplicate).to be_an(Exercise)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user