fix incorrect override caching through upcoming_events
test plan: * make sure the dashboard sidebar has correct due dates for overridden assignments closes #CNVS-23993 Change-Id: I09ab704768b51aebe294515aad1791340b51f67f Reviewed-on: https://gerrit.instructure.com/66467 Tested-by: Jenkins Reviewed-by: Derek Bender <djbender@instructure.com> QA-Review: Jason Carter <jcarter@instructure.com> Product-Review: James Williams <jamesw@instructure.com>
This commit is contained in:
parent
0b63ce6b4c
commit
1c549bfc82
|
@ -1885,10 +1885,12 @@ class Assignment < ActiveRecord::Base
|
||||||
# Return all assignments and their active overrides where either the
|
# Return all assignments and their active overrides where either the
|
||||||
# assignment or one of its overrides is due between start and ending.
|
# assignment or one of its overrides is due between start and ending.
|
||||||
scope :due_between_with_overrides, lambda { |start, ending|
|
scope :due_between_with_overrides, lambda { |start, ending|
|
||||||
eager_load(:assignment_overrides).
|
joins("LEFT OUTER JOIN #{AssignmentOverride.quoted_table_name} assignment_overrides
|
||||||
where('assignments.due_at BETWEEN ? AND ?
|
ON assignment_overrides.assignment_id = assignments.id").
|
||||||
OR assignment_overrides.due_at_overridden AND
|
group("assignments.id").
|
||||||
assignment_overrides.due_at BETWEEN ? AND ?', start, ending, start, ending)
|
where('assignments.due_at BETWEEN ? AND ?
|
||||||
|
OR assignment_overrides.due_at_overridden AND
|
||||||
|
assignment_overrides.due_at BETWEEN ? AND ?', start, ending, start, ending)
|
||||||
}
|
}
|
||||||
|
|
||||||
scope :updated_after, lambda { |*args|
|
scope :updated_after, lambda { |*args|
|
||||||
|
|
|
@ -336,7 +336,7 @@ module AssignmentOverrideApplicator
|
||||||
# preloads the override students for a particular user for many objects at once, instead of doing separate queries for each
|
# preloads the override students for a particular user for many objects at once, instead of doing separate queries for each
|
||||||
quizzes, assignments = items.partition{|i| i.is_a?(Quizzes::Quiz)}
|
quizzes, assignments = items.partition{|i| i.is_a?(Quizzes::Quiz)}
|
||||||
|
|
||||||
ActiveRecord::Associations::Preloader.new(assignments, :quiz).run
|
ActiveRecord::Associations::Preloader.new(assignments, [:quiz, :assignment_overrides]).run
|
||||||
|
|
||||||
if assignments.any?
|
if assignments.any?
|
||||||
override_students = AssignmentOverrideStudent.where(:assignment_id => assignments, :user_id => user).index_by(&:assignment_id)
|
override_students = AssignmentOverrideStudent.where(:assignment_id => assignments, :user_id => user).index_by(&:assignment_id)
|
||||||
|
|
|
@ -1117,4 +1117,28 @@ describe AssignmentOverrideApplicator do
|
||||||
@overridden_assignment = AssignmentOverrideApplicator.assignment_overridden_for(@assignment, @student)
|
@overridden_assignment = AssignmentOverrideApplicator.assignment_overridden_for(@assignment, @student)
|
||||||
expect(@overridden_assignment.due_at).to eq @section_override.due_at
|
expect(@overridden_assignment.due_at).to eq @section_override.due_at
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should not cache incorrect overrides through due_between_with_overrides" do
|
||||||
|
course_with_student(:active_all => true)
|
||||||
|
@assignment = create_assignment(:course => @course, :submission_types => "online_upload")
|
||||||
|
|
||||||
|
so = assignment_override_model(:assignment => @assignment)
|
||||||
|
so.set = @course.default_section
|
||||||
|
so.override_due_at(30.days.from_now) # set it outside of the default upcoming events range
|
||||||
|
so.save!
|
||||||
|
|
||||||
|
other_so = assignment_override_model(:assignment => @assignment)
|
||||||
|
other_so.set = @course.course_sections.create!
|
||||||
|
other_so.override_due_at(5.days.from_now) # set it so it would be included in the upcoming events query
|
||||||
|
other_so.save!
|
||||||
|
|
||||||
|
Timecop.freeze(5.seconds.from_now) do
|
||||||
|
enable_cache do
|
||||||
|
@student.upcoming_events # prime the cache
|
||||||
|
|
||||||
|
@assignment.reload
|
||||||
|
expect(@assignment.overridden_for(@student).due_at).to eq so.due_at # should have cached correctly
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue