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 commits 0b113807a7
and 60c6abb547

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:
Jeremy Stanley 2021-03-08 10:54:50 -07:00
parent 3624ca554d
commit e9271f8886
4 changed files with 9 additions and 35 deletions

View File

@ -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

View File

@ -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])
}

View File

@ -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

View File

@ -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