Upgrade DatabaseCleaner strategy

This commit is contained in:
Sebastian Serth
2021-05-11 08:59:10 +02:00
parent 8378070bc2
commit 2b32829e60
7 changed files with 101 additions and 14 deletions

View File

@ -14,14 +14,10 @@ module SubmissionParameters
private :submission_params private :submission_params
def merge_user(params) def merge_user(params)
if current_user
current_user_id = current_user.id
current_user_class_name = current_user.class.name
end
# The study_group_id might not be present in the session (e.g. for internal users), resulting in session[:study_group_id] = nil which is intended. # The study_group_id might not be present in the session (e.g. for internal users), resulting in session[:study_group_id] = nil which is intended.
params.merge( params.merge(
user_id: current_user_id, user_id: current_user.id,
user_type: current_user_class_name, user_type: current_user.class.name,
study_group_id: session[:study_group_id] study_group_id: session[:study_group_id]
) )
end end

View File

@ -500,8 +500,7 @@ class ExercisesController < ApplicationController
def submit def submit
@submission = Submission.create(submission_params) @submission = Submission.create(submission_params)
score_submission(@submission) score_submission(@submission)
current_user = ExternalUser.find(@submission.user_id) if @submission.user.external_user? && lti_outcome_service?(@submission.exercise_id, @submission.user.id)
if !current_user.nil? && lti_outcome_service?(@submission.exercise_id, current_user.id)
transmit_lti_score transmit_lti_score
else else
redirect_after_submit redirect_after_submit

View File

@ -5,3 +5,4 @@ test:
host: localhost host: localhost
username: postgres username: postgres
password: postgres password: postgres
reaping_frequency: 0

View File

@ -0,0 +1,47 @@
# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
#
# This file contains migration options to ease your Rails 6.0 upgrade.
#
# Once upgraded flip defaults one by one to migrate to the new default.
#
# Read the Guide for Upgrading Ruby on Rails for more info on each option.
# Don't force requests from old versions of IE to be UTF-8 encoded.
# Rails.application.config.action_view.default_enforce_utf8 = false
# Embed purpose and expiry metadata inside signed and encrypted
# cookies for increased security.
#
# This option is not backwards compatible with earlier Rails versions.
# It's best enabled when your entire app is migrated and stable on 6.0.
# Rails.application.config.action_dispatch.use_cookies_with_metadata = true
# Change the return value of `ActionDispatch::Response#content_type` to Content-Type header without modification.
# Rails.application.config.action_dispatch.return_only_media_type_on_content_type = false
# Return false instead of self when enqueuing is aborted from a callback.
# Rails.application.config.active_job.return_false_on_aborted_enqueue = true
# Send Active Storage analysis and purge jobs to dedicated queues.
# Rails.application.config.active_storage.queues.analysis = :active_storage_analysis
# Rails.application.config.active_storage.queues.purge = :active_storage_purge
# When assigning to a collection of attachments declared via `has_many_attached`, replace existing
# attachments instead of appending. Use #attach to add new attachments without replacing existing ones.
# Rails.application.config.active_storage.replace_on_assign_to_many = true
# Use ActionMailer::MailDeliveryJob for sending parameterized and normal mail.
#
# The default delivery jobs (ActionMailer::Parameterized::DeliveryJob, ActionMailer::DeliveryJob),
# will be removed in Rails 6.1. This setting is not backwards compatible with earlier Rails versions.
# If you send mail in the background, job workers need to have a copy of
# MailDeliveryJob to ensure all delivery jobs are processed properly.
# Make sure your entire app is migrated and stable on 6.0 before using this setting.
# Rails.application.config.action_mailer.delivery_job = "ActionMailer::MailDeliveryJob"
# Enable the same cache key to be reused when the object being cached of type
# `ActiveRecord::Relation` changes by moving the volatile information (max updated at and count)
# of the relation's cache key into the cache version to support recycling cache key.
# Rails.application.config.active_record.collection_cache_versioning = true

View File

@ -1,3 +1,5 @@
# frozen_string_literal: true
require 'rails_helper' require 'rails_helper'
describe CodeOcean::FilesController do describe CodeOcean::FilesController do
@ -48,6 +50,8 @@ describe CodeOcean::FilesController do
expect { perform_request.call }.to change(CodeOcean::File, :count).by(-1) expect { perform_request.call }.to change(CodeOcean::File, :count).by(-1)
end end
expect_redirect(:exercise) it 'redirects to exercise path' do
expect(controller).to redirect_to(exercise)
end
end end
end end

View File

@ -1,3 +1,5 @@
# frozen_string_literal: true
require 'rails_helper' require 'rails_helper'
describe ExercisesController do describe ExercisesController do
@ -230,8 +232,8 @@ describe ExercisesController do
describe 'POST #submit' do describe 'POST #submit' do
let(:output) { {} } let(:output) { {} }
let(:perform_request) { post :submit, format: :json, params: { id: exercise.id, submission: {cause: 'submit', exercise_id: exercise.id} } } let(:perform_request) { post :submit, format: :json, params: { id: exercise.id, submission: {cause: 'submit', exercise_id: exercise.id} } }
let!(:external_user) { FactoryBot.create(:external_user) } let(:user) { FactoryBot.create(:external_user) }
let!(:lti_parameter) { FactoryBot.create(:lti_parameter, external_user: external_user, exercise: exercise) } let!(:lti_parameter) { FactoryBot.create(:lti_parameter, external_user: 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)

View File

@ -1,10 +1,48 @@
# frozen_string_literal: true
require 'capybara/rspec'
RSpec.configure do |config| RSpec.configure do |config|
config.use_transactional_fixtures = false
config.before(:suite) do config.before(:suite) do
DatabaseCleaner.strategy = :truncation if config.use_transactional_fixtures?
raise(<<-MSG)
Delete line `config.use_transactional_fixtures = true` from rails_helper.rb
(or set it to false) to prevent uncommitted transactions being used in
JavaScript-dependent specs.
During testing, the app-under-test that the browser driver connects to
uses a different database connection to the database connection used by
the spec. The app's database connection would not be able to access
uncommitted transaction data setup over the spec's database connection.
MSG
end
DatabaseCleaner.clean_with(:truncation) DatabaseCleaner.clean_with(:truncation)
end end
config.around(:each) do |example| config.before do
DatabaseCleaner.cleaning { example.run } DatabaseCleaner.strategy = :transaction
end
config.before(:each, type: :feature) do
# :rack_test driver's Rack app under test shares database connection
# with the specs, so continue to use transaction strategy for speed.
unless Capybara.current_driver == :rack_test
# Driver is probably for an external browser with an app
# under test that does *not* share a database connection with the
# specs, so use truncation strategy.
DatabaseCleaner.strategy = :truncation
end
end
config.before do
DatabaseCleaner.start
end
config.append_after do
DatabaseCleaner.clean
end end
end end