rename factory_girl_(rails) to factory_bot_(rails)

This commit is contained in:
Ralf Teusner
2017-11-15 15:18:07 +01:00
parent 951b71780c
commit 0e26ab98c8
68 changed files with 253 additions and 253 deletions

View File

@ -1,5 +1,5 @@
def find_factories_by_class(klass) def find_factories_by_class(klass)
FactoryGirl.factories.select do |factory| FactoryBot.factories.select do |factory|
factory.instance_variable_get(:@class_name) == klass || factory.instance_variable_get(:@name) == klass.model_name.singular.to_sym factory.instance_variable_get(:@class_name) == klass || factory.instance_variable_get(:@name) == klass.model_name.singular.to_sym
end end
end end
@ -9,7 +9,7 @@ module ActiveRecord
[:build, :create].each do |strategy| [:build, :create].each do |strategy|
define_singleton_method("#{strategy}_factories") do |attributes = {}| define_singleton_method("#{strategy}_factories") do |attributes = {}|
find_factories_by_class(self).map(&:name).map do |factory_name| find_factories_by_class(self).map(&:name).map do |factory_name|
FactoryGirl.send(strategy, factory_name, attributes) FactoryBot.send(strategy, factory_name, attributes)
end end
end end
end end

View File

@ -1,9 +1,9 @@
# consumers # consumers
FactoryGirl.create(:consumer) FactoryBot.create(:consumer)
FactoryGirl.create(:consumer, name: 'openSAP') FactoryBot.create(:consumer, name: 'openSAP')
# users # users
[:admin, :external_user, :teacher].each { |factory_name| FactoryGirl.create(factory_name) } [:admin, :external_user, :teacher].each { |factory_name| FactoryBot.create(factory_name) }
# execution environments # execution environments
ExecutionEnvironment.create_factories ExecutionEnvironment.create_factories
@ -12,7 +12,7 @@ ExecutionEnvironment.create_factories
Error.create_factories Error.create_factories
# exercises # exercises
@exercises = find_factories_by_class(Exercise).map(&:name).map { |factory_name| [factory_name, FactoryGirl.create(factory_name)] }.to_h @exercises = find_factories_by_class(Exercise).map(&:name).map { |factory_name| [factory_name, FactoryBot.create(factory_name)] }.to_h
# file types # file types
FileType.create_factories FileType.create_factories
@ -21,4 +21,4 @@ FileType.create_factories
Hint.create_factories Hint.create_factories
# submissions # submissions
FactoryGirl.create(:submission, exercise: @exercises[:fibonacci]) FactoryBot.create(:submission, exercise: @exercises[:fibonacci])

View File

@ -1,7 +1,7 @@
require 'highline/import' require 'highline/import'
# consumers # consumers
FactoryGirl.create(:consumer) FactoryBot.create(:consumer)
# users # users
email = ask('Enter admin email: ') email = ask('Enter admin email: ')
@ -11,7 +11,7 @@ passwords = ['password', 'password confirmation'].map do |attribute|
end end
if passwords.uniq.length == 1 if passwords.uniq.length == 1
FactoryGirl.create(:admin, email: email, name: 'Administrator', password: passwords.first) FactoryBot.create(:admin, email: email, name: 'Administrator', password: passwords.first)
else else
abort('Passwords do not match!') abort('Passwords do not match!')
end end

View File

@ -11,7 +11,7 @@ describe Lti do
describe '#build_tool_provider' do describe '#build_tool_provider' do
it 'instantiates a tool provider' do it 'instantiates a tool provider' do
expect(IMS::LTI::ToolProvider).to receive(:new) expect(IMS::LTI::ToolProvider).to receive(:new)
controller.send(:build_tool_provider, consumer: FactoryGirl.build(:consumer), parameters: {}) controller.send(:build_tool_provider, consumer: FactoryBot.build(:consumer), parameters: {})
end end
end end
@ -95,10 +95,10 @@ describe Lti do
end end
describe '#send_score' do describe '#send_score' do
let(:consumer) { FactoryGirl.create(:consumer) } let(:consumer) { FactoryBot.create(:consumer) }
let(:score) { 0.5 } let(:score) { 0.5 }
let(:submission) { FactoryGirl.create(:submission) } let(:submission) { FactoryBot.create(:submission) }
let!(:lti_parameter) { FactoryGirl.create(:lti_parameter)} let!(:lti_parameter) { FactoryBot.create(:lti_parameter)}
context 'with an invalid score' do context 'with an invalid score' do
it 'raises an exception' do it 'raises an exception' do
@ -159,18 +159,18 @@ describe Lti do
let(:parameters) { {} } let(:parameters) { {} }
it 'stores data in the session' do it 'stores data in the session' do
controller.instance_variable_set(:@current_user, FactoryGirl.create(:external_user)) controller.instance_variable_set(:@current_user, FactoryBot.create(:external_user))
controller.instance_variable_set(:@exercise, FactoryGirl.create(:fibonacci)) controller.instance_variable_set(:@exercise, FactoryBot.create(:fibonacci))
expect(controller.session).to receive(:[]=).with(:consumer_id, anything) expect(controller.session).to receive(:[]=).with(:consumer_id, anything)
expect(controller.session).to receive(:[]=).with(:external_user_id, anything) expect(controller.session).to receive(:[]=).with(:external_user_id, anything)
controller.send(:store_lti_session_data, consumer: FactoryGirl.build(:consumer), parameters: parameters) controller.send(:store_lti_session_data, consumer: FactoryBot.build(:consumer), parameters: parameters)
end end
it 'it creates an LtiParameter Object' do it 'it creates an LtiParameter Object' do
before_count = LtiParameter.count before_count = LtiParameter.count
controller.instance_variable_set(:@current_user, FactoryGirl.create(:external_user)) controller.instance_variable_set(:@current_user, FactoryBot.create(:external_user))
controller.instance_variable_set(:@exercise, FactoryGirl.create(:fibonacci)) controller.instance_variable_set(:@exercise, FactoryBot.create(:fibonacci))
controller.send(:store_lti_session_data, consumer: FactoryGirl.build(:consumer), parameters: parameters) controller.send(:store_lti_session_data, consumer: FactoryBot.build(:consumer), parameters: parameters)
expect(LtiParameter.count).to eq(before_count + 1) expect(LtiParameter.count).to eq(before_count + 1)
end end
end end

View File

@ -6,8 +6,8 @@ end
describe SubmissionScoring do describe SubmissionScoring do
let(:controller) { Controller.new } let(:controller) { Controller.new }
before(:all) { @submission = FactoryGirl.create(:submission, cause: 'submit') } before(:all) { @submission = FactoryBot.create(:submission, cause: 'submit') }
before(:each) { controller.instance_variable_set(:@current_user, FactoryGirl.create(:external_user)) } before(:each) { controller.instance_variable_set(:@current_user, FactoryBot.create(:external_user)) }
describe '#collect_test_results' do describe '#collect_test_results' do
after(:each) { controller.send(:collect_test_results, @submission) } after(:each) { controller.send(:collect_test_results, @submission) }

View File

@ -1,7 +1,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::DashboardController do describe Admin::DashboardController do
before(:each) { allow(controller).to receive(:current_user).and_return(FactoryGirl.build(:admin)) } before(:each) { allow(controller).to receive(:current_user).and_return(FactoryBot.build(:admin)) }
describe 'GET #show' do describe 'GET #show' do
describe 'with format HTML' do describe 'with format HTML' do

View File

@ -3,7 +3,7 @@ require 'rails_helper'
describe ApplicationController do describe ApplicationController do
describe '#current_user' do describe '#current_user' do
context 'with an external user' do context 'with an external user' do
let(:external_user) { FactoryGirl.create(:external_user) } let(:external_user) { FactoryBot.create(:external_user) }
before(:each) { session[:external_user_id] = external_user.id } before(:each) { session[:external_user_id] = external_user.id }
it 'returns the external user' do it 'returns the external user' do
@ -12,7 +12,7 @@ describe ApplicationController do
end end
context 'without an external user' do context 'without an external user' do
let(:internal_user) { FactoryGirl.create(:teacher) } let(:internal_user) { FactoryBot.create(:teacher) }
before(:each) { login_user(internal_user) } before(:each) { login_user(internal_user) }
it 'returns the internal user' do it 'returns the internal user' do

View File

@ -1,14 +1,14 @@
require 'rails_helper' require 'rails_helper'
describe CodeOcean::FilesController do describe CodeOcean::FilesController do
let(:user) { FactoryGirl.create(:admin) } let(:user) { FactoryBot.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 #create' do describe 'POST #create' do
let(:submission) { FactoryGirl.create(:submission, user: user) } let(:submission) { FactoryBot.create(:submission, user: user) }
context 'with a valid file' do context 'with a valid file' do
let(:request) { proc { post :create, code_ocean_file: FactoryGirl.build(:file, context: submission).attributes, format: :json } } let(:request) { proc { post :create, code_ocean_file: FactoryBot.build(:file, context: submission).attributes, format: :json } }
before(:each) { request.call } before(:each) { request.call }
expect_assigns(file: CodeOcean::File) expect_assigns(file: CodeOcean::File)
@ -31,14 +31,14 @@ describe CodeOcean::FilesController do
end end
describe 'DELETE #destroy' do describe 'DELETE #destroy' do
let(:exercise) { FactoryGirl.create(:fibonacci) } let(:exercise) { FactoryBot.create(:fibonacci) }
let(:request) { proc { delete :destroy, id: exercise.files.first.id } } let(:request) { proc { delete :destroy, id: exercise.files.first.id } }
before(:each) { request.call } before(:each) { request.call }
expect_assigns(file: CodeOcean::File) expect_assigns(file: CodeOcean::File)
it 'destroys the file' do it 'destroys the file' do
FactoryGirl.create(:fibonacci) FactoryBot.create(:fibonacci)
expect { request.call }.to change(CodeOcean::File, :count).by(-1) expect { request.call }.to change(CodeOcean::File, :count).by(-1)
end end

View File

@ -1,13 +1,13 @@
require 'rails_helper' require 'rails_helper'
describe ConsumersController do describe ConsumersController do
let(:consumer) { FactoryGirl.create(:consumer) } let(:consumer) { FactoryBot.create(:consumer) }
let(:user) { FactoryGirl.create(:admin) } let(:user) { FactoryBot.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 #create' do describe 'POST #create' do
context 'with a valid consumer' do context 'with a valid consumer' do
let(:request) { proc { post :create, consumer: FactoryGirl.attributes_for(:consumer) } } let(:request) { proc { post :create, consumer: FactoryBot.attributes_for(:consumer) } }
before(:each) { request.call } before(:each) { request.call }
expect_assigns(consumer: Consumer) expect_assigns(consumer: Consumer)
@ -34,7 +34,7 @@ describe ConsumersController do
expect_assigns(consumer: Consumer) expect_assigns(consumer: Consumer)
it 'destroys the consumer' do it 'destroys the consumer' do
consumer = FactoryGirl.create(:consumer) consumer = FactoryBot.create(:consumer)
expect { delete :destroy, id: consumer.id }.to change(Consumer, :count).by(-1) expect { delete :destroy, id: consumer.id }.to change(Consumer, :count).by(-1)
end end
@ -50,7 +50,7 @@ describe ConsumersController do
end end
describe 'GET #index' do describe 'GET #index' do
let!(:consumers) { FactoryGirl.create_pair(:consumer) } let!(:consumers) { FactoryBot.create_pair(:consumer) }
before(:each) { get :index } before(:each) { get :index }
expect_assigns(consumers: Consumer.all) expect_assigns(consumers: Consumer.all)
@ -76,7 +76,7 @@ describe ConsumersController do
describe 'PUT #update' do describe 'PUT #update' do
context 'with a valid consumer' do context 'with a valid consumer' do
before(:each) { put :update, consumer: FactoryGirl.attributes_for(:consumer), id: consumer.id } before(:each) { put :update, consumer: FactoryBot.attributes_for(:consumer), id: consumer.id }
expect_assigns(consumer: Consumer) expect_assigns(consumer: Consumer)
expect_redirect(:consumer) expect_redirect(:consumer)

View File

@ -1,15 +1,15 @@
require 'rails_helper' require 'rails_helper'
describe ExecutionEnvironmentsController do describe ExecutionEnvironmentsController do
let(:execution_environment) { FactoryGirl.create(:ruby) } let(:execution_environment) { FactoryBot.create(:ruby) }
let(:user) { FactoryGirl.create(:admin) } let(:user) { FactoryBot.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 #create' do describe 'POST #create' do
before(:each) { expect(DockerClient).to receive(:image_tags).at_least(:once).and_return([]) } before(:each) { expect(DockerClient).to receive(:image_tags).at_least(:once).and_return([]) }
context 'with a valid execution environment' do context 'with a valid execution environment' do
let(:request) { proc { post :create, execution_environment: FactoryGirl.attributes_for(:ruby) } } let(:request) { proc { post :create, execution_environment: FactoryBot.attributes_for(:ruby) } }
before(:each) { request.call } before(:each) { request.call }
expect_assigns(docker_images: Array) expect_assigns(docker_images: Array)
@ -37,7 +37,7 @@ describe ExecutionEnvironmentsController do
expect_assigns(execution_environment: :execution_environment) expect_assigns(execution_environment: :execution_environment)
it 'destroys the execution environment' do it 'destroys the execution environment' do
execution_environment = FactoryGirl.create(:ruby) execution_environment = FactoryBot.create(:ruby)
expect { delete :destroy, id: execution_environment.id }.to change(ExecutionEnvironment, :count).by(-1) expect { delete :destroy, id: execution_environment.id }.to change(ExecutionEnvironment, :count).by(-1)
end end
@ -72,7 +72,7 @@ describe ExecutionEnvironmentsController do
end end
describe 'GET #index' do describe 'GET #index' do
before(:all) { FactoryGirl.create_pair(:ruby) } before(:all) { FactoryBot.create_pair(:ruby) }
before(:each) { get :index } before(:each) { get :index }
expect_assigns(execution_environments: ExecutionEnvironment.all) expect_assigns(execution_environments: ExecutionEnvironment.all)
@ -150,7 +150,7 @@ describe ExecutionEnvironmentsController do
context 'with a valid execution environment' do context 'with a valid execution environment' do
before(:each) do before(:each) do
expect(DockerClient).to receive(:image_tags).at_least(:once).and_return([]) expect(DockerClient).to receive(:image_tags).at_least(:once).and_return([])
put :update, execution_environment: FactoryGirl.attributes_for(:ruby), id: execution_environment.id put :update, execution_environment: FactoryBot.attributes_for(:ruby), id: execution_environment.id
end end
expect_assigns(docker_images: Array) expect_assigns(docker_images: Array)

View File

@ -1,8 +1,8 @@
require 'rails_helper' require 'rails_helper'
describe ExercisesController do describe ExercisesController do
let(:exercise) { FactoryGirl.create(:dummy) } let(:exercise) { FactoryBot.create(:dummy) }
let(:user) { FactoryGirl.create(:admin) } let(:user) { FactoryBot.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 'PUT #batch_update' do describe 'PUT #batch_update' do
@ -52,7 +52,7 @@ describe ExercisesController do
end end
describe 'POST #create' do describe 'POST #create' do
let(:exercise_attributes) { FactoryGirl.build(:dummy).attributes } let(:exercise_attributes) { FactoryBot.build(:dummy).attributes }
context 'with a valid exercise' do context 'with a valid exercise' do
let(:request) { proc { post :create, exercise: exercise_attributes } } let(:request) { proc { post :create, exercise: exercise_attributes } }
@ -71,7 +71,7 @@ describe ExercisesController do
let(:request) { proc { post :create, exercise: exercise_attributes.merge(files_attributes: files_attributes) } } let(:request) { proc { post :create, exercise: exercise_attributes.merge(files_attributes: files_attributes) } }
context 'when specifying the file content within the form' do context 'when specifying the file content within the form' do
let(:files_attributes) { {'0' => FactoryGirl.build(:file).attributes} } let(:files_attributes) { {'0' => FactoryBot.build(:file).attributes} }
it 'creates the file' do it 'creates the file' do
expect { request.call }.to change(CodeOcean::File, :count) expect { request.call }.to change(CodeOcean::File, :count)
@ -79,11 +79,11 @@ describe ExercisesController do
end end
context 'when uploading a file' do context 'when uploading a file' do
let(:files_attributes) { {'0' => FactoryGirl.build(:file, file_type: file_type).attributes.merge(content: uploaded_file)} } let(:files_attributes) { {'0' => FactoryBot.build(:file, file_type: file_type).attributes.merge(content: uploaded_file)} }
context 'when uploading a binary file' do context 'when uploading a binary file' do
let(:file_path) { Rails.root.join('db', 'seeds', 'audio_video', 'devstories.mp4') } let(:file_path) { Rails.root.join('db', 'seeds', 'audio_video', 'devstories.mp4') }
let(:file_type) { FactoryGirl.create(:dot_mp4) } let(:file_type) { FactoryBot.create(:dot_mp4) }
let(:uploaded_file) { Rack::Test::UploadedFile.new(file_path, 'video/mp4', true) } let(:uploaded_file) { Rack::Test::UploadedFile.new(file_path, 'video/mp4', true) }
it 'creates the file' do it 'creates the file' do
@ -98,7 +98,7 @@ describe ExercisesController do
context 'when uploading a non-binary file' do context 'when uploading a non-binary file' do
let(:file_path) { Rails.root.join('db', 'seeds', 'fibonacci', 'exercise.rb') } let(:file_path) { Rails.root.join('db', 'seeds', 'fibonacci', 'exercise.rb') }
let(:file_type) { FactoryGirl.create(:dot_rb) } let(:file_type) { FactoryBot.create(:dot_rb) }
let(:uploaded_file) { Rack::Test::UploadedFile.new(file_path, 'text/x-ruby', false) } let(:uploaded_file) { Rack::Test::UploadedFile.new(file_path, 'text/x-ruby', false) }
it 'creates the file' do it 'creates the file' do
@ -128,7 +128,7 @@ describe ExercisesController do
expect_assigns(exercise: :exercise) expect_assigns(exercise: :exercise)
it 'destroys the exercise' do it 'destroys the exercise' do
exercise = FactoryGirl.create(:dummy) exercise = FactoryBot.create(:dummy)
expect { delete :destroy, id: exercise.id }.to change(Exercise, :count).by(-1) expect { delete :destroy, id: exercise.id }.to change(Exercise, :count).by(-1)
end end
@ -147,13 +147,13 @@ describe ExercisesController do
let(:request) { proc { get :implement, id: exercise.id } } let(:request) { proc { get :implement, id: exercise.id } }
context 'with an exercise with visible files' do context 'with an exercise with visible files' do
let(:exercise) { FactoryGirl.create(:fibonacci) } let(:exercise) { FactoryBot.create(:fibonacci) }
before(:each) { request.call } before(:each) { request.call }
expect_assigns(exercise: :exercise) expect_assigns(exercise: :exercise)
context 'with an existing submission' do context 'with an existing submission' do
let!(:submission) { FactoryGirl.create(:submission, exercise_id: exercise.id, user_id: user.id, user_type: user.class.name) } let!(:submission) { FactoryBot.create(:submission, exercise_id: exercise.id, user_id: user.id, user_type: user.class.name) }
it "populates the editors with the submission's files' content" do it "populates the editors with the submission's files' content" do
request.call request.call
@ -182,7 +182,7 @@ describe ExercisesController do
describe 'GET #index' do describe 'GET #index' do
let(:scope) { Pundit.policy_scope!(user, Exercise) } let(:scope) { Pundit.policy_scope!(user, Exercise) }
before(:all) { FactoryGirl.create_pair(:dummy) } before(:all) { FactoryBot.create_pair(:dummy) }
before(:each) { get :index } before(:each) { get :index }
expect_assigns(exercises: :scope) expect_assigns(exercises: :scope)
@ -230,8 +230,8 @@ describe ExercisesController do
describe 'POST #submit' do describe 'POST #submit' do
let(:output) { {} } let(:output) { {} }
let(:request) { post :submit, format: :json, id: exercise.id, submission: {cause: 'submit', exercise_id: exercise.id} } let(:request) { post :submit, format: :json, id: exercise.id, submission: {cause: 'submit', exercise_id: exercise.id} }
let!(:external_user) { FactoryGirl.create(:external_user) } let!(:external_user) { FactoryBot.create(:external_user) }
let!(:lti_parameter) { FactoryGirl.create(:lti_parameter, external_user: external_user, exercise: exercise) } let!(:lti_parameter) { FactoryBot.create(:lti_parameter, external_user: external_user, exercise: exercise) }
before(:each) do before(:each) do
allow_any_instance_of(Submission).to receive(:normalized_score).and_return(1) allow_any_instance_of(Submission).to receive(:normalized_score).and_return(1)
@ -298,7 +298,7 @@ describe ExercisesController do
describe 'PUT #update' do describe 'PUT #update' do
context 'with a valid exercise' do context 'with a valid exercise' do
let(:exercise_attributes) { FactoryGirl.build(:dummy).attributes } let(:exercise_attributes) { FactoryBot.build(:dummy).attributes }
before(:each) { put :update, exercise: exercise_attributes, id: exercise.id } before(:each) { put :update, exercise: exercise_attributes, id: exercise.id }
expect_assigns(exercise: Exercise) expect_assigns(exercise: Exercise)

View File

@ -1,8 +1,8 @@
require 'rails_helper' require 'rails_helper'
describe ExternalUsersController do describe ExternalUsersController do
let(:user) { FactoryGirl.build(:admin) } let(:user) { FactoryBot.build(:admin) }
let!(:users) { FactoryGirl.create_pair(:external_user) } let!(:users) { FactoryBot.create_pair(:external_user) }
before(:each) { allow(controller).to receive(:current_user).and_return(user) } before(:each) { allow(controller).to receive(:current_user).and_return(user) }
describe 'GET #index' do describe 'GET #index' do

View File

@ -1,13 +1,13 @@
require 'rails_helper' require 'rails_helper'
describe FileTypesController do describe FileTypesController do
let(:file_type) { FactoryGirl.create(:dot_rb) } let(:file_type) { FactoryBot.create(:dot_rb) }
let(:user) { FactoryGirl.create(:admin) } let(:user) { FactoryBot.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 #create' do describe 'POST #create' do
context 'with a valid file type' do context 'with a valid file type' do
let(:request) { proc { post :create, file_type: FactoryGirl.attributes_for(:dot_rb) } } let(:request) { proc { post :create, file_type: FactoryBot.attributes_for(:dot_rb) } }
before(:each) { request.call } before(:each) { request.call }
expect_assigns(editor_modes: Array) expect_assigns(editor_modes: Array)
@ -36,7 +36,7 @@ describe FileTypesController do
expect_assigns(file_type: FileType) expect_assigns(file_type: FileType)
it 'destroys the file type' do it 'destroys the file type' do
file_type = FactoryGirl.create(:dot_rb) file_type = FactoryBot.create(:dot_rb)
expect { delete :destroy, id: file_type.id }.to change(FileType, :count).by(-1) expect { delete :destroy, id: file_type.id }.to change(FileType, :count).by(-1)
end end
@ -53,7 +53,7 @@ describe FileTypesController do
end end
describe 'GET #index' do describe 'GET #index' do
before(:all) { FactoryGirl.create_pair(:dot_rb) } before(:all) { FactoryBot.create_pair(:dot_rb) }
before(:each) { get :index } before(:each) { get :index }
expect_assigns(file_types: FileType.all) expect_assigns(file_types: FileType.all)
@ -80,7 +80,7 @@ describe FileTypesController do
describe 'PUT #update' do describe 'PUT #update' do
context 'with a valid file type' do context 'with a valid file type' do
before(:each) { put :update, file_type: FactoryGirl.attributes_for(:dot_rb), id: file_type.id } before(:each) { put :update, file_type: FactoryBot.attributes_for(:dot_rb), id: file_type.id }
expect_assigns(editor_modes: Array) expect_assigns(editor_modes: Array)
expect_assigns(file_type: FileType) expect_assigns(file_type: FileType)

View File

@ -1,14 +1,14 @@
require 'rails_helper' require 'rails_helper'
describe HintsController do describe HintsController do
let(:execution_environment) { FactoryGirl.create(:ruby) } let(:execution_environment) { FactoryBot.create(:ruby) }
let(:hint) { FactoryGirl.create(:ruby_syntax_error) } let(:hint) { FactoryBot.create(:ruby_syntax_error) }
let(:user) { FactoryGirl.create(:admin) } let(:user) { FactoryBot.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 #create' do describe 'POST #create' do
context 'with a valid hint' do context 'with a valid hint' do
let(:request) { proc { post :create, execution_environment_id: execution_environment.id, hint: FactoryGirl.attributes_for(:ruby_syntax_error) } } let(:request) { proc { post :create, execution_environment_id: execution_environment.id, hint: FactoryBot.attributes_for(:ruby_syntax_error) } }
before(:each) { request.call } before(:each) { request.call }
expect_assigns(execution_environment: :execution_environment) expect_assigns(execution_environment: :execution_environment)
@ -38,7 +38,7 @@ describe HintsController do
expect_assigns(hint: Hint) expect_assigns(hint: Hint)
it 'destroys the hint' do it 'destroys the hint' do
hint = FactoryGirl.create(:ruby_syntax_error) hint = FactoryBot.create(:ruby_syntax_error)
expect { delete :destroy, execution_environment_id: execution_environment.id, id: hint.id }.to change(Hint, :count).by(-1) expect { delete :destroy, execution_environment_id: execution_environment.id, id: hint.id }.to change(Hint, :count).by(-1)
end end
@ -55,7 +55,7 @@ describe HintsController do
end end
describe 'GET #index' do describe 'GET #index' do
before(:all) { FactoryGirl.create_pair(:ruby_syntax_error) } before(:all) { FactoryBot.create_pair(:ruby_syntax_error) }
before(:each) { get :index, execution_environment_id: execution_environment.id } before(:each) { get :index, execution_environment_id: execution_environment.id }
expect_assigns(execution_environment: :execution_environment) expect_assigns(execution_environment: :execution_environment)
@ -84,7 +84,7 @@ describe HintsController do
describe 'PUT #update' do describe 'PUT #update' do
context 'with a valid hint' do context 'with a valid hint' do
before(:each) { put :update, execution_environment_id: execution_environment.id, hint: FactoryGirl.attributes_for(:ruby_syntax_error), id: hint.id } before(:each) { put :update, execution_environment_id: execution_environment.id, hint: FactoryBot.attributes_for(:ruby_syntax_error), id: hint.id }
expect_assigns(execution_environment: :execution_environment) expect_assigns(execution_environment: :execution_environment)
expect_assigns(hint: Hint) expect_assigns(hint: Hint)

View File

@ -1,11 +1,11 @@
require 'rails_helper' require 'rails_helper'
describe InternalUsersController do describe InternalUsersController do
let(:user) { FactoryGirl.build(:admin) } let(:user) { FactoryBot.build(:admin) }
let!(:users) { FactoryGirl.create_pair(:teacher) } let!(:users) { FactoryBot.create_pair(:teacher) }
describe 'GET #activate' do describe 'GET #activate' do
let(:user) { InternalUser.create(FactoryGirl.attributes_for(:teacher)) } let(:user) { InternalUser.create(FactoryBot.attributes_for(:teacher)) }
before(:each) do before(:each) do
user.send(:setup_activation) user.send(:setup_activation)
@ -37,7 +37,7 @@ describe InternalUsersController do
end end
describe 'PUT #activate' do describe 'PUT #activate' do
let(:user) { InternalUser.create(FactoryGirl.attributes_for(:teacher)) } let(:user) { InternalUser.create(FactoryBot.attributes_for(:teacher)) }
let(:password) { SecureRandom.hex } let(:password) { SecureRandom.hex }
before(:each) do before(:each) do
@ -103,7 +103,7 @@ describe InternalUsersController do
before(:each) { allow(controller).to receive(:current_user).and_return(user) } before(:each) { allow(controller).to receive(:current_user).and_return(user) }
context 'with a valid internal user' do context 'with a valid internal user' do
let(:request) { proc { post :create, internal_user: FactoryGirl.attributes_for(:teacher) } } let(:request) { proc { post :create, internal_user: FactoryBot.attributes_for(:teacher) } }
before(:each) { request.call } before(:each) { request.call }
expect_assigns(user: InternalUser) expect_assigns(user: InternalUser)
@ -303,7 +303,7 @@ describe InternalUsersController do
before(:each) { allow(controller).to receive(:current_user).and_return(user) } before(:each) { allow(controller).to receive(:current_user).and_return(user) }
context 'with a valid internal user' do context 'with a valid internal user' do
before(:each) { put :update, internal_user: FactoryGirl.attributes_for(:teacher), id: users.first.id } before(:each) { put :update, internal_user: FactoryBot.attributes_for(:teacher), id: users.first.id }
expect_assigns(user: InternalUser) expect_assigns(user: InternalUser)
expect_redirect { user } expect_redirect { user }

View File

@ -1,12 +1,12 @@
require 'rails_helper' require 'rails_helper'
describe SessionsController do describe SessionsController do
let(:consumer) { FactoryGirl.create(:consumer) } let(:consumer) { FactoryBot.create(:consumer) }
describe 'POST #create' do describe 'POST #create' do
let(:password) { user_attributes[:password] } let(:password) { user_attributes[:password] }
let(:user) { InternalUser.create(user_attributes) } let(:user) { InternalUser.create(user_attributes) }
let(:user_attributes) { FactoryGirl.attributes_for(:teacher) } let(:user_attributes) { FactoryBot.attributes_for(:teacher) }
context 'with valid credentials' do context 'with valid credentials' do
before(:each) do before(:each) do
@ -27,8 +27,8 @@ describe SessionsController do
end end
describe 'POST #create_through_lti' do describe 'POST #create_through_lti' do
let(:exercise) { FactoryGirl.create(:dummy) } let(:exercise) { FactoryBot.create(:dummy) }
let(:exercise2) { FactoryGirl.create(:dummy) } let(:exercise2) { FactoryBot.create(:dummy) }
let(:nonce) { SecureRandom.hex } let(:nonce) { SecureRandom.hex }
before(:each) { I18n.locale = I18n.default_locale } before(:each) { I18n.locale = I18n.default_locale }
@ -73,7 +73,7 @@ describe SessionsController do
context 'with valid launch parameters' do context 'with valid launch parameters' do
let(:locale) { :de } let(:locale) { :de }
let(:request) { post :create_through_lti, custom_locale: locale, custom_token: exercise.token, oauth_consumer_key: consumer.oauth_key, oauth_nonce: nonce, oauth_signature: SecureRandom.hex, user_id: user.external_id } let(:request) { post :create_through_lti, custom_locale: locale, custom_token: exercise.token, oauth_consumer_key: consumer.oauth_key, oauth_nonce: nonce, oauth_signature: SecureRandom.hex, user_id: user.external_id }
let(:user) { FactoryGirl.create(:external_user, consumer_id: consumer.id) } let(:user) { FactoryBot.create(:external_user, consumer_id: consumer.id) }
before(:each) { expect_any_instance_of(IMS::LTI::ToolProvider).to receive(:valid_request?).and_return(true) } before(:each) { expect_any_instance_of(IMS::LTI::ToolProvider).to receive(:valid_request?).and_return(true) }
it 'assigns the current user' do it 'assigns the current user' do
@ -132,14 +132,14 @@ describe SessionsController do
end end
it 'redirects to recommended exercise if requested token of proxy exercise' do it 'redirects to recommended exercise if requested token of proxy exercise' do
FactoryGirl.create(:proxy_exercise, exercises: [exercise]) FactoryBot.create(:proxy_exercise, exercises: [exercise])
post :create_through_lti, custom_locale: locale, custom_token: ProxyExercise.first.token, oauth_consumer_key: consumer.oauth_key, oauth_nonce: nonce, oauth_signature: SecureRandom.hex, user_id: user.external_id post :create_through_lti, custom_locale: locale, custom_token: ProxyExercise.first.token, oauth_consumer_key: consumer.oauth_key, oauth_nonce: nonce, oauth_signature: SecureRandom.hex, user_id: user.external_id
expect(controller).to redirect_to(implement_exercise_path(exercise.id)) expect(controller).to redirect_to(implement_exercise_path(exercise.id))
end end
it 'recommends only exercises who are 1 degree more complicated than what user has seen' do it 'recommends only exercises who are 1 degree more complicated than what user has seen' do
# dummy user has no exercises finished, therefore his highest difficulty is 0 # dummy user has no exercises finished, therefore his highest difficulty is 0
FactoryGirl.create(:proxy_exercise, exercises: [exercise, exercise2]) FactoryBot.create(:proxy_exercise, exercises: [exercise, exercise2])
exercise.expected_difficulty = 3 exercise.expected_difficulty = 3
exercise.save exercise.save
exercise2.expected_difficulty = 1 exercise2.expected_difficulty = 1
@ -191,7 +191,7 @@ describe SessionsController do
describe 'GET #destroy_through_lti' do describe 'GET #destroy_through_lti' do
let(:request) { proc { get :destroy_through_lti, consumer_id: consumer.id, submission_id: submission.id } } let(:request) { proc { get :destroy_through_lti, consumer_id: consumer.id, submission_id: submission.id } }
let(:submission) { FactoryGirl.create(:submission, exercise: FactoryGirl.create(:dummy)) } let(:submission) { FactoryBot.create(:submission, exercise: FactoryGirl.create(:dummy)) }
before(:each) do before(:each) do
#Todo replace session with lti_parameter #Todo replace session with lti_parameter
@ -225,7 +225,7 @@ describe SessionsController do
context 'when a user is already logged in' do context 'when a user is already logged in' do
before(:each) do before(:each) do
expect(controller).to receive(:current_user).and_return(FactoryGirl.build(:teacher)) expect(controller).to receive(:current_user).and_return(FactoryBot.build(:teacher))
get :new get :new
end end

View File

@ -1,8 +1,8 @@
require 'rails_helper' require 'rails_helper'
describe SubmissionsController do describe SubmissionsController do
let(:submission) { FactoryGirl.create(:submission) } let(:submission) { FactoryBot.create(:submission) }
let(:user) { FactoryGirl.create(:admin) } let(:user) { FactoryBot.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 #create' do describe 'POST #create' do
@ -11,8 +11,8 @@ describe SubmissionsController do
end end
context 'with a valid submission' do context 'with a valid submission' do
let(:exercise) { FactoryGirl.create(:hello_world) } let(:exercise) { FactoryBot.create(:hello_world) }
let(:request) { proc { post :create, format: :json, submission: FactoryGirl.attributes_for(:submission, exercise_id: exercise.id) } } let(:request) { proc { post :create, format: :json, submission: FactoryBot.attributes_for(:submission, exercise_id: exercise.id) } }
before(:each) { request.call } before(:each) { request.call }
expect_assigns(submission: Submission) expect_assigns(submission: Submission)
@ -42,7 +42,7 @@ describe SubmissionsController do
end end
context 'with a valid filename' do context 'with a valid filename' do
let(:submission) { FactoryGirl.create(:submission, exercise: FactoryGirl.create(:audio_video)) } let(:submission) { FactoryBot.create(:submission, exercise: FactoryGirl.create(:audio_video)) }
before(:each) { get :download_file, filename: file.name_with_extension, id: submission.id } before(:each) { get :download_file, filename: file.name_with_extension, id: submission.id }
context 'for a binary file' do context 'for a binary file' do
@ -74,7 +74,7 @@ describe SubmissionsController do
end end
describe 'GET #index' do describe 'GET #index' do
before(:all) { FactoryGirl.create_pair(:submission) } before(:all) { FactoryBot.create_pair(:submission) }
before(:each) { get :index } before(:each) { get :index }
expect_assigns(submissions: Submission.all) expect_assigns(submissions: Submission.all)
@ -92,7 +92,7 @@ describe SubmissionsController do
end end
context 'with a valid filename' do context 'with a valid filename' do
let(:submission) { FactoryGirl.create(:submission, exercise: FactoryGirl.create(:audio_video)) } let(:submission) { FactoryBot.create(:submission, exercise: FactoryGirl.create(:audio_video)) }
before(:each) { get :render_file, filename: file.name_with_extension, id: submission.id } before(:each) { get :render_file, filename: file.name_with_extension, id: submission.id }
context 'for a binary file' do context 'for a binary file' do

View File

@ -1,7 +1,7 @@
require 'seeds_helper' require 'seeds_helper'
module CodeOcean module CodeOcean
FactoryGirl.define do FactoryBot.define do
factory :file, class: CodeOcean::File do factory :file, class: CodeOcean::File do
content '' content ''
association :context, factory: :submission association :context, factory: :submission

View File

@ -1,4 +1,4 @@
FactoryGirl.define do FactoryBot.define do
factory :consumer do factory :consumer do
name 'openHPI' name 'openHPI'
oauth_key { SecureRandom.hex } oauth_key { SecureRandom.hex }

View File

@ -1,4 +1,4 @@
FactoryGirl.define do FactoryBot.define do
factory :error, class: Error do factory :error, class: Error do
association :execution_environment, factory: :ruby association :execution_environment, factory: :ruby
message "exercise.rb:4:in `<main>': undefined local variable or method `foo' for main:Object (NameError)" message "exercise.rb:4:in `<main>': undefined local variable or method `foo' for main:Object (NameError)"

View File

@ -1,4 +1,4 @@
FactoryGirl.define do FactoryBot.define do
factory :coffee_script, class: ExecutionEnvironment do factory :coffee_script, class: ExecutionEnvironment do
created_by_teacher created_by_teacher
default_memory_limit default_memory_limit

View File

@ -2,7 +2,7 @@ require 'seeds_helper'
def create_seed_file(exercise, path, file_attributes = {}) def create_seed_file(exercise, path, file_attributes = {})
file_extension = File.extname(path) file_extension = File.extname(path)
file_type = FactoryGirl.create(file_attributes[:file_type] || :"dot_#{file_extension.gsub('.', '')}") file_type = FactoryBot.create(file_attributes[:file_type] || :"dot_#{file_extension.gsub('.', '')}")
name = File.basename(path).gsub(file_extension, '') name = File.basename(path).gsub(file_extension, '')
file_attributes.merge!(file_type: file_type, name: name, path: path.split('/')[1..-2].join('/'), role: file_attributes[:role] || 'regular_file') file_attributes.merge!(file_type: file_type, name: name, path: path.split('/')[1..-2].join('/'), role: file_attributes[:role] || 'regular_file')
if file_type.binary? if file_type.binary?
@ -13,7 +13,7 @@ def create_seed_file(exercise, path, file_attributes = {})
exercise.add_file!(file_attributes) exercise.add_file!(file_attributes)
end end
FactoryGirl.define do FactoryBot.define do
factory :audio_video, class: Exercise do factory :audio_video, class: Exercise do
created_by_teacher created_by_teacher
description "Try HTML's audio and video capabilities." description "Try HTML's audio and video capabilities."

View File

@ -1,4 +1,4 @@
FactoryGirl.define do FactoryBot.define do
factory :external_user do factory :external_user do
association :consumer association :consumer
generated_email generated_email

View File

@ -1,4 +1,4 @@
FactoryGirl.define do FactoryBot.define do
factory :dot_coffee, class: FileType do factory :dot_coffee, class: FileType do
created_by_admin created_by_admin
editor_mode 'ace/mode/coffee' editor_mode 'ace/mode/coffee'

View File

@ -1,4 +1,4 @@
FactoryGirl.define do FactoryBot.define do
factory :node_js_invalid_assignment, class: Hint do factory :node_js_invalid_assignment, class: Hint do
association :execution_environment, factory: :node_js association :execution_environment, factory: :node_js
english english

View File

@ -1,4 +1,4 @@
FactoryGirl.define do FactoryBot.define do
factory :admin, class: InternalUser do factory :admin, class: InternalUser do
activated_user activated_user
email 'admin@example.org' email 'admin@example.org'

View File

@ -1,4 +1,4 @@
FactoryGirl.define do FactoryBot.define do
LTI_PARAMETERS = { LTI_PARAMETERS = {
lis_result_sourcedid: "c2db0c7c-4411-4b27-a52b-ddfc3dc32065", lis_result_sourcedid: "c2db0c7c-4411-4b27-a52b-ddfc3dc32065",

View File

@ -1,4 +1,4 @@
FactoryGirl.define do FactoryBot.define do
factory :proxy_exercise, class: ProxyExercise do factory :proxy_exercise, class: ProxyExercise do
token 'dummytoken' token 'dummytoken'
title 'Dummy' title 'Dummy'

View File

@ -1,4 +1,4 @@
FactoryGirl.define do FactoryBot.define do
[:admin, :external_user, :teacher].each do |factory_name| [:admin, :external_user, :teacher].each do |factory_name|
trait :"created_by_#{factory_name}" do trait :"created_by_#{factory_name}" do
association :user, factory: factory_name association :user, factory: factory_name

View File

@ -1,4 +1,4 @@
FactoryGirl.define do FactoryBot.define do
factory :submission do factory :submission do
cause 'save' cause 'save'
created_by_external_user created_by_external_user

View File

@ -1,4 +1,4 @@
FactoryGirl.define do FactoryBot.define do
factory :user_exercise_feedback, class: UserExerciseFeedback do factory :user_exercise_feedback, class: UserExerciseFeedback do
created_by_external_user created_by_external_user
feedback_text 'Most suitable exercise ever' feedback_text 'Most suitable exercise ever'

View File

@ -1,8 +1,8 @@
require 'rails_helper' require 'rails_helper'
describe 'Authentication' do describe 'Authentication' do
let(:user) { FactoryGirl.create(:admin) } let(:user) { FactoryBot.create(:admin) }
let(:password) { FactoryGirl.attributes_for(:admin)[:password] } let(:password) { FactoryBot.attributes_for(:admin)[:password] }
context 'when signed out' do context 'when signed out' do
before(:each) { visit(root_path) } before(:each) { visit(root_path) }

View File

@ -2,7 +2,7 @@ require 'rails_helper'
describe 'Authorization' do describe 'Authorization' do
context 'as an admin' do context 'as an admin' do
let(:user) { FactoryGirl.create(:admin) } let(:user) { FactoryBot.create(:admin) }
before(:each) { allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(user) } before(:each) { allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(user) }
[Consumer, ExecutionEnvironment, Exercise, FileType, InternalUser].each do |model| [Consumer, ExecutionEnvironment, Exercise, FileType, InternalUser].each do |model|
@ -11,7 +11,7 @@ describe 'Authorization' do
end end
context 'as an external user' do context 'as an external user' do
let(:user) { FactoryGirl.create(:external_user) } let(:user) { FactoryBot.create(:external_user) }
before(:each) { allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(user) } before(:each) { allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(user) }
[Consumer, ExecutionEnvironment, Exercise, FileType, InternalUser].each do |model| [Consumer, ExecutionEnvironment, Exercise, FileType, InternalUser].each do |model|
@ -20,7 +20,7 @@ describe 'Authorization' do
end end
context 'as a teacher' do context 'as a teacher' do
let(:user) { FactoryGirl.create(:teacher) } let(:user) { FactoryBot.create(:teacher) }
before(:each) { allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(user) } before(:each) { allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(user) }
[Consumer, InternalUser].each do |model| [Consumer, InternalUser].each do |model|

View File

@ -1,13 +1,13 @@
require 'rails_helper' require 'rails_helper'
describe 'Editor', js: true do describe 'Editor', js: true do
let(:exercise) { FactoryGirl.create(:audio_video, instructions: Forgery(:lorem_ipsum).sentence) } let(:exercise) { FactoryBot.create(:audio_video, instructions: Forgery(:lorem_ipsum).sentence) }
let(:user) { FactoryGirl.create(:teacher) } let(:user) { FactoryBot.create(:teacher) }
before(:each) do before(:each) do
visit(sign_in_path) visit(sign_in_path)
fill_in('email', with: user.email) fill_in('email', with: user.email)
fill_in('password', with: FactoryGirl.attributes_for(:teacher)[:password]) fill_in('password', with: FactoryBot.attributes_for(:teacher)[:password])
click_button(I18n.t('sessions.new.link')) click_button(I18n.t('sessions.new.link'))
visit(implement_exercise_path(exercise)) visit(implement_exercise_path(exercise))
end end

View File

@ -2,6 +2,6 @@ require 'rails_helper'
describe 'Factories' do describe 'Factories' do
it 'are all valid', docker: true, permitted_execution_time: 30 do it 'are all valid', docker: true, permitted_execution_time: 30 do
expect { FactoryGirl.lint }.not_to raise_error expect { FactoryBot.lint }.not_to raise_error
end end
end end

View File

@ -8,7 +8,7 @@ describe Admin::DashboardHelper do
end end
describe '#docker_data' do describe '#docker_data' do
before(:each) { FactoryGirl.create(:ruby) } before(:each) { FactoryBot.create(:ruby) }
it 'contains an entry for every execution environment' do it 'contains an entry for every execution environment' do
expect(docker_data.length).to eq(ExecutionEnvironment.count) expect(docker_data.length).to eq(ExecutionEnvironment.count)

View File

@ -2,7 +2,7 @@ require 'rails_helper'
describe ExerciseHelper do describe ExerciseHelper do
describe '#embedding_parameters' do describe '#embedding_parameters' do
let(:exercise) { FactoryGirl.build(:dummy) } let(:exercise) { FactoryBot.build(:dummy) }
it 'contains the locale' do it 'contains the locale' do
expect(embedding_parameters(exercise)).to start_with("locale=#{I18n.locale}") expect(embedding_parameters(exercise)).to start_with("locale=#{I18n.locale}")

View File

@ -1,7 +1,7 @@
require 'rails_helper' require 'rails_helper'
describe Assessor do describe Assessor do
let(:assessor) { described_class.new(execution_environment: FactoryGirl.build(:ruby)) } let(:assessor) { described_class.new(execution_environment: FactoryBot.build(:ruby)) }
describe '#assess' do describe '#assess' do
let(:assess) { assessor.assess(stdout: stdout) } let(:assess) { assessor.assess(stdout: stdout) }
@ -53,7 +53,7 @@ describe Assessor do
context 'with an execution environment without a testing framework adapter' do context 'with an execution environment without a testing framework adapter' do
it 'raises an error' do it 'raises an error' do
expect { described_class.new(execution_environment: FactoryGirl.build(:ruby, testing_framework: nil)) }.to raise_error(Assessor::Error) expect { described_class.new(execution_environment: FactoryBot.build(:ruby, testing_framework: nil)) }.to raise_error(Assessor::Error)
end end
end end
end end

View File

@ -3,10 +3,10 @@ require 'seeds_helper'
describe DockerClient, docker: true do describe DockerClient, docker: true do
let(:command) { 'whoami' } let(:command) { 'whoami' }
let(:docker_client) { described_class.new(execution_environment: FactoryGirl.build(:java), user: FactoryGirl.build(:admin)) } let(:docker_client) { described_class.new(execution_environment: FactoryBot.build(:java), user: FactoryGirl.build(:admin)) }
let(:execution_environment) { FactoryGirl.build(:java) } let(:execution_environment) { FactoryBot.build(:java) }
let(:image) { double } let(:image) { double }
let(:submission) { FactoryGirl.create(:submission) } let(:submission) { FactoryBot.create(:submission) }
let(:workspace_path) { '/tmp' } let(:workspace_path) { '/tmp' }
describe '.check_availability!' do describe '.check_availability!' do
@ -146,7 +146,7 @@ describe DockerClient, docker: true do
end end
describe '#create_workspace_file' do describe '#create_workspace_file' do
let(:file) { FactoryGirl.build(:file, content: 'puts 42') } let(:file) { FactoryBot.build(:file, content: 'puts 42') }
let(:file_path) { File.join(workspace_path, file.name_with_extension) } let(:file_path) { File.join(workspace_path, file.name_with_extension) }
after(:each) { File.delete(file_path) } after(:each) { File.delete(file_path) }

View File

@ -9,7 +9,7 @@ describe DockerContainerPool do
private :reload_class private :reload_class
before(:each) do before(:each) do
@execution_environment = FactoryGirl.create(:ruby) @execution_environment = FactoryBot.create(:ruby)
reload_class reload_class
end end

View File

@ -8,7 +8,7 @@ describe FileTree do
context 'for a media file' do context 'for a media file' do
context 'for an audio file' do context 'for an audio file' do
let(:file) { FactoryGirl.build(:file, file_type: FactoryGirl.build(:dot_mp3)) } let(:file) { FactoryBot.build(:file, file_type: FactoryGirl.build(:dot_mp3)) }
it 'is an audio file icon' do it 'is an audio file icon' do
expect(file_icon).to include('fa-file-audio-o') expect(file_icon).to include('fa-file-audio-o')
@ -16,7 +16,7 @@ describe FileTree do
end end
context 'for an image file' do context 'for an image file' do
let(:file) { FactoryGirl.build(:file, file_type: FactoryGirl.build(:dot_jpg)) } let(:file) { FactoryBot.build(:file, file_type: FactoryGirl.build(:dot_jpg)) }
it 'is an image file icon' do it 'is an image file icon' do
expect(file_icon).to include('fa-file-image-o') expect(file_icon).to include('fa-file-image-o')
@ -24,7 +24,7 @@ describe FileTree do
end end
context 'for a video file' do context 'for a video file' do
let(:file) { FactoryGirl.build(:file, file_type: FactoryGirl.build(:dot_mp4)) } let(:file) { FactoryBot.build(:file, file_type: FactoryGirl.build(:dot_mp4)) }
it 'is a video file icon' do it 'is a video file icon' do
expect(file_icon).to include('fa-file-video-o') expect(file_icon).to include('fa-file-video-o')
@ -34,7 +34,7 @@ describe FileTree do
context 'for other files' do context 'for other files' do
context 'for a read-only file' do context 'for a read-only file' do
let(:file) { FactoryGirl.build(:file, read_only: true) } let(:file) { FactoryBot.build(:file, read_only: true) }
it 'is a lock icon' do it 'is a lock icon' do
expect(file_icon).to include('fa-lock') expect(file_icon).to include('fa-lock')
@ -42,7 +42,7 @@ describe FileTree do
end end
context 'for an executable file' do context 'for an executable file' do
let(:file) { FactoryGirl.build(:file, file_type: FactoryGirl.build(:dot_py)) } let(:file) { FactoryBot.build(:file, file_type: FactoryGirl.build(:dot_py)) }
it 'is a code file icon' do it 'is a code file icon' do
expect(file_icon).to include('fa-file-code-o') expect(file_icon).to include('fa-file-code-o')
@ -50,7 +50,7 @@ describe FileTree do
end end
context 'for a renderable file' do context 'for a renderable file' do
let(:file) { FactoryGirl.build(:file, file_type: FactoryGirl.build(:dot_svg)) } let(:file) { FactoryBot.build(:file, file_type: FactoryGirl.build(:dot_svg)) }
it 'is a text file icon' do it 'is a text file icon' do
expect(file_icon).to include('fa-file-text-o') expect(file_icon).to include('fa-file-text-o')
@ -58,7 +58,7 @@ describe FileTree do
end end
context 'for all other files' do context 'for all other files' do
let(:file) { FactoryGirl.build(:file, file_type: FactoryGirl.build(:dot_md)) } let(:file) { FactoryBot.build(:file, file_type: FactoryGirl.build(:dot_md)) }
it 'is a generic file icon' do it 'is a generic file icon' do
expect(file_icon).to include('fa-file-o') expect(file_icon).to include('fa-file-o')
@ -75,7 +75,7 @@ describe FileTree do
describe '#initialize' do describe '#initialize' do
let(:file_tree) { described_class.new(files) } let(:file_tree) { described_class.new(files) }
let(:files) { FactoryGirl.build_list(:file, 10, context: nil, path: 'foo/bar/baz') } let(:files) { FactoryBot.build_list(:file, 10, context: nil, path: 'foo/bar/baz') }
it 'creates a root node' do it 'creates a root node' do
expect_any_instance_of(Tree::TreeNode).to receive(:initialize).with(file_tree.send(:root_label)) expect_any_instance_of(Tree::TreeNode).to receive(:initialize).with(file_tree.send(:root_label))
@ -92,7 +92,7 @@ describe FileTree do
end end
describe '#map_to_js_tree' do describe '#map_to_js_tree' do
let(:file) { FactoryGirl.build(:file) } let(:file) { FactoryBot.build(:file) }
let(:js_tree) { file_tree.send(:map_to_js_tree, node) } let(:js_tree) { file_tree.send(:map_to_js_tree, node) }
let!(:leaf) { root.add(Tree::TreeNode.new('', file)) } let!(:leaf) { root.add(Tree::TreeNode.new('', file)) }
let(:root) { Tree::TreeNode.new('', file) } let(:root) { Tree::TreeNode.new('', file) }

View File

@ -1,7 +1,7 @@
require 'rails_helper' require 'rails_helper'
describe Whistleblower do describe Whistleblower do
let(:hint) { FactoryGirl.create(:ruby_no_method_error) } let(:hint) { FactoryBot.create(:ruby_no_method_error) }
let(:stderr) { "undefined method `foo' for main:Object (NoMethodError)" } let(:stderr) { "undefined method `foo' for main:Object (NoMethodError)" }
let(:whistleblower) { described_class.new(execution_environment: hint.execution_environment) } let(:whistleblower) { described_class.new(execution_environment: hint.execution_environment) }

View File

@ -1,7 +1,7 @@
require 'rails_helper' require 'rails_helper'
describe UserMailer do describe UserMailer do
let(:user) { InternalUser.create(FactoryGirl.attributes_for(:teacher)) } let(:user) { InternalUser.create(FactoryBot.attributes_for(:teacher)) }
describe '#activation_needed_email' do describe '#activation_needed_email' do
let(:mail) { described_class.activation_needed_email(user) } let(:mail) { described_class.activation_needed_email(user) }

View File

@ -12,7 +12,7 @@ describe Consumer do
end end
it 'validates the uniqueness of the OAuth key' do it 'validates the uniqueness of the OAuth key' do
consumer.update(oauth_key: FactoryGirl.create(:consumer).oauth_key) consumer.update(oauth_key: FactoryBot.create(:consumer).oauth_key)
expect(consumer.errors[:oauth_key]).to be_present expect(consumer.errors[:oauth_key]).to be_present
end end

View File

@ -6,7 +6,7 @@ describe ExecutionEnvironment do
it 'validates that the Docker image works', docker: true do it 'validates that the Docker image works', docker: true do
expect(execution_environment).to receive(:validate_docker_image?).and_return(true) expect(execution_environment).to receive(:validate_docker_image?).and_return(true)
expect(execution_environment).to receive(:working_docker_image?) expect(execution_environment).to receive(:working_docker_image?)
execution_environment.update(docker_image: FactoryGirl.attributes_for(:ruby)[:docker_image]) execution_environment.update(docker_image: FactoryBot.attributes_for(:ruby)[:docker_image])
end end
it 'validates the presence of a Docker image name' do it 'validates the presence of a Docker image name' do
@ -69,7 +69,7 @@ describe ExecutionEnvironment do
describe '#valid_test_setup?' do describe '#valid_test_setup?' do
context 'with a test command and a testing framework' do context 'with a test command and a testing framework' do
before(:each) { execution_environment.update(test_command: FactoryGirl.attributes_for(:ruby)[:test_command], testing_framework: FactoryGirl.attributes_for(:ruby)[:testing_framework]) } before(:each) { execution_environment.update(test_command: FactoryBot.attributes_for(:ruby)[:test_command], testing_framework: FactoryGirl.attributes_for(:ruby)[:testing_framework]) }
it 'is valid' do it 'is valid' do
expect(execution_environment.errors[:test_command]).to be_blank expect(execution_environment.errors[:test_command]).to be_blank
@ -77,7 +77,7 @@ describe ExecutionEnvironment do
end end
context 'with a test command but no testing framework' do context 'with a test command but no testing framework' do
before(:each) { execution_environment.update(test_command: FactoryGirl.attributes_for(:ruby)[:test_command], testing_framework: nil) } before(:each) { execution_environment.update(test_command: FactoryBot.attributes_for(:ruby)[:test_command], testing_framework: nil) }
it 'is invalid' do it 'is invalid' do
expect(execution_environment.errors[:test_command]).to be_present expect(execution_environment.errors[:test_command]).to be_present
@ -85,7 +85,7 @@ describe ExecutionEnvironment do
end end
context 'with no test command but a testing framework' do context 'with no test command but a testing framework' do
before(:each) { execution_environment.update(test_command: nil, testing_framework: FactoryGirl.attributes_for(:ruby)[:testing_framework]) } before(:each) { execution_environment.update(test_command: nil, testing_framework: FactoryBot.attributes_for(:ruby)[:testing_framework]) }
it 'is invalid' do it 'is invalid' do
expect(execution_environment.errors[:test_command]).to be_present expect(execution_environment.errors[:test_command]).to be_present
@ -113,7 +113,7 @@ describe ExecutionEnvironment do
end end
it 'is true otherwise' do it 'is true otherwise' do
execution_environment.docker_image = FactoryGirl.attributes_for(:ruby)[:docker_image] execution_environment.docker_image = FactoryBot.attributes_for(:ruby)[:docker_image]
allow(Rails.env).to receive(:test?).and_return(false) allow(Rails.env).to receive(:test?).and_return(false)
expect(execution_environment.send(:validate_docker_image?)).to be true expect(execution_environment.send(:validate_docker_image?)).to be true
end end

View File

@ -2,17 +2,17 @@ require 'rails_helper'
describe Exercise do describe Exercise do
let(:exercise) { described_class.create.tap { |exercise| exercise.update(public: nil, token: nil) } } let(:exercise) { described_class.create.tap { |exercise| exercise.update(public: nil, token: nil) } }
let(:users) { FactoryGirl.create_list(:external_user, 10) } let(:users) { FactoryBot.create_list(:external_user, 10) }
def create_submissions def create_submissions
10.times do 10.times do
FactoryGirl.create(:submission, cause: 'submit', exercise: exercise, score: Forgery(:basic).number, user: users.sample) FactoryBot.create(:submission, cause: 'submit', exercise: exercise, score: Forgery(:basic).number, user: users.sample)
end end
end end
it 'validates the number of main files' do it 'validates the number of main files' do
exercise = FactoryGirl.create(:dummy) exercise = FactoryBot.create(:dummy)
exercise.files += FactoryGirl.create_pair(:file) exercise.files += FactoryBot.create_pair(:file)
expect(exercise).to receive(:valid_main_file?).and_call_original expect(exercise).to receive(:valid_main_file?).and_call_original
exercise.save exercise.save
expect(exercise.errors[:files]).to be_present expect(exercise.errors[:files]).to be_present
@ -46,7 +46,7 @@ describe Exercise do
end end
describe '#average_percentage' do describe '#average_percentage' do
let(:exercise) { FactoryGirl.create(:fibonacci) } let(:exercise) { FactoryBot.create(:fibonacci) }
context 'without submissions' do context 'without submissions' do
it 'returns nil' do it 'returns nil' do
@ -65,7 +65,7 @@ describe Exercise do
end end
describe '#average_score' do describe '#average_score' do
let(:exercise) { FactoryGirl.create(:fibonacci) } let(:exercise) { FactoryBot.create(:fibonacci) }
context 'without submissions' do context 'without submissions' do
it 'returns nil' do it 'returns nil' do
@ -84,7 +84,7 @@ describe Exercise do
end end
describe '#duplicate' do describe '#duplicate' do
let(:exercise) { FactoryGirl.create(:fibonacci) } let(:exercise) { FactoryBot.create(:fibonacci) }
after(:each) { exercise.duplicate } after(:each) { exercise.duplicate }
it 'duplicates the exercise' do it 'duplicates the exercise' do

View File

@ -13,7 +13,7 @@ describe ExternalUser do
describe '#admin?' do describe '#admin?' do
it 'is false' do it 'is false' do
expect(FactoryGirl.build(:external_user).admin?).to be false expect(FactoryBot.build(:external_user).admin?).to be false
end end
end end
@ -31,7 +31,7 @@ describe ExternalUser do
describe '#teacher?' do describe '#teacher?' do
it 'is false' do it 'is false' do
expect(FactoryGirl.build(:external_user).teacher?).to be false expect(FactoryBot.build(:external_user).teacher?).to be false
end end
end end
end end

View File

@ -9,12 +9,12 @@ describe InternalUser do
end end
it 'validates the uniqueness of the email address' do it 'validates the uniqueness of the email address' do
user.update(email: FactoryGirl.create(:admin).email) user.update(email: FactoryBot.create(:admin).email)
expect(user.errors[:email]).to be_present expect(user.errors[:email]).to be_present
end end
context 'when not activated' do context 'when not activated' do
let(:user) { FactoryGirl.create(:teacher) } let(:user) { FactoryBot.create(:teacher) }
before(:each) do before(:each) do
user.send(:setup_activation) user.send(:setup_activation)
@ -33,7 +33,7 @@ describe InternalUser do
end end
context 'with a pending password reset' do context 'with a pending password reset' do
let(:user) { FactoryGirl.create(:teacher) } let(:user) { FactoryBot.create(:teacher) }
before(:each) { user.deliver_reset_password_instructions! } before(:each) { user.deliver_reset_password_instructions! }
it 'validates the confirmation of the password' do it 'validates the confirmation of the password' do
@ -48,7 +48,7 @@ describe InternalUser do
end end
context 'when complete' do context 'when complete' do
let(:user) { FactoryGirl.create(:teacher, activation_state: 'active') } let(:user) { FactoryBot.create(:teacher, activation_state: 'active') }
it 'does not validate the confirmation of the password' do it 'does not validate the confirmation of the password' do
user.update(password: password, password_confirmation: '') user.update(password: password, password_confirmation: '')
@ -71,8 +71,8 @@ describe InternalUser do
describe '#admin?' do describe '#admin?' do
it 'is only true for admins' do it 'is only true for admins' do
expect(FactoryGirl.build(:admin).admin?).to be true expect(FactoryBot.build(:admin).admin?).to be true
expect(FactoryGirl.build(:teacher).admin?).to be false expect(FactoryBot.build(:teacher).admin?).to be false
end end
end end
@ -90,8 +90,8 @@ describe InternalUser do
describe '#teacher?' do describe '#teacher?' do
it 'is only true for teachers' do it 'is only true for teachers' do
expect(FactoryGirl.build(:admin).teacher?).to be false expect(FactoryBot.build(:admin).teacher?).to be false
expect(FactoryGirl.build(:teacher).teacher?).to be true expect(FactoryBot.build(:teacher).teacher?).to be true
end end
end end
end end

View File

@ -1,7 +1,7 @@
require 'rails_helper' require 'rails_helper'
describe Submission do describe Submission do
let(:submission) { FactoryGirl.create(:submission, exercise: FactoryGirl.create(:dummy)) } let(:submission) { FactoryBot.create(:submission, exercise: FactoryGirl.create(:dummy)) }
it 'validates the presence of a cause' do it 'validates the presence of a cause' do
expect(described_class.create.errors[:cause]).to be_present expect(described_class.create.errors[:cause]).to be_present
@ -17,7 +17,7 @@ describe Submission do
end end
describe '#main_file' do describe '#main_file' do
let(:submission) { FactoryGirl.create(:submission) } let(:submission) { FactoryBot.create(:submission) }
it "returns the submission's main file" do it "returns the submission's main file" do
expect(submission.main_file).to be_a(CodeOcean::File) expect(submission.main_file).to be_a(CodeOcean::File)
@ -27,7 +27,7 @@ describe Submission do
describe '#normalized_score' do describe '#normalized_score' do
context 'with a score' do context 'with a score' do
let(:submission) { FactoryGirl.create(:submission) } let(:submission) { FactoryBot.create(:submission) }
before(:each) { submission.score = submission.exercise.maximum_score / 2 } before(:each) { submission.score = submission.exercise.maximum_score / 2 }
it 'returns the score as a value between 0 and 1' do it 'returns the score as a value between 0 and 1' do
@ -46,7 +46,7 @@ describe Submission do
describe '#percentage' do describe '#percentage' do
context 'with a score' do context 'with a score' do
let(:submission) { FactoryGirl.create(:submission) } let(:submission) { FactoryBot.create(:submission) }
before(:each) { submission.score = submission.exercise.maximum_score / 2 } before(:each) { submission.score = submission.exercise.maximum_score / 2 }
it 'returns the score expressed as a percentage' do it 'returns the score expressed as a percentage' do
@ -65,11 +65,11 @@ describe Submission do
describe '#siblings' do describe '#siblings' do
let(:siblings) { described_class.find_by(user: user).siblings } let(:siblings) { described_class.find_by(user: user).siblings }
let(:user) { FactoryGirl.create(:external_user) } let(:user) { FactoryBot.create(:external_user) }
before(:each) do before(:each) do
10.times.each_with_index do |_, index| 10.times.each_with_index do |_, index|
FactoryGirl.create(:submission, exercise: submission.exercise, user: (index.even? ? user : FactoryGirl.create(:external_user))) FactoryBot.create(:submission, exercise: submission.exercise, user: (index.even? ? user : FactoryGirl.create(:external_user)))
end end
end end
@ -89,9 +89,9 @@ describe Submission do
describe '#redirect_to_feedback?' do describe '#redirect_to_feedback?' do
context 'with no exercise feedback' do context 'with no exercise feedback' do
let(:exercise) {FactoryGirl.create(:dummy)} let(:exercise) {FactoryBot.create(:dummy)}
let(:user) {FactoryGirl.build(:external_user, id: (11 - exercise.created_at.to_i % 10) % 10)} let(:user) {FactoryBot.build(:external_user, id: (11 - exercise.created_at.to_i % 10) % 10)}
let(:submission) {FactoryGirl.build(:submission, exercise: exercise, user: user)} let(:submission) {FactoryBot.build(:submission, exercise: exercise, user: user)}
it 'sends 10% of users to feedback page' do it 'sends 10% of users to feedback page' do
expect(submission.send(:redirect_to_feedback?)).to be_truthy expect(submission.send(:redirect_to_feedback?)).to be_truthy
@ -99,16 +99,16 @@ describe Submission do
it 'does not redirect other users' do it 'does not redirect other users' do
9.times do |i| 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)) submission = FactoryBot.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 expect(submission.send(:redirect_to_feedback?)).to be_falsey
end end
end end
end end
context 'with little exercise feedback' do context 'with little exercise feedback' do
let(:exercise) {FactoryGirl.create(:dummy_with_user_feedbacks)} let(:exercise) {FactoryBot.create(:dummy_with_user_feedbacks)}
let(:user) {FactoryGirl.build(:external_user, id: (11 - exercise.created_at.to_i % 10) % 10)} let(:user) {FactoryBot.build(:external_user, id: (11 - exercise.created_at.to_i % 10) % 10)}
let(:submission) {FactoryGirl.build(:submission, exercise: exercise, user: user)} let(:submission) {FactoryBot.build(:submission, exercise: exercise, user: user)}
it 'sends 10% of users to feedback page' do it 'sends 10% of users to feedback page' do
expect(submission.send(:redirect_to_feedback?)).to be_truthy expect(submission.send(:redirect_to_feedback?)).to be_truthy
@ -116,19 +116,19 @@ describe Submission do
it 'does not redirect other users' do it 'does not redirect other users' do
9.times do |i| 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)) submission = FactoryBot.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 expect(submission.send(:redirect_to_feedback?)).to be_falsey
end end
end end
end end
context 'with enough exercise feedback' do context 'with enough exercise feedback' do
let(:exercise) {FactoryGirl.create(:dummy_with_user_feedbacks, user_feedbacks_count: 42)} let(:exercise) {FactoryBot.create(:dummy_with_user_feedbacks, user_feedbacks_count: 42)}
let(:user) {FactoryGirl.create(:external_user)} let(:user) {FactoryBot.create(:external_user)}
it 'sends nobody to feedback page' do it 'sends nobody to feedback page' do
30.times do |i| 30.times do |i|
submission = FactoryGirl.create(:submission, exercise: exercise, user: FactoryGirl.create(:external_user)) submission = FactoryBot.create(:submission, exercise: exercise, user: FactoryGirl.create(:external_user))
expect(submission.send(:redirect_to_feedback?)).to be_falsey expect(submission.send(:redirect_to_feedback?)).to be_falsey
end end
end end

View File

@ -5,15 +5,15 @@ describe Admin::DashboardPolicy do
permissions :show? do permissions :show? do
it 'grants access to admins' do it 'grants access to admins' do
expect(subject).to permit(FactoryGirl.build(:admin), :dashboard) expect(subject).to permit(FactoryBot.build(:admin), :dashboard)
end end
it 'does not grant access to teachers' do it 'does not grant access to teachers' do
expect(subject).not_to permit(FactoryGirl.build(:teacher), :dashboard) expect(subject).not_to permit(FactoryBot.build(:teacher), :dashboard)
end end
it 'does not grant access to external users' do it 'does not grant access to external users' do
expect(subject).not_to permit(FactoryGirl.build(:external_user), :dashboard) expect(subject).not_to permit(FactoryBot.build(:external_user), :dashboard)
end end
end end
end end

View File

@ -3,15 +3,15 @@ require 'rails_helper'
describe CodeOcean::FilePolicy do describe CodeOcean::FilePolicy do
subject { described_class } subject { described_class }
let(:exercise) { FactoryGirl.create(:fibonacci) } let(:exercise) { FactoryBot.create(:fibonacci) }
let(:submission) { FactoryGirl.create(:submission) } let(:submission) { FactoryBot.create(:submission) }
permissions :create? do permissions :create? do
context 'as part of an exercise' do context 'as part of an exercise' do
let(:file) { exercise.files.first } let(:file) { exercise.files.first }
it 'grants access to admins' do it 'grants access to admins' do
expect(subject).to permit(FactoryGirl.build(:admin), file) expect(subject).to permit(FactoryBot.build(:admin), file)
end end
it 'grants access to authors' do it 'grants access to authors' do
@ -20,7 +20,7 @@ describe CodeOcean::FilePolicy do
it 'does not grant access to all other users' do it 'does not grant access to all other users' do
[:external_user, :teacher].each do |factory_name| [:external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), file) expect(subject).not_to permit(FactoryBot.build(factory_name), file)
end end
end end
end end
@ -34,7 +34,7 @@ describe CodeOcean::FilePolicy do
it 'does not grant access to all other users' do it 'does not grant access to all other users' do
[:admin, :external_user, :teacher].each do |factory_name| [:admin, :external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), file) expect(subject).not_to permit(FactoryBot.build(factory_name), file)
end end
end end
end end
@ -45,7 +45,7 @@ describe CodeOcean::FilePolicy do
let(:file) { exercise.files.first } let(:file) { exercise.files.first }
it 'grants access to admins' do it 'grants access to admins' do
expect(subject).to permit(FactoryGirl.build(:admin), file) expect(subject).to permit(FactoryBot.build(:admin), file)
end end
it 'grants access to authors' do it 'grants access to authors' do
@ -54,7 +54,7 @@ describe CodeOcean::FilePolicy do
it 'does not grant access to all other users' do it 'does not grant access to all other users' do
[:external_user, :teacher].each do |factory_name| [:external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), file) expect(subject).not_to permit(FactoryBot.build(factory_name), file)
end end
end end
end end
@ -64,7 +64,7 @@ describe CodeOcean::FilePolicy do
it 'does not grant access to anyone' do it 'does not grant access to anyone' do
[:admin, :external_user, :teacher].each do |factory_name| [:admin, :external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), file) expect(subject).not_to permit(FactoryBot.build(factory_name), file)
end end
end end
end end

View File

@ -6,9 +6,9 @@ describe ConsumerPolicy do
[:create?, :destroy?, :edit?, :index?, :new?, :show?, :update?].each do |action| [:create?, :destroy?, :edit?, :index?, :new?, :show?, :update?].each do |action|
permissions(action) do permissions(action) do
it 'grants access to admins only' do it 'grants access to admins only' do
expect(subject).to permit(FactoryGirl.build(:admin), Consumer.new) expect(subject).to permit(FactoryBot.build(:admin), Consumer.new)
[:external_user, :teacher].each do |factory_name| [:external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), Consumer.new) expect(subject).not_to permit(FactoryBot.build(factory_name), Consumer.new)
end end
end end
end end

View File

@ -3,20 +3,20 @@ require 'rails_helper'
describe ErrorPolicy do describe ErrorPolicy do
subject { described_class } subject { described_class }
let(:error) { FactoryGirl.build(:error) } let(:error) { FactoryBot.build(:error) }
[:create?, :index?, :new?].each do |action| [:create?, :index?, :new?].each do |action|
permissions(action) do permissions(action) do
it 'grants access to admins' do it 'grants access to admins' do
expect(subject).to permit(FactoryGirl.build(:admin), error) expect(subject).to permit(FactoryBot.build(:admin), error)
end end
it 'grants access to teachers' do it 'grants access to teachers' do
expect(subject).to permit(FactoryGirl.build(:teacher), error) expect(subject).to permit(FactoryBot.build(:teacher), error)
end end
it 'does not grant access to external users' do it 'does not grant access to external users' do
expect(subject).not_to permit(FactoryGirl.build(:external_user), error) expect(subject).not_to permit(FactoryBot.build(:external_user), error)
end end
end end
end end
@ -24,7 +24,7 @@ describe ErrorPolicy do
[:destroy?, :edit?, :show?, :update?].each do |action| [:destroy?, :edit?, :show?, :update?].each do |action|
permissions(action) do permissions(action) do
it 'grants access to admins' do it 'grants access to admins' do
expect(subject).to permit(FactoryGirl.build(:admin), error) expect(subject).to permit(FactoryBot.build(:admin), error)
end end
it 'grants access to authors' do it 'grants access to authors' do
@ -33,7 +33,7 @@ describe ErrorPolicy do
it 'does not grant access to all other users' do it 'does not grant access to all other users' do
[:external_user, :teacher].each do |factory_name| [:external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), error) expect(subject).not_to permit(FactoryBot.build(factory_name), error)
end end
end end
end end

View File

@ -3,20 +3,20 @@ require 'rails_helper'
describe ExecutionEnvironmentPolicy do describe ExecutionEnvironmentPolicy do
subject { described_class } subject { described_class }
let(:execution_environment) { FactoryGirl.build(:ruby) } let(:execution_environment) { FactoryBot.build(:ruby) }
[:create?, :index?, :new?].each do |action| [:create?, :index?, :new?].each do |action|
permissions(action) do permissions(action) do
it 'grants access to admins' do it 'grants access to admins' do
expect(subject).to permit(FactoryGirl.build(:admin), execution_environment) expect(subject).to permit(FactoryBot.build(:admin), execution_environment)
end end
it 'grants access to teachers' do it 'grants access to teachers' do
expect(subject).to permit(FactoryGirl.build(:teacher), execution_environment) expect(subject).to permit(FactoryBot.build(:teacher), execution_environment)
end end
it 'does not grant access to external users' do it 'does not grant access to external users' do
expect(subject).not_to permit(FactoryGirl.build(:external_user), execution_environment) expect(subject).not_to permit(FactoryBot.build(:external_user), execution_environment)
end end
end end
end end
@ -24,7 +24,7 @@ describe ExecutionEnvironmentPolicy do
[:execute_command?, :shell?, :statistics?].each do |action| [:execute_command?, :shell?, :statistics?].each do |action|
permissions(action) do permissions(action) do
it 'grants access to admins' do it 'grants access to admins' do
expect(subject).to permit(FactoryGirl.build(:admin), execution_environment) expect(subject).to permit(FactoryBot.build(:admin), execution_environment)
end end
it 'grants access to authors' do it 'grants access to authors' do
@ -33,7 +33,7 @@ describe ExecutionEnvironmentPolicy do
it 'does not grant access to all other users' do it 'does not grant access to all other users' do
[:external_user, :teacher].each do |factory_name| [:external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), execution_environment) expect(subject).not_to permit(FactoryBot.build(factory_name), execution_environment)
end end
end end
end end
@ -42,7 +42,7 @@ describe ExecutionEnvironmentPolicy do
[:destroy?, :edit?, :show?, :update?].each do |action| [:destroy?, :edit?, :show?, :update?].each do |action|
permissions(action) do permissions(action) do
it 'grants access to admins' do it 'grants access to admins' do
expect(subject).to permit(FactoryGirl.build(:admin), execution_environment) expect(subject).to permit(FactoryBot.build(:admin), execution_environment)
end end
it 'does not grant access to authors' do it 'does not grant access to authors' do
@ -51,7 +51,7 @@ describe ExecutionEnvironmentPolicy do
it 'does not grant access to all other users' do it 'does not grant access to all other users' do
[:external_user, :teacher].each do |factory_name| [:external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), execution_environment) expect(subject).not_to permit(FactoryBot.build(factory_name), execution_environment)
end end
end end
end end

View File

@ -3,13 +3,13 @@ require 'rails_helper'
describe ExercisePolicy do describe ExercisePolicy do
subject { described_class } subject { described_class }
let(:exercise) { FactoryGirl.build(:dummy) } let(:exercise) { FactoryBot.build(:dummy) }
permissions :batch_update? do permissions :batch_update? do
it 'grants access to admins only' do it 'grants access to admins only' do
expect(subject).to permit(FactoryGirl.build(:admin), exercise) expect(subject).to permit(FactoryBot.build(:admin), exercise)
[:external_user, :teacher].each do |factory_name| [:external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), exercise) expect(subject).not_to permit(FactoryBot.build(factory_name), exercise)
end end
end end
end end
@ -17,15 +17,15 @@ let(:exercise) { FactoryGirl.build(:dummy) }
[:create?, :index?, :new?].each do |action| [:create?, :index?, :new?].each do |action|
permissions(action) do permissions(action) do
it 'grants access to admins' do it 'grants access to admins' do
expect(subject).to permit(FactoryGirl.build(:admin), exercise) expect(subject).to permit(FactoryBot.build(:admin), exercise)
end end
it 'grants access to teachers' do it 'grants access to teachers' do
expect(subject).to permit(FactoryGirl.build(:teacher), exercise) expect(subject).to permit(FactoryBot.build(:teacher), exercise)
end end
it 'does not grant access to external users' do it 'does not grant access to external users' do
expect(subject).not_to permit(FactoryGirl.build(:external_user), exercise) expect(subject).not_to permit(FactoryBot.build(:external_user), exercise)
end end
end end
end end
@ -33,7 +33,7 @@ let(:exercise) { FactoryGirl.build(:dummy) }
[:clone?, :destroy?, :edit?, :statistics?, :update?].each do |action| [:clone?, :destroy?, :edit?, :statistics?, :update?].each do |action|
permissions(action) do permissions(action) do
it 'grants access to admins' do it 'grants access to admins' do
expect(subject).to permit(FactoryGirl.build(:admin), exercise) expect(subject).to permit(FactoryBot.build(:admin), exercise)
end end
it 'grants access to authors' do it 'grants access to authors' do
@ -42,7 +42,7 @@ let(:exercise) { FactoryGirl.build(:dummy) }
it 'does not grant access to all other users' do it 'does not grant access to all other users' do
[:external_user, :teacher].each do |factory_name| [:external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), exercise) expect(subject).not_to permit(FactoryBot.build(factory_name), exercise)
end end
end end
end end
@ -51,7 +51,7 @@ let(:exercise) { FactoryGirl.build(:dummy) }
[:show?].each do |action| [:show?].each do |action|
permissions(action) do permissions(action) do
it 'not grants access to external users' do it 'not grants access to external users' do
expect(subject).not_to permit(FactoryGirl.build(:external_user), exercise) expect(subject).not_to permit(FactoryBot.build(:external_user), exercise)
end end
end end
end end
@ -60,7 +60,7 @@ let(:exercise) { FactoryGirl.build(:dummy) }
permissions(action) do permissions(action) do
it 'grants access to anyone' do it 'grants access to anyone' do
[:admin, :external_user, :teacher].each do |factory_name| [:admin, :external_user, :teacher].each do |factory_name|
expect(subject).to permit(FactoryGirl.build(factory_name), Exercise.new) expect(subject).to permit(FactoryBot.build(factory_name), Exercise.new)
end end
end end
end end
@ -69,13 +69,13 @@ let(:exercise) { FactoryGirl.build(:dummy) }
describe ExercisePolicy::Scope do describe ExercisePolicy::Scope do
describe '#resolve' do describe '#resolve' do
before(:all) do before(:all) do
@admin = FactoryGirl.create(:admin) @admin = FactoryBot.create(:admin)
@external_user = FactoryGirl.create(:external_user) @external_user = FactoryBot.create(:external_user)
@teacher = FactoryGirl.create(:teacher) @teacher = FactoryBot.create(:teacher)
[@admin, @teacher].each do |user| [@admin, @teacher].each do |user|
[true, false].each do |public| [true, false].each do |public|
FactoryGirl.create(:dummy, public: public, user_id: user.id, user_type: InternalUser.class.name) FactoryBot.create(:dummy, public: public, user_id: user.id, user_type: InternalUser.class.name)
end end
end end
end end

View File

@ -6,9 +6,9 @@ describe ExternalUserPolicy do
[:create?, :destroy?, :edit?, :index?, :new?, :show?, :update?].each do |action| [:create?, :destroy?, :edit?, :index?, :new?, :show?, :update?].each do |action|
permissions(action) do permissions(action) do
it 'grants access to admins only' do it 'grants access to admins only' do
expect(subject).to permit(FactoryGirl.build(:admin), ExternalUser.new) expect(subject).to permit(FactoryBot.build(:admin), ExternalUser.new)
[:external_user, :teacher].each do |factory_name| [:external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), ExternalUser.new) expect(subject).not_to permit(FactoryBot.build(factory_name), ExternalUser.new)
end end
end end
end end

View File

@ -3,20 +3,20 @@ require 'rails_helper'
describe FileTypePolicy do describe FileTypePolicy do
subject { described_class } subject { described_class }
let(:file_type) { FactoryGirl.build(:dot_rb) } let(:file_type) { FactoryBot.build(:dot_rb) }
[:create?, :index?, :new?].each do |action| [:create?, :index?, :new?].each do |action|
permissions(action) do permissions(action) do
it 'grants access to admins' do it 'grants access to admins' do
expect(subject).to permit(FactoryGirl.build(:admin), file_type) expect(subject).to permit(FactoryBot.build(:admin), file_type)
end end
it 'grants access to teachers' do it 'grants access to teachers' do
expect(subject).to permit(FactoryGirl.build(:teacher), file_type) expect(subject).to permit(FactoryBot.build(:teacher), file_type)
end end
it 'does not grant access to external users' do it 'does not grant access to external users' do
expect(subject).not_to permit(FactoryGirl.build(:external_user), file_type) expect(subject).not_to permit(FactoryBot.build(:external_user), file_type)
end end
end end
end end
@ -24,7 +24,7 @@ describe FileTypePolicy do
[:destroy?, :edit?, :show?, :update?].each do |action| [:destroy?, :edit?, :show?, :update?].each do |action|
permissions(action) do permissions(action) do
it 'grants access to admins' do it 'grants access to admins' do
expect(subject).to permit(FactoryGirl.build(:admin), file_type) expect(subject).to permit(FactoryBot.build(:admin), file_type)
end end
it 'grants access to authors' do it 'grants access to authors' do
@ -33,7 +33,7 @@ describe FileTypePolicy do
it 'does not grant access to all other users' do it 'does not grant access to all other users' do
[:external_user, :teacher].each do |factory_name| [:external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), file_type) expect(subject).not_to permit(FactoryBot.build(factory_name), file_type)
end end
end end
end end

View File

@ -3,20 +3,20 @@ require 'rails_helper'
describe HintPolicy do describe HintPolicy do
subject { described_class } subject { described_class }
let(:hint) { FactoryGirl.build(:ruby_no_method_error) } let(:hint) { FactoryBot.build(:ruby_no_method_error) }
[:create?, :index?, :new?].each do |action| [:create?, :index?, :new?].each do |action|
permissions(action) do permissions(action) do
it 'grants access to admins' do it 'grants access to admins' do
expect(subject).to permit(FactoryGirl.build(:admin), hint) expect(subject).to permit(FactoryBot.build(:admin), hint)
end end
it 'grants access to teachers' do it 'grants access to teachers' do
expect(subject).to permit(FactoryGirl.build(:teacher), hint) expect(subject).to permit(FactoryBot.build(:teacher), hint)
end end
it 'does not grant access to external users' do it 'does not grant access to external users' do
expect(subject).not_to permit(FactoryGirl.build(:external_user), hint) expect(subject).not_to permit(FactoryBot.build(:external_user), hint)
end end
end end
end end
@ -24,7 +24,7 @@ describe HintPolicy do
[:destroy?, :edit?, :show?, :update?].each do |action| [:destroy?, :edit?, :show?, :update?].each do |action|
permissions(action) do permissions(action) do
it 'grants access to admins' do it 'grants access to admins' do
expect(subject).to permit(FactoryGirl.build(:admin), hint) expect(subject).to permit(FactoryBot.build(:admin), hint)
end end
it 'grants access to authors' do it 'grants access to authors' do
@ -33,7 +33,7 @@ describe HintPolicy do
it 'does not grant access to all other users' do it 'does not grant access to all other users' do
[:external_user, :teacher].each do |factory_name| [:external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), hint) expect(subject).not_to permit(FactoryBot.build(factory_name), hint)
end end
end end
end end

View File

@ -6,9 +6,9 @@ describe InternalUserPolicy do
[:create?, :edit?, :index?, :new?, :show?, :update?].each do |action| [:create?, :edit?, :index?, :new?, :show?, :update?].each do |action|
permissions(action) do permissions(action) do
it 'grants access to admins only' do it 'grants access to admins only' do
expect(subject).to permit(FactoryGirl.build(:admin), InternalUser.new) expect(subject).to permit(FactoryBot.build(:admin), InternalUser.new)
[:external_user, :teacher].each do |factory_name| [:external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), InternalUser.new) expect(subject).not_to permit(FactoryBot.build(factory_name), InternalUser.new)
end end
end end
end end
@ -18,16 +18,16 @@ describe InternalUserPolicy do
context 'with an admin user' do context 'with an admin user' do
it 'grants access to no one' do it 'grants access to no one' do
[:admin, :external_user, :teacher].each do |factory_name| [:admin, :external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), FactoryGirl.build(:admin)) expect(subject).not_to permit(FactoryBot.build(factory_name), FactoryGirl.build(:admin))
end end
end end
end end
context 'with a non-admin user' do context 'with a non-admin user' do
it 'grants access to admins only' do it 'grants access to admins only' do
expect(subject).to permit(FactoryGirl.build(:admin), InternalUser.new) expect(subject).to permit(FactoryBot.build(:admin), InternalUser.new)
[:external_user, :teacher].each do |factory_name| [:external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), FactoryGirl.build(:teacher)) expect(subject).not_to permit(FactoryBot.build(factory_name), FactoryGirl.build(:teacher))
end end
end end
end end

View File

@ -6,7 +6,7 @@ describe SubmissionPolicy do
permissions :create? do permissions :create? do
it 'grants access to anyone' do it 'grants access to anyone' do
[:admin, :external_user, :teacher].each do |factory_name| [:admin, :external_user, :teacher].each do |factory_name|
expect(subject).to permit(FactoryGirl.build(factory_name), Submission.new) expect(subject).to permit(FactoryBot.build(factory_name), Submission.new)
end end
end end
end end
@ -14,21 +14,21 @@ describe SubmissionPolicy do
[:download_file?, :render_file?, :run?, :score?, :show?, :statistics?, :stop?, :test?].each do |action| [:download_file?, :render_file?, :run?, :score?, :show?, :statistics?, :stop?, :test?].each do |action|
permissions(action) do permissions(action) do
it 'grants access to admins' do it 'grants access to admins' do
expect(subject).to permit(FactoryGirl.build(:admin), Submission.new) expect(subject).to permit(FactoryBot.build(:admin), Submission.new)
end end
it 'grants access to authors' do it 'grants access to authors' do
user = FactoryGirl.create(:external_user) user = FactoryBot.create(:external_user)
expect(subject).to permit(user, FactoryGirl.build(:submission, exercise: Exercise.new, user_id: user.id, user_type: user.class.name)) expect(subject).to permit(user, FactoryBot.build(:submission, exercise: Exercise.new, user_id: user.id, user_type: user.class.name))
end end
end end
end end
permissions :index? do permissions :index? do
it 'grants access to admins only' do it 'grants access to admins only' do
expect(subject).to permit(FactoryGirl.build(:admin), Submission.new) expect(subject).to permit(FactoryBot.build(:admin), Submission.new)
[:external_user, :teacher].each do |factory_name| [:external_user, :teacher].each do |factory_name|
expect(subject).not_to permit(FactoryGirl.build(factory_name), Submission.new) expect(subject).not_to permit(FactoryBot.build(factory_name), Submission.new)
end end
end end
end end

View File

@ -1,5 +1,5 @@
CONTAINER = Docker::Container.send(:new, Docker::Connection.new('http://example.org', {}), 'id' => SecureRandom.hex) CONTAINER = Docker::Container.send(:new, Docker::Connection.new('http://example.org', {}), 'id' => SecureRandom.hex)
IMAGE = Docker::Image.new(Docker::Connection.new('http://example.org', {}), 'id' => SecureRandom.hex, 'RepoTags' => [FactoryGirl.attributes_for(:ruby)[:docker_image]]) IMAGE = Docker::Image.new(Docker::Connection.new('http://example.org', {}), 'id' => SecureRandom.hex, 'RepoTags' => [FactoryBot.attributes_for(:ruby)[:docker_image]])
RSpec.configure do |config| RSpec.configure do |config|
config.before(:each) do |example| config.before(:each) do |example|

View File

@ -2,7 +2,7 @@ require 'rails_helper'
describe FileUploader do describe FileUploader do
let(:file_path) { Rails.root.join('db', 'seeds', 'fibonacci', 'exercise.rb') } let(:file_path) { Rails.root.join('db', 'seeds', 'fibonacci', 'exercise.rb') }
let(:uploader) { described_class.new(FactoryGirl.create(:file)) } let(:uploader) { described_class.new(FactoryBot.create(:file)) }
before(:each) { uploader.store!(File.open(file_path, 'r')) } before(:each) { uploader.store!(File.open(file_path, 'r')) }
after(:each) { uploader.remove! } after(:each) { uploader.remove! }

View File

@ -1,7 +1,7 @@
require 'rails_helper' require 'rails_helper'
describe 'execution_environments/shell.html.slim' do describe 'execution_environments/shell.html.slim' do
let(:execution_environment) { FactoryGirl.create(:ruby) } let(:execution_environment) { FactoryBot.create(:ruby) }
before(:each) do before(:each) do
assign(:execution_environment, execution_environment) assign(:execution_environment, execution_environment)

View File

@ -1,12 +1,12 @@
require 'rails_helper' require 'rails_helper'
describe 'exercises/implement.html.slim' do describe 'exercises/implement.html.slim' do
let(:exercise) { FactoryGirl.create(:fibonacci) } let(:exercise) { FactoryBot.create(:fibonacci) }
let(:files) { exercise.files.visible } let(:files) { exercise.files.visible }
let(:non_binary_files) { files.reject { |file| file.file_type.binary? } } let(:non_binary_files) { files.reject { |file| file.file_type.binary? } }
before(:each) do before(:each) do
assign(:current_user, FactoryGirl.create(:admin)) assign(:current_user, FactoryBot.create(:admin))
assign(:exercise, exercise) assign(:exercise, exercise)
assign(:files, files) assign(:files, files)
assign(:paths, []) assign(:paths, [])

View File

@ -1,4 +1,4 @@
FactoryGirl.define do FactoryBot.define do
factory :error_template_attribute do factory :error_template_attribute do
error_template nil error_template nil
key "MyString" key "MyString"

View File

@ -1,4 +1,4 @@
FactoryGirl.define do FactoryBot.define do
factory :error_template do factory :error_template do
execution_environment nil execution_environment nil
name "MyString" name "MyString"

View File

@ -1,4 +1,4 @@
FactoryGirl.define do FactoryBot.define do
factory :structured_error_attribute do factory :structured_error_attribute do
structured_error nil structured_error nil
error_template_attribute nil error_template_attribute nil

View File

@ -1,4 +1,4 @@
FactoryGirl.define do FactoryBot.define do
factory :structured_error do factory :structured_error do
error_template nil error_template nil
file nil file nil