Quiz index: auto-grade all outstanding course subs
Closes CNVS-15402 TEST PLAN ---- ---- - create 2+ quizzes in a course - make some submissions, don't turn them in - go to quizzes index - verify your submissions are now graded (you may have to wait a bit since it's done in a background job) Change-Id: I80af5523f7549120ca81a5029d9681ddd511bb2b Reviewed-on: https://gerrit.instructure.com/40862 Tested-by: Jenkins <jenkins@instructure.com> Reviewed-by: Ryan Taylor <rtaylor@instructure.com> Reviewed-by: Derek DeVries <ddevries@instructure.com> QA-Review: Trevor deHaan <tdehaan@instructure.com> Product-Review: Derek DeVries <ddevries@instructure.com>
This commit is contained in:
parent
c14f18cb85
commit
fe0e9ea24a
|
@ -110,7 +110,7 @@ class Quizzes::QuizzesController < ApplicationController
|
|||
|
||||
# TODO: stop doing this here
|
||||
if @current_user.present?
|
||||
Quizzes::SubmissionGrader.send_later(:grade_outstanding_submissions_in_course,
|
||||
Quizzes::SubmissionManager.send_later_if_production(:grade_outstanding_submissions_in_course,
|
||||
@current_user.id, @context.id, @context.class.to_s)
|
||||
end
|
||||
|
||||
|
|
|
@ -109,10 +109,6 @@ module Quizzes
|
|||
end
|
||||
end
|
||||
|
||||
def self.grade_outstanding_submissions_in_course(user_id, context_id, context_type)
|
||||
self.new.send(:grade_outstanding_submissions_in_course, user_id, context_id, context_type)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def questions_and_alignments(question_ids)
|
||||
|
@ -128,18 +124,5 @@ module Quizzes
|
|||
:content_id => bank_ids).
|
||||
includes(:learning_outcome, :context).all
|
||||
end
|
||||
|
||||
def grade_outstanding_submissions_in_course(user_id, context_id, context_type)
|
||||
user = User.find(user_id)
|
||||
user.quiz_submissions
|
||||
.where('quizzes.context_id=? AND quizzes.context_type=?', context_id, context_type)
|
||||
.includes(:quiz)
|
||||
.select(&:needs_grading?)
|
||||
.each do |quiz_submission|
|
||||
Quizzes::SubmissionGrader.new(quiz_submission).grade_submission({
|
||||
finished_at: quiz_submission.end_at
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -28,6 +28,19 @@ module Quizzes
|
|||
s
|
||||
end
|
||||
|
||||
def self.grade_outstanding_submissions_in_course(user_id, context_id, context_type)
|
||||
user = User.find(user_id)
|
||||
user.quiz_submissions
|
||||
.where('quizzes.context_id=? AND quizzes.context_type=?', context_id, context_type)
|
||||
.includes(:quiz)
|
||||
.select(&:needs_grading?)
|
||||
.each do |quiz_submission|
|
||||
Quizzes::SubmissionGrader.new(quiz_submission).grade_submission({
|
||||
finished_at: quiz_submission.end_at
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
# this is needed because Rails 2 expects a User object instead of an id
|
||||
def generate_build_hash(query_hash, user)
|
||||
|
|
|
@ -136,6 +136,15 @@ describe Quizzes::QuizzesController do
|
|||
quiz[:published].should be_true
|
||||
end
|
||||
end
|
||||
|
||||
it 'should implicitly grade outstanding submissions for user in course' do
|
||||
user_session(@student)
|
||||
course_quiz(active = true)
|
||||
|
||||
Quizzes::SubmissionManager.expects(:grade_outstanding_submissions_in_course)
|
||||
|
||||
get 'index', :course_id => @course.id
|
||||
end
|
||||
end
|
||||
|
||||
describe "GET 'index' with quiz stats disabled" do
|
||||
|
|
|
@ -105,4 +105,30 @@ describe Quizzes::SubmissionManager do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#grade_outstanding_submissions_in_course' do
|
||||
it 'should work' do
|
||||
student = student_in_course(active_all: true).user
|
||||
quizzes = 2.times.map { @course.quizzes.create! }
|
||||
|
||||
ungraded_qs = quizzes[0].generate_submission(student).tap do |qs|
|
||||
qs.submission_data = {}
|
||||
qs.end_at = 5.minutes.ago
|
||||
qs.save!
|
||||
end
|
||||
|
||||
graded_qs = quizzes[1].generate_submission(student).tap do |qs|
|
||||
qs.complete!({})
|
||||
end
|
||||
|
||||
ungraded_qs.needs_grading?.should be true
|
||||
graded_qs.needs_grading?.should be false
|
||||
|
||||
described_class.grade_outstanding_submissions_in_course(student.id,
|
||||
@course.id, @course.class.to_s)
|
||||
|
||||
ungraded_qs.reload
|
||||
ungraded_qs.needs_grading?.should be false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -128,9 +128,8 @@ describe "quizzes" do
|
|||
@qsub.end_at = 5.minutes.ago
|
||||
@qsub.save!
|
||||
get "/courses/#{@course.id}/quizzes"
|
||||
Delayed::Job.find_by_tag(
|
||||
'Quizzes::SubmissionGrader.grade_outstanding_submissions_in_course'
|
||||
).should be_present
|
||||
@qsub.reload
|
||||
@qsub.needs_grading?.should be_false
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue