diff --git a/__tests__/shared/components/challenge-detail/MySubmissions/SubmissionsList/index.jsx b/__tests__/shared/components/challenge-detail/MySubmissions/SubmissionsList/index.jsx index e35542ad6..bb70ec89f 100644 --- a/__tests__/shared/components/challenge-detail/MySubmissions/SubmissionsList/index.jsx +++ b/__tests__/shared/components/challenge-detail/MySubmissions/SubmissionsList/index.jsx @@ -1,5 +1,6 @@ import { getDisplayedScores, + isActiveTestStatus, getSubmissionTestProgress, } from '../../../../../../src/shared/components/challenge-detail/MySubmissions/SubmissionsList'; @@ -68,3 +69,11 @@ describe('getSubmissionTestProgress', () => { }); }); }); + +describe('isActiveTestStatus', () => { + it('keeps provisional scores hidden while tests are still running', () => { + expect(isActiveTestStatus('IN PROGRESS')).toBe(true); + expect(isActiveTestStatus('SUCCESS')).toBe(false); + expect(isActiveTestStatus('FAILED')).toBe(false); + }); +}); diff --git a/__tests__/shared/utils/mm-review-summations.test.js b/__tests__/shared/utils/mm-review-summations.test.js index 92e32c57f..0edddc373 100644 --- a/__tests__/shared/utils/mm-review-summations.test.js +++ b/__tests__/shared/utils/mm-review-summations.test.js @@ -193,6 +193,7 @@ describe('buildMmSubmissionData', () => { testType: 'system', }, reviewedDate: '2026-05-26T06:52:08.038Z', + updatedAt: '2026-05-26T07:00:00.000Z', submissionId: 'submission-latest', submitterHandle: 'topacc_four', submitterId: '1004', @@ -247,6 +248,7 @@ describe('buildMmSubmissionData', () => { expect.objectContaining({ id: 'summation-example' }), ]), submissionId: 'submission-latest', + submissionTime: '2026-05-26T06:02:59.385Z', }), ]); }); diff --git a/src/shared/components/challenge-detail/MySubmissions/SubmissionsDetail/index.jsx b/src/shared/components/challenge-detail/MySubmissions/SubmissionsDetail/index.jsx index 821ad6435..8e09c9a7b 100644 --- a/src/shared/components/challenge-detail/MySubmissions/SubmissionsDetail/index.jsx +++ b/src/shared/components/challenge-detail/MySubmissions/SubmissionsDetail/index.jsx @@ -148,7 +148,7 @@ class SubmissionsDetailView extends React.Component { const { sortedSubmissions } = this.state; const { isAccepted } = getSubmissionStatus(submission); const finalStatusStyleName = isAccepted ? 'status-complete' : 'status-in-queue'; - const finalStatusLabel = isAccepted ? 'Complete' : 'In Queue'; + const finalStatusLabel = isAccepted ? 'Complete' : 'Preparing'; const { field, sort } = this.getSubmissionsSortParam(); const revertSort = (sort === 'desc') ? 'asc' : 'desc'; diff --git a/src/shared/components/challenge-detail/MySubmissions/SubmissionsList/index.jsx b/src/shared/components/challenge-detail/MySubmissions/SubmissionsList/index.jsx index 32cb85f68..f34971046 100644 --- a/src/shared/components/challenge-detail/MySubmissions/SubmissionsList/index.jsx +++ b/src/shared/components/challenge-detail/MySubmissions/SubmissionsList/index.jsx @@ -135,6 +135,17 @@ function normalizeTestStatus(value) { return undefined; } +/** + * Returns whether a Marathon Match test status still represents active testing. + * + * @param {String} status normalized test status from review summation metadata. + * @returns {Boolean} true when scoring should remain hidden until testing completes. + */ +export function isActiveTestStatus(status) { + const normalized = normalizeTestStatus(status); + return Boolean(normalized && ['FAILED', 'SUCCESS'].indexOf(normalized) < 0); +} + /** * Normalizes Review API test progress metadata into the supported 0-to-1 range. * @@ -622,6 +633,8 @@ class SubmissionsListView extends React.Component { { sortedSubmissions.map((mySubmission) => { let { finalScore, provisionalScore } = getDisplayedScores(mySubmission); + const testProgress = getSubmissionTestProgress(mySubmission); + const hideProvisionalScore = isActiveTestStatus(testProgress.status); if (_.isNumber(finalScore)) { if (finalScore > 0) { finalScore = finalScore.toFixed(2); @@ -629,7 +642,9 @@ class SubmissionsListView extends React.Component { } else { finalScore = 'N/A'; } - if (_.isNumber(provisionalScore)) { + if (hideProvisionalScore) { + provisionalScore = '-'; + } else if (_.isNumber(provisionalScore)) { if (provisionalScore > 0) { provisionalScore = provisionalScore.toFixed(2); } @@ -637,9 +652,8 @@ class SubmissionsListView extends React.Component { provisionalScore = 'N/A'; } const { isAccepted } = getSubmissionStatus(mySubmission); - const testProgress = getSubmissionTestProgress(mySubmission); const statusStyleName = isAccepted ? 'accepted' : 'queue'; - const statusLabel = isAccepted ? 'Accepted' : 'In Queue'; + const statusLabel = isAccepted ? 'Accepted' : 'Preparing'; const displaySubmissionId = getDisplaySubmissionId(mySubmission); const submissionCreatedTime = getSubmissionCreatedTime(mySubmission); const submissionTimeDisplay = submissionCreatedTime diff --git a/src/shared/utils/mm-review-summations.js b/src/shared/utils/mm-review-summations.js index caf58f6b4..60274757e 100644 --- a/src/shared/utils/mm-review-summations.js +++ b/src/shared/utils/mm-review-summations.js @@ -120,13 +120,10 @@ function getSubmissionRating(submission) { function getSubmissionTimestamp(submission) { const candidates = [ - _.get(submission, 'submissionTime'), _.get(submission, 'submittedDate'), - _.get(submission, 'created'), _.get(submission, 'createdAt'), - _.get(submission, 'reviewedDate'), - _.get(submission, 'updated'), - _.get(submission, 'updatedAt'), + _.get(submission, 'created'), + _.get(submission, 'submissionTime'), ]; return _.find(candidates, value => !!value) || null; } @@ -358,11 +355,12 @@ function updateSubmissionEntryFromSubmission( let { submissionTime, latestTimestamp } = baseEntry; let submissionIsLatest = baseEntry.isLatest; + if (timestamp) { + submissionTime = timestamp; + } + if (timestampValue > latestTimestamp) { latestTimestamp = timestampValue; - submissionTime = timestamp || submissionTime; - } else if (!submissionTime && timestamp) { - submissionTime = timestamp; } if (!_.isNil(isLatest)) {