Rename user to contributor in submission

This commit is contained in:
kiragrammel
2023-08-11 12:15:36 +02:00
committed by Sebastian Serth
parent 97138288f4
commit 0234414bae
39 changed files with 267 additions and 233 deletions

View File

@ -25,7 +25,7 @@ describe FileParameters do
it 'new file' do
submission = create(:submission, exercise: hello_world, id: 1337)
controller.instance_variable_set(:@current_user, submission.user)
controller.instance_variable_set(:@current_user, submission.contributor)
new_file = create(:file, context: submission)
expect(file_accepted?(new_file)).to be true
@ -58,8 +58,8 @@ describe FileParameters do
it 'file of another submission' do
learner1 = create(:learner)
learner2 = create(:learner)
submission_learner1 = create(:submission, exercise: hello_world, user: learner1)
_submission_learner2 = create(:submission, exercise: hello_world, user: learner2)
submission_learner1 = create(:submission, exercise: hello_world, contributor: learner1)
_submission_learner2 = create(:submission, exercise: hello_world, contributor: learner2)
controller.instance_variable_set(:@current_user, learner2)
other_submissions_file = create(:file, context: submission_learner1)

View File

@ -107,7 +107,7 @@ describe Lti do
let(:submission) { create(:submission) }
before do
create(:lti_parameter, consumers_id: consumer.id, external_users_id: submission.user_id, exercises_id: submission.exercise_id)
create(:lti_parameter, consumers_id: consumer.id, external_users_id: submission.contributor_id, exercises_id: submission.exercise_id)
end
context 'with an invalid score' do
@ -156,7 +156,7 @@ describe Lti do
context 'without a tool consumer' do
it 'returns a corresponding status' do
submission.user.consumer = nil
submission.contributor.consumer = nil
allow(submission).to receive(:normalized_score).and_return score
expect(controller.send(:send_score, submission)[:status]).to eq('error')

View File

@ -5,9 +5,9 @@ require 'rails_helper'
describe CodeOcean::FilesController do
render_views
let(:user) { create(:admin) }
let(:contributor) { create(:admin) }
before { allow(controller).to receive(:current_user).and_return(user) }
before { allow(controller).to receive(:current_user).and_return(contributor) }
describe 'GET #show_protected_upload' do
context 'with a valid filename' do
@ -30,7 +30,7 @@ describe CodeOcean::FilesController do
end
describe 'POST #create' do
let(:submission) { create(:submission, user:) }
let(:submission) { create(:submission, contributor:) }
context 'with a valid file' do
let(:perform_request) { proc { post :create, params: {code_ocean_file: build(:file, context: submission).attributes, format: :json} } }

View File

@ -164,7 +164,7 @@ describe ExercisesController do
expect_assigns(exercise: :exercise)
context 'with an existing submission' do
let!(:submission) { create(:submission, exercise_id: exercise.id, user_id: user.id, user_type: user.class.name) }
let!(:submission) { create(:submission, exercise:, contributor: user) }
it "populates the editors with the submission's files' content" do
perform_request.call
@ -260,18 +260,18 @@ describe ExercisesController do
let(:external_user) { create(:external_user) }
before do
2.times { create(:submission, cause: 'autosave', user: external_user, exercise:) }
2.times { create(:submission, cause: 'run', user: external_user, exercise:) }
create(:submission, cause: 'assess', user: external_user, exercise:)
create_list(:submission, 2, cause: 'autosave', contributor: external_user, exercise:)
create_list(:submission, 2, cause: 'run', contributor: external_user, exercise:)
create(:submission, cause: 'assess', contributor: external_user, exercise:)
end
context 'when viewing the default submission statistics page without a parameter' do
it 'does not list autosaved submissions' do
perform_request
expect(assigns(:all_events).filter {|event| event.is_a? Submission }).to contain_exactly(
an_object_having_attributes(cause: 'run', user_id: external_user.id),
an_object_having_attributes(cause: 'assess', user_id: external_user.id),
an_object_having_attributes(cause: 'run', user_id: external_user.id)
an_object_having_attributes(cause: 'run', contributor: external_user),
an_object_having_attributes(cause: 'assess', contributor: external_user),
an_object_having_attributes(cause: 'run', contributor: external_user)
)
end
end
@ -283,7 +283,7 @@ describe ExercisesController do
perform_request
submissions = assigns(:all_events).filter {|event| event.is_a? Submission }
expect(submissions).to match_array Submission.all
expect(submissions).to include an_object_having_attributes(cause: 'autosave', user_id: external_user.id)
expect(submissions).to include an_object_having_attributes(cause: 'autosave', contributor: external_user)
end
end
end
@ -291,7 +291,7 @@ describe ExercisesController do
describe 'POST #submit' do
let(:output) { {} }
let(:perform_request) { post :submit, format: :json, params: {id: exercise.id, submission: {cause: 'submit', exercise_id: exercise.id}} }
let(:user) { create(:external_user) }
let(:contributor) { create(:external_user) }
let(:scoring_response) do
[{
status: :ok,
@ -312,8 +312,8 @@ describe ExercisesController do
end
before do
create(:lti_parameter, external_user: user, exercise:)
submission = build(:submission, exercise:, user:)
create(:lti_parameter, external_user: contributor, exercise:)
submission = build(:submission, exercise:, contributor:)
allow(submission).to receive_messages(normalized_score: 1, calculate_score: scoring_response, redirect_to_feedback?: false)
allow(Submission).to receive(:create).and_return(submission)
end

View File

@ -210,7 +210,7 @@ describe SessionsController do
# Todo replace session with lti_parameter
# Todo create LtiParameter Object
# session[:lti_parameters] = {}
allow(controller).to receive(:current_user).and_return(submission.user)
allow(controller).to receive(:current_user).and_return(submission.contributor)
perform_request.call
end

View File

@ -6,9 +6,9 @@ describe SubmissionsController do
render_views
let(:submission) { create(:submission) }
let(:user) { create(:admin) }
let(:contributor) { create(:admin) }
before { allow(controller).to receive(:current_user).and_return(user) }
before { allow(controller).to receive(:current_user).and_return(contributor) }
describe 'POST #create' do
before do

View File

@ -22,12 +22,12 @@ describe 'Editor', js: true do
weight: 2.0,
}]
end
let(:user) { create(:teacher) }
let(:contributor) { create(:teacher) }
let(:exercise_without_test) { create(:tdd) }
before do
visit(sign_in_path)
fill_in('email', with: user.email)
fill_in('email', with: contributor.email)
fill_in('password', with: attributes_for(:teacher)[:password])
click_button(I18n.t('sessions.new.link'))
allow_any_instance_of(LtiHelper).to receive(:lti_outcome_service?).and_return(true)
@ -111,7 +111,7 @@ describe 'Editor', js: true do
end
it 'contains a button for submitting the exercise' do
submission = build(:submission, user:, exercise:)
submission = build(:submission, contributor:, exercise:)
allow(submission).to receive(:calculate_score).and_return(scoring_response)
allow(Submission).to receive(:find).and_return(submission)
click_button(I18n.t('exercises.editor.score'))

View File

@ -9,10 +9,10 @@ describe 'ExternalUserStatistics', js: true do
let(:password) { 'password123456' }
before do
2.times { create(:submission, cause: 'autosave', user: learner, exercise:, study_group:) }
2.times { create(:submission, cause: 'run', user: learner, exercise:, study_group:) }
create(:submission, cause: 'assess', user: learner, exercise:, study_group:)
create(:submission, cause: 'submit', user: learner, exercise:, study_group:)
2.times { create(:submission, cause: 'autosave', contributor: learner, exercise:, study_group:) }
2.times { create(:submission, cause: 'run', contributor: learner, exercise:, study_group:) }
create(:submission, cause: 'assess', contributor: learner, exercise:, study_group:)
create(:submission, cause: 'submit', contributor: learner, exercise:, study_group:)
study_group.external_users << learner
study_group.internal_users << user

View File

@ -7,7 +7,7 @@ describe Exercise do
let(:users) { create_list(:external_user, 10) }
def create_submissions
create_list(:submission, 10, cause: 'submit', exercise:, score: Forgery(:basic).number, user: users.sample)
create_list(:submission, 10, cause: 'submit', exercise:, score: Forgery(:basic).number, contributor: users.sample)
end
it 'validates the number of main files' do
@ -77,7 +77,10 @@ describe Exercise do
before { create_submissions }
it 'returns the average score expressed as a percentage' do
maximum_percentages = exercise.submissions.group_by(&:user_id).values.map {|submission| submission.max_by(&:score).score / exercise.maximum_score * 100 }
maximum_percentages = exercise.submissions.group_by do |s|
[s.contributor_type,
s.contributor_id]
end.values.map {|submission| submission.max_by(&:score).score / exercise.maximum_score * 100 }
expect(exercise.average_percentage).to eq(maximum_percentages.average.round(2))
end
end
@ -96,7 +99,10 @@ describe Exercise do
before { create_submissions }
it "returns the average of all users' maximum scores" do
maximum_scores = exercise.submissions.group_by(&:user_id).values.map {|submission| submission.max_by(&:score).score }
maximum_scores = exercise.submissions.group_by do |s|
[s.contributor_type,
s.contributor_id]
end.values.map {|submission| submission.max_by(&:score).score }
expect(exercise.average_score).to be_within(0.1).of(maximum_scores.average)
end
end

View File

@ -13,8 +13,8 @@ describe Submission do
expect(described_class.create.errors[:exercise]).to be_present
end
it 'validates the presence of a user' do
expect(described_class.create.errors[:user]).to be_present
it 'validates the presence of a contributor' do
expect(described_class.create.errors[:contributor]).to be_present
end
describe '#main_file' do
@ -67,19 +67,19 @@ describe Submission do
end
describe '#siblings' do
let(:siblings) { described_class.find_by(user:).siblings }
let(:user) { create(:external_user) }
let(:siblings) { described_class.find_by(contributor:).siblings }
let(:contributor) { create(:external_user) }
before do
10.times.each_with_index do |_, index|
create(:submission, exercise: submission.exercise, user: (index.even? ? user : create(:external_user)))
create(:submission, exercise: submission.exercise, contributor: (index.even? ? contributor : create(:external_user)))
end
end
it "returns all the creator's submissions for the same exercise" do
expect(siblings).to be_an(ActiveRecord::Relation)
expect(siblings.map(&:exercise).uniq).to eq([submission.exercise])
expect(siblings.map(&:user).uniq).to eq([user])
expect(siblings.map(&:contributor).uniq).to eq([contributor])
end
end
@ -92,8 +92,8 @@ describe Submission do
describe '#redirect_to_feedback?' do
context 'with no exercise feedback' do
let(:exercise) { create(:dummy) }
let(:user) { build(:external_user, id: (11 - (exercise.created_at.to_i % 10)) % 10) }
let(:submission) { build(:submission, exercise:, user:) }
let(:contributor) { build(:external_user, id: (11 - (exercise.created_at.to_i % 10)) % 10) }
let(:submission) { build(:submission, exercise:, contributor:) }
it 'sends 10% of users to feedback page' do
expect(submission.send(:redirect_to_feedback?)).to be_truthy
@ -101,7 +101,7 @@ describe Submission do
it 'does not redirect other users' do
9.times do |i|
submission = build(:submission, exercise:, user: build(:external_user, id: (11 - (exercise.created_at.to_i % 10)) - i - 1))
submission = build(:submission, exercise:, contributor: build(:external_user, id: (11 - (exercise.created_at.to_i % 10)) - i - 1))
expect(submission.send(:redirect_to_feedback?)).to be_falsey
end
end
@ -109,8 +109,8 @@ describe Submission do
context 'with little exercise feedback' do
let(:exercise) { create(:dummy_with_user_feedbacks) }
let(:user) { build(:external_user, id: (11 - (exercise.created_at.to_i % 10)) % 10) }
let(:submission) { build(:submission, exercise:, user:) }
let(:contributor) { build(:external_user, id: (11 - (exercise.created_at.to_i % 10)) % 10) }
let(:submission) { build(:submission, exercise:, contributor:) }
it 'sends 10% of users to feedback page' do
expect(submission.send(:redirect_to_feedback?)).to be_truthy
@ -118,7 +118,7 @@ describe Submission do
it 'does not redirect other users' do
9.times do |i|
submission = build(:submission, exercise:, user: build(:external_user, id: (11 - (exercise.created_at.to_i % 10)) - i - 1))
submission = build(:submission, exercise:, contributor: build(:external_user, id: (11 - (exercise.created_at.to_i % 10)) - i - 1))
expect(submission.send(:redirect_to_feedback?)).to be_falsey
end
end

View File

@ -7,7 +7,7 @@ describe RequestForCommentPolicy do
context 'when the RfC visibility is not considered' do
let(:submission) { create(:submission, study_group: create(:study_group)) }
let(:rfc) { create(:rfc, submission:, user: submission.user) }
let(:rfc) { create(:rfc, submission:, user: submission.contributor) }
%i[destroy? edit?].each do |action|
permissions(action) do

View File

@ -20,8 +20,8 @@ describe SubmissionPolicy do
end
it 'grants access to authors' do
user = create(:external_user)
expect(policy).to permit(user, build(:submission, exercise: Exercise.new, user_id: user.id, user_type: user.class.name))
contributor = create(:external_user)
expect(policy).to permit(contributor, build(:submission, exercise: Exercise.new, contributor:))
end
end
end