don't clobber new quizzes submissions in SG

fixes EVAL-2055
flag=none

Test plan:
- Have a course with at least one student and a Quizzes.Next quiz with
  multiple attempts enabled
- As a student, make multiple attempts on the quiz that result in
  distinct scores
- As a teacher, open SpeedGrader and change the grade for the latter
  attempt (for example, by adjusting fudge points)
- Check that switching attempts from the dropdown actually shows you the
  correct attempt, instead of them all showing the same attempt
- Smoke-test that updating a grade or a late/missing status for a
  regular old (non-Q.N) submission with multiple attempts doesn't break
  anything

Change-Id: I13b109eb3ae013908d864845f014fa217fdf857b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/280798
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Syed Hussain <shussain@instructure.com>
Product-Review: Syed Hussain <shussain@instructure.com>
Reviewed-by: Dustin Cowles <dustin.cowles@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
This commit is contained in:
Adrian Packel 2021-11-18 16:55:09 -06:00 committed by Dustin Cowles
parent c11938c3ef
commit 4f72fcf0b5
2 changed files with 21 additions and 2 deletions

View File

@ -5006,6 +5006,18 @@ QUnit.module('SpeedGrader', rootHooks => {
const {submission} = SpeedGrader.EG.setOrUpdateSubmission(alphaSubmission)
deepEqual(submission.submission_history[0].versioned_attachments, versionedAttachments)
})
test('does not thoughtlessly alter the submission field of the first attempt of the existing submission object if the passed-in submission has no attempt field', () => {
alphaSubmission.submission_history[0].submission = {grade: 'please spare me'}
const fakeSubmission = {
...alphaSubmission,
score: '10'
}
SpeedGrader.EG.setOrUpdateSubmission(fakeSubmission)
strictEqual(alphaSubmission.submission_history[0].submission.grade, 'please spare me')
})
})
QUnit.module('#renderAttachment', hooks => {

View File

@ -3304,6 +3304,7 @@ EG = {
}
return historySubmission.attempt === submission.attempt
}) || 0
const foundMatchingSubmission = historyIndex !== -1
historyIndex = historyIndex === -1 ? 0 : historyIndex
if (typeof submission.submission_history === 'undefined') {
@ -3311,8 +3312,14 @@ EG = {
submission.submission_history[historyIndex] = {submission: $.extend(true, {}, submission)}
}
// update the nested submission in submission_history if needed
if (student.submission?.submission_history?.[historyIndex]?.submission) {
// update the nested submission in submission_history if needed, assuming we
// could map the submission we got to a specific attempt (notably, with
// Quizzes.Next submissions and possibly other LTIs we don't get an
// "attempt" field)
if (
foundMatchingSubmission &&
student.submission?.submission_history?.[historyIndex]?.submission
) {
const versionedAttachments =
submission.submission_history[historyIndex].submission?.versioned_attachments || []
submission.submission_history[historyIndex].submission = $.extend(