diff --git a/src/grading-settings/grading-scale/GradingScale.jsx b/src/grading-settings/grading-scale/GradingScale.jsx index 2e610cbc42..d4d7d21dfb 100644 --- a/src/grading-settings/grading-scale/GradingScale.jsx +++ b/src/grading-settings/grading-scale/GradingScale.jsx @@ -55,40 +55,44 @@ const GradingScale = ({ }, [gradingSegments, letters]); const addNewGradingSegment = () => { - setGradingSegments(prevSegments => { + setGradingSegments((prevSegments) => { + let updatedGradingSegment = []; if (prevSegments.length >= 5) { const segSize = MAXIMUM_SCALE_LENGTH / (prevSegments.length + 1); - return Array.from({ length: prevSegments.length + 1 }).map((_, i) => ( - { - current: 100 - i * segSize, - previous: 100 - (i + 1) * segSize, - } - )); - } - const firstSegment = prevSegments[prevSegments.length - 1]; - const secondSegment = prevSegments[prevSegments.length - 2]; - const newCurrentValue = Math.ceil((secondSegment.current - secondSegment.previous) / 2); - - const newSegment = { - current: (firstSegment.current + newCurrentValue), - previous: firstSegment.current, - }; + updatedGradingSegment = Array.from({ + length: prevSegments.length + 1, + }).map((_, i) => ({ + current: 100 - i * segSize, + previous: 100 - (i + 1) * segSize, + })); + } else { + const firstSegment = prevSegments[prevSegments.length - 1]; + const secondSegment = prevSegments[prevSegments.length - 2]; + const newCurrentValue = Math.ceil( + (secondSegment.current - secondSegment.previous) / 2, + ); + + const newSegment = { + current: firstSegment.current + newCurrentValue, + previous: firstSegment.current, + }; - const updatedSecondSegment = { - ...secondSegment, - previous: (firstSegment.current + newCurrentValue), - }; + const updatedSecondSegment = { + ...secondSegment, + previous: firstSegment.current + newCurrentValue, + }; + updatedGradingSegment = [ + ...prevSegments.slice(0, prevSegments.length - 2), + updatedSecondSegment, + newSegment, + firstSegment, + ]; + } showSavePrompt(true); setShowSuccessAlert(false); setOverrideInternetConnectionAlert(false); - - return [ - ...prevSegments.slice(0, prevSegments.length - 2), - updatedSecondSegment, - newSegment, - firstSegment, - ]; + return updatedGradingSegment; }); const nextIndex = (letters.length % defaultGradeDesignations.length); diff --git a/src/grading-settings/grading-scale/GradingScale.test.jsx b/src/grading-settings/grading-scale/GradingScale.test.jsx index f311c1757f..f0aee26b74 100644 --- a/src/grading-settings/grading-scale/GradingScale.test.jsx +++ b/src/grading-settings/grading-scale/GradingScale.test.jsx @@ -123,4 +123,33 @@ describe('', () => { expect(segmentInputs[1]).toHaveValue('Test'); }); }); + + it('should render GradingScale component with more than 5 grades', async () => { + const { debug, getAllByTestId } = render( + + + , + ); + await waitFor(() => { + const addNewSegmentBtn = getAllByTestId('grading-scale-btn-add-segment'); + expect(addNewSegmentBtn[0]).toBeInTheDocument(); + fireEvent.click(addNewSegmentBtn[0]); + const segments = getAllByTestId('grading-scale-segment-number'); + // Calculation is based on 100/6 i.e A, B, C, D, E, F which comes to 16.666666666666657 + expect(segments[0].textContent).toEqual('83.33333333333333 - 100'); + expect(segments[6].textContent).toEqual('0 - 15.666666666666657'); + }); + }); }); diff --git a/src/grading-settings/grading-scale/components/GradingScaleSegment.jsx b/src/grading-settings/grading-scale/components/GradingScaleSegment.jsx index 364814768a..62d78e5644 100644 --- a/src/grading-settings/grading-scale/components/GradingScaleSegment.jsx +++ b/src/grading-settings/grading-scale/components/GradingScaleSegment.jsx @@ -49,7 +49,7 @@ const GradingScaleSegment = ({ disabled={idx === gradingSegments.length} /> )} - + {gradingSegments[idx === 0 ? 0 : idx - 1]?.previous} - {value === 100 ? value : value - 1}