revert overridden_requirements_met in course completion live events
this was kind of a shot in the dark and it didn't fix the problem. we have decided to take a different approach. test plan: - smoke test course completion live events (course progress event should be sent when a module is completed, and course completion event should be sent when the last module is completed) this reverts commits0b113807a7
and60c6abb547
flag=none refs LS-1967 Change-Id: Icee1eff0ddb94b8e7cd9c1edfbfffea867e2d419 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/260141 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Nate Armstrong <narmstrong@instructure.com> QA-Review: Nate Armstrong <narmstrong@instructure.com> Product-Review: Jeremy Stanley <jeremy@instructure.com>
This commit is contained in:
parent
3624ca554d
commit
e9271f8886
|
@ -21,15 +21,14 @@
|
|||
class CourseProgress
|
||||
include Rails.application.routes.url_helpers
|
||||
|
||||
attr_accessor :course, :user, :read_only, :overridden_requirements_met
|
||||
attr_accessor :course, :user, :read_only
|
||||
|
||||
# use read_only to avoid triggering more progression evaluations
|
||||
def initialize(course, user, read_only: false, preloaded_progressions: nil, overridden_requirements_met: nil)
|
||||
def initialize(course, user, read_only: false, preloaded_progressions: nil)
|
||||
@course = course
|
||||
@user = user
|
||||
@read_only = read_only
|
||||
@preloaded_progressions = preloaded_progressions
|
||||
@overridden_requirements_met = overridden_requirements_met
|
||||
end
|
||||
|
||||
def modules
|
||||
|
@ -167,8 +166,7 @@ class CourseProgress
|
|||
def module_requirements_completed(progression)
|
||||
@_module_requirements_completed ||= {}
|
||||
@_module_requirements_completed[progression.id] ||= begin
|
||||
met = (overridden_requirements_met && overridden_requirements_met[progression.id]) || progression.requirements_met
|
||||
met.select { |req| module_requirements(progression.context_module).include?(req) }.uniq
|
||||
progression.requirements_met.select { |req| module_requirements(progression.context_module).include?(req) }.uniq
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -735,12 +735,11 @@ module Canvas::LiveEvents
|
|||
}
|
||||
end
|
||||
|
||||
def self.course_completed(context_module_progression, overridden_requirements_met: nil)
|
||||
def self.course_completed(context_module_progression)
|
||||
post_event_stringified('course_completed',
|
||||
get_course_completed_data(
|
||||
context_module_progression.context_module.course,
|
||||
context_module_progression.user,
|
||||
overridden_requirements_met: overridden_requirements_met
|
||||
context_module_progression.user
|
||||
))
|
||||
end
|
||||
|
||||
|
@ -748,9 +747,9 @@ module Canvas::LiveEvents
|
|||
post_event_stringified('course_progress', get_course_completed_data(context_module_progression.context_module.course, context_module_progression.user))
|
||||
end
|
||||
|
||||
def self.get_course_completed_data(course, user, overridden_requirements_met: nil)
|
||||
def self.get_course_completed_data(course, user)
|
||||
{
|
||||
progress: CourseProgress.new(course, user, read_only: true, overridden_requirements_met: overridden_requirements_met).to_json,
|
||||
progress: CourseProgress.new(course, user, read_only: true).to_json,
|
||||
user: user.slice(%i[id name email]),
|
||||
course: course.slice(%i[id name account_id sis_source_id])
|
||||
}
|
||||
|
|
|
@ -155,13 +155,8 @@ module Canvas::LiveEventsCallbacks
|
|||
Canvas::LiveEvents.module_updated(obj)
|
||||
when ContextModuleProgression
|
||||
if changes["completed_at"]
|
||||
# it's possible that some terrible thing unset the requirements_met in the db after the "completed_at" was set
|
||||
# but before this event fired off so here's a terrible hack to stuff it back in for the purposes of
|
||||
# calculating completion
|
||||
overridden_requirements_met = changes["requirements_met"] && {obj.id => changes["requirements_met"].last&.map(&:symbolize_keys)}
|
||||
if CourseProgress.new(obj.context_module.course, obj.user, read_only: true,
|
||||
overridden_requirements_met: overridden_requirements_met).completed?
|
||||
Canvas::LiveEvents.course_completed(obj, overridden_requirements_met: overridden_requirements_met)
|
||||
if CourseProgress.new(obj.context_module.course, obj.user, read_only: true).completed?
|
||||
Canvas::LiveEvents.course_completed(obj)
|
||||
else
|
||||
Canvas::LiveEvents.course_progress(obj)
|
||||
end
|
||||
|
|
|
@ -444,24 +444,6 @@ describe LiveEventsObserver do
|
|||
expect_any_instance_of(CourseProgress).to receive(:completed?).and_return(false)
|
||||
context_module_progression.update_attribute(:workflow_state, 'completed')
|
||||
end
|
||||
|
||||
it "should still post even when weird requirements_met unsetting happens" do
|
||||
page = course.wiki_pages.create!(:title => "page")
|
||||
tag = context_module.add_item(:id => page.id, :type => 'wiki_page')
|
||||
context_module.completion_requirements = {tag.id => {:type => 'must_view'}}
|
||||
context_module.save!
|
||||
|
||||
expect(Canvas::LiveEvents).to receive(:course_completed).with(any_args)
|
||||
ContextModuleProgression.transaction(requires_new: true) do
|
||||
# complete it
|
||||
context_module_progression.update(:workflow_state => 'completed',
|
||||
:requirements_met => [{:id => tag.id, :type => 'must_view'}])
|
||||
# sneakily remove the requiremets met because terribleness
|
||||
context_module_progression.update(:requirements_met => [])
|
||||
end
|
||||
# event fires off now but it should ignore the missing requirements_met in the db and
|
||||
# use the ones that were present when the completion happened
|
||||
end
|
||||
end
|
||||
|
||||
context "the tag_type is not context_module or context_module_progression" do
|
||||
|
|
Loading…
Reference in New Issue