From 8ac23c71e286f3fa64ca885031cf3774551d492c Mon Sep 17 00:00:00 2001 From: Justin Gasper Date: Mon, 10 Aug 2026 08:37:55 +1000 Subject: [PATCH] PM-5789: Add submission placement rating guidelines What was broken Design challenge reviewers could select a Submission Place rating from 1 through 10 without any explanation that higher ratings represent better placements. Root cause The Submission Place question used the same generic scale selector as every other scorecard question, so the UI did not communicate the placement mapping. What was changed Added the 10-to-3 placement mapping and the 2-and-1 no-placement guidance below the Answer selector. The guidance is limited to Design-track SCALE questions named Submission Place. Any added/updated tests Added focused component coverage for the Design Submission Place case and negative coverage for non-Design challenges and unrelated scorecard questions. --- .../ScorecardQuestionEdit.module.scss | 9 + .../ScorecardQuestionEdit.spec.tsx | 174 ++++++++++++++++++ .../ScorecardQuestionEdit.tsx | 32 +++- 3 files changed, 213 insertions(+), 2 deletions(-) create mode 100644 src/apps/review/src/lib/components/Scorecard/ScorecardViewer/ScorecardQuestion/ScorecardQuestionEdit/ScorecardQuestionEdit.spec.tsx diff --git a/src/apps/review/src/lib/components/Scorecard/ScorecardViewer/ScorecardQuestion/ScorecardQuestionEdit/ScorecardQuestionEdit.module.scss b/src/apps/review/src/lib/components/Scorecard/ScorecardViewer/ScorecardQuestion/ScorecardQuestionEdit/ScorecardQuestionEdit.module.scss index 995aeed6d..2d443acc9 100644 --- a/src/apps/review/src/lib/components/Scorecard/ScorecardViewer/ScorecardQuestion/ScorecardQuestionEdit/ScorecardQuestionEdit.module.scss +++ b/src/apps/review/src/lib/components/Scorecard/ScorecardViewer/ScorecardQuestion/ScorecardQuestionEdit/ScorecardQuestionEdit.module.scss @@ -82,12 +82,21 @@ .answerWrap { display: flex; align-items: center; + flex-wrap: wrap; gap: $sp-4; .answerInput { width: 120px; } } +.placementGuidelines { + flex-basis: 100%; + order: 1; + color: #767676; + font-size: 14px; + line-height: 20px; +} + .responseTypeWrap { width: 240px; } diff --git a/src/apps/review/src/lib/components/Scorecard/ScorecardViewer/ScorecardQuestion/ScorecardQuestionEdit/ScorecardQuestionEdit.spec.tsx b/src/apps/review/src/lib/components/Scorecard/ScorecardViewer/ScorecardQuestion/ScorecardQuestionEdit/ScorecardQuestionEdit.spec.tsx new file mode 100644 index 000000000..44e7bb795 --- /dev/null +++ b/src/apps/review/src/lib/components/Scorecard/ScorecardViewer/ScorecardQuestion/ScorecardQuestionEdit/ScorecardQuestionEdit.spec.tsx @@ -0,0 +1,174 @@ +/* eslint-disable import/no-extraneous-dependencies, ordered-imports/ordered-imports */ +import { FC, useMemo } from 'react' +import { render, screen } from '@testing-library/react' +import { useForm } from 'react-hook-form' + +import type { + ChallengeDetailContextModel, + FormReviews, + ReviewItemInfo, + ScorecardQuestion, +} from '../../../../../models' +import { ChallengeDetailContext } from '../../../../../contexts/ChallengeDetailContext' + +import ScorecardQuestionEdit from './ScorecardQuestionEdit' + +const mockUseScorecardViewerContext = jest.fn() + +jest.mock('../../ScorecardViewer.context', () => ({ + useScorecardViewerContext: () => mockUseScorecardViewerContext(), +})) + +jest.mock('../../../../../utils', () => ({ + getScoreResponseOptions: () => [{ + label: '10', + value: '10', + }], +})) + +jest.mock('~/libs/ui', () => ({ + IconOutline: { + ChevronDownIcon: () => , + }, +}), { virtual: true }) + +jest.mock('~/apps/review/src/lib/assets/icons', () => ({ + IconComment: () => , +}), { virtual: true }) + +jest.mock('../../../../FieldMarkdownEditor', () => ({ + FieldMarkdownEditor: () =>