cleanup(basic_lti): Normalize Quizzes Next LTI Usage

flag = none

Fixes: QUIZ-7378

NOTE: g/226189 must be deployed to prod first

TEST PLAN:
  - Create Quizzes Next Assignment
  - Create 1 true / false question
  - Take quiz as student
  - Verify grade and submitted_at date are sent back correctly

Change-Id: I52110794bbd3ab316f2dce490869ab447e782ae3
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/226551
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: David Tan <dtan@instructure.com>
Reviewed-by: Jared Crystal <jcrystal@instructure.com>
Product-Review: Kevin Dougherty <jdougherty@instructure.com>
This commit is contained in:
Alex Slaughter 2020-02-13 01:12:04 -05:00
parent 2d11c63b32
commit aea6099d40
2 changed files with 19 additions and 20 deletions

View File

@ -47,10 +47,8 @@ module BasicLTI
end
def submitted_at_date
# we store submitted_at date in the resultData node because
# the IMS LTI gem does not have a method to put it elsewhere
return nil if submitted_at_date_text.blank?
@_submitted_at_date ||= Time.zone.parse(submitted_at_date_text)
submitted_at = submission_submitted_at
submitted_at.present? ? Time.zone.parse(submitted_at) : nil
end
def result_data_text_json
@ -61,12 +59,6 @@ module BasicLTI
nil
end
def submitted_at_date_text
json = result_data_text_json
return result_data_text if json.blank?
json[:submitted_at]
end
def submission_reopened?
json = result_data_text_json
return false if json.blank?

View File

@ -51,6 +51,8 @@ describe BasicLTI::QuizzesNextLtiResponse do
let(:timestamp) { 1.day.ago.iso8601(3) }
let(:text) { "" }
let(:xml) do
request_xml(source_id, launch_url, "0.12")
end
@ -84,11 +86,14 @@ describe BasicLTI::QuizzesNextLtiResponse do
<textString>#{grade}</textString>
</resultScore>
<resultData>
<text>#{timestamp}</text>
<text>#{text}</text>
<url>#{launch_url}</url>
</resultData>
</result>
</resultRecord>
<submissionDetails>
<submittedAt>#{timestamp}</submittedAt>
</submissionDetails>
</replaceResultRequest>
</imsx_POXBody>
</imsx_POXEnvelopeRequest>
@ -146,7 +151,7 @@ describe BasicLTI::QuizzesNextLtiResponse do
expect(request.body).to eq '<replaceResultResponse />'
end
it "reads 'submitted_at' from resultData" do
it "reads 'submitted_at' from submissionDetails" do
BasicLTI::BasicOutcomes.process_request(tool, xml)
submission = assignment.submissions.where(user_id: @user.id).first
expect(submission.submitted_at).to eq timestamp
@ -248,10 +253,10 @@ describe BasicLTI::QuizzesNextLtiResponse do
allow(BasicLTI::QuizzesNextVersionedSubmission).to receive(:new).and_return(quiz_lti_submission)
end
context 'when json passed includes only submitted_at' do
let(:timestamp) { "{ \"submitted_at\" : \"#{1.day.ago.iso8601(3)}\" }" }
context 'when submissionDetails passed includes submitted_at' do
let(:timestamp) { 1.day.ago.iso8601(3) }
it "reads 'submitted_at' from resultData" do
it "reads 'submitted_at' from submissionDetails" do
BasicLTI::BasicOutcomes.process_request(tool, xml)
submission = assignment.submissions.where(user_id: @user.id).first
expect(submission.submitted_at).to eq timestamp
@ -263,19 +268,21 @@ describe BasicLTI::QuizzesNextLtiResponse do
end
end
context 'when json passed includes submitted_at and reopened (true)' do
let(:timestamp) { "{ \"submitted_at\" : \"#{1.day.ago.iso8601(3)}\", \"reopened\" : true }" }
context 'when submissionDetails includes submitted_at and json includes reopened (true)' do
let(:text) { "{ \"reopened\" : true }" }
let(:timestamp) { 1.day.ago.iso8601(3) }
it "reads 'submitted_at' from resultData" do
it "reads 'submitted_at' from submissionDetails" do
expect(quiz_lti_submission).to receive(:revert_history).with(launch_url, -tool.id).and_call_original
BasicLTI::BasicOutcomes.process_request(tool, xml)
end
end
context 'when json passed includes submitted_at and reopened (false)' do
let(:timestamp) { "{ \"submitted_at\" : \"#{1.day.ago.iso8601(3)}\", \"reopened\" : false }" }
let(:text) { "{ \"reopened\" : false }" }
let(:timestamp) { 1.day.ago.iso8601(3) }
it "reads 'submitted_at' from resultData" do
it "reads 'submitted_at' from submissionDetails" do
expect(quiz_lti_submission).not_to receive(:revert_history)
BasicLTI::BasicOutcomes.process_request(tool, xml)
end