From f745954b7c9ce1ea47fd7a0b9f397a718fa795c1 Mon Sep 17 00:00:00 2001
From: Leangseu Kim <83240113+leangseu-edx@users.noreply.github.com>
Date: Wed, 14 Feb 2024 11:18:12 -0500
Subject: [PATCH] Lk/unit test (#185)
* chore: add tests
* test: confirm dialog
* test: criterion container
* test: file preview
* test: update some unaccounted error
* test: file upload
* chore: linting
* test: hotjar survey
* test: info popover
* test: instructions
* chore: linting
* test: modal actions
* test: progress bar
* test: prompt
* test: action button and modal container
* test: text response
* test: assessment view
* test: grade view view
* chore: add more ignore list for coverage
* test: update file card
* test: xblock view
* test: xblock studio view
* test: submission view
* chore: fix format date consistency
* chore: add file size
* chore: update linting
---
jest.config.js | 2 +
src/components/ActionButton.test.jsx | 28 ++
.../__snapshots__/index.test.jsx.snap | 47 +++
src/components/AppContainer/index.test.jsx | 59 +++
.../AssessmentActions.test.jsx | 72 ++++
.../__snapshots__/index.test.jsx.snap | 31 ++
.../OverallFeedback/index.jsx | 2 +-
.../OverallFeedback/index.test.jsx | 58 +++
.../AssessmentActions.test.jsx.snap | 40 +++
.../__snapshots__/index.test.jsx.snap | 125 +++++++
.../EditableAssessment/index.test.jsx | 37 ++
.../AssessmentCriteria.test.jsx | 63 ++++
.../CollapsibleAssessment.test.jsx | 36 ++
.../ReadonlyAssessment/Feedback.test.jsx | 45 +++
.../ReadOnlyAssessment.test.jsx | 46 +++
.../AssessmentCriteria.test.jsx.snap | 40 +++
.../CollapsibleAssessment.test.jsx.snap | 34 ++
.../__snapshots__/Feedback.test.jsx.snap | 224 ++++++++++++
.../ReadOnlyAssessment.test.jsx.snap | 86 +++++
.../__snapshots__/index.test.jsx.snap | 41 +++
.../Assessment/ReadonlyAssessment/index.jsx | 4 +-
.../ReadonlyAssessment/index.test.jsx | 43 +++
.../__snapshots__/index.test.jsx.snap | 11 +
src/components/Assessment/index.jsx | 5 +-
src/components/Assessment/index.test.jsx | 38 ++
.../Assessment/useAssessmentData.js | 7 +-
.../Assessment/useAssessmentData.test.js | 47 +++
.../__snapshots__/index.test.jsx.snap | 27 ++
src/components/ConfirmDialog/index.test.jsx | 19 +
.../CriterionFeedback.test.jsx | 86 +++++
.../GradedCriterion.test.jsx | 24 ++
.../RadioCriterion.test.jsx | 108 ++++++
.../ReviewCriterion.test.jsx | 34 ++
.../CriterionFeedback.test.jsx.snap | 39 ++
.../GradedCriterion.test.jsx.snap | 72 ++++
.../RadioCriterion.test.jsx.snap | 136 +++++++
.../ReviewCriterion.test.jsx.snap | 80 +++++
.../__snapshots__/index.test.jsx.snap | 102 ++++++
.../CriterionContainer/index.test.jsx | 44 +++
.../__snapshots__/index.test.jsx.snap | 28 ++
.../FileRenderer/Banners/ErrorBanner.test.jsx | 32 ++
.../Banners/LoadingBanner.test.jsx | 10 +
.../__snapshots__/ErrorBanner.test.jsx.snap | 34 ++
.../__snapshots__/LoadingBanner.test.jsx.snap | 12 +
.../BaseRenderers/ImageRenderer.test.jsx | 17 +
.../BaseRenderers/PDFRenderer.test.jsx | 67 ++++
.../BaseRenderers/TXTRenderer.test.jsx | 20 ++
.../__snapshots__/ImageRenderer.test.jsx.snap | 11 +
.../__snapshots__/PDFRenderer.test.jsx.snap | 135 +++++++
.../__snapshots__/TXTRenderer.test.jsx.snap | 9 +
.../BaseRenderers/pdfHooks.test.js | 92 +++++
.../BaseRenderers/textHooks.test.js | 60 ++++
.../__snapshots__/index.test.jsx.snap | 28 ++
.../FileRenderer/FileCard/index.test.jsx | 20 ++
.../__snapshots__/index.test.jsx.snap | 47 +++
.../components/FileRenderer/hooks.test.js | 46 +++
.../components/FileRenderer/index.jsx | 9 +-
.../components/FileRenderer/index.test.jsx | 62 ++++
src/components/FilePreview/index.test.jsx | 57 +++
src/components/FileUpload/ActionCell.test.jsx | 48 +++
.../FileUpload/FileDownload.test.jsx | 41 +++
.../FileUpload/FileMetaDisplay.test.jsx | 25 ++
.../FileUpload/UploadConfirmModal.jsx | 3 +-
.../FileUpload/UploadConfirmModal.test.jsx | 41 +++
.../__snapshots__/ActionCell.test.jsx.snap | 17 +
.../__snapshots__/FileDownload.test.jsx.snap | 56 +++
.../FileMetaDisplay.test.jsx.snap | 89 +++++
.../UploadConfirmModal.test.jsx.snap | 111 ++++++
.../__snapshots__/index.test.jsx.snap | 338 ++++++++++++++++++
src/components/FileUpload/hooks.js | 1 +
src/components/FileUpload/hooks.test.js | 110 ++++++
src/components/FileUpload/index.jsx | 10 +-
src/components/FileUpload/index.test.jsx | 127 +++++++
src/components/HotjarSurvey/index.jsx | 6 +-
src/components/HotjarSurvey/index.test.jsx | 113 ++++++
.../__snapshots__/index.test.jsx.snap | 34 ++
src/components/InfoPopover/index.jsx | 2 +-
src/components/InfoPopover/index.test.jsx | 20 ++
.../__snapshots__/index.test.jsx.snap | 19 +
src/components/Instructions/index.jsx | 11 +-
src/components/Instructions/index.test.jsx | 23 ++
...sMessage.jsx => useInstructionsMessage.js} | 0
.../useInstructionsMessage.test.js | 74 ++++
.../__snapshots__/index.test.jsx.snap | 50 +++
.../hooks/useFinishedStateActions.test.js | 132 +++++++
.../hooks/useInProgressActions.test.js | 154 ++++++++
src/components/ModalActions/index.test.jsx | 70 ++++
src/components/ModalContainer.test.jsx | 47 +++
src/components/ProgressBar/ProgressStep.jsx | 2 +-
.../ProgressBar/ProgressStep.test.jsx | 85 +++++
.../__snapshots__/ProgressStep.test.jsx.snap | 177 +++++++++
.../__snapshots__/index.test.jsx.snap | 111 ++++++
src/components/ProgressBar/hooks.test.js | 128 +++++++
src/components/ProgressBar/index.jsx | 2 +-
src/components/ProgressBar/index.test.jsx | 68 ++++
.../Prompt/__snapshots__/index.test.jsx.snap | 68 ++++
src/components/Prompt/index.test.jsx | 78 ++++
.../__snapshots__/index.test.jsx.snap | 45 +++
src/components/TextResponse/index.test.jsx | 45 +++
.../__snapshots__/ActionButton.test.jsx.snap | 21 ++
.../ModalContainer.test.jsx.snap | 90 +++++
src/setupTest.js | 24 +-
.../__snapshots__/index.test.jsx.snap | 45 +++
.../BaseAssessmentView/index.test.jsx | 24 ++
.../__snapshots__/index.test.jsx.snap | 86 +++++
src/views/AssessmentView/index.jsx | 2 +-
src/views/AssessmentView/index.test.jsx | 67 ++++
src/views/AssessmentView/useAssessmentData.js | 7 +-
.../AssessmentView/useAssessmentData.test.js | 73 ++++
src/views/GradeView/Content.test.jsx | 36 ++
src/views/GradeView/FinalGrade.jsx | 4 +-
src/views/GradeView/FinalGrade.test.jsx | 59 +++
.../__snapshots__/Content.test.jsx.snap | 99 +++++
.../__snapshots__/FinalGrade.test.jsx.snap | 70 ++++
.../__snapshots__/index.test.jsx.snap | 133 +++++++
src/views/GradeView/index.test.jsx | 18 +
.../SubmissionView/SubmissionPrompts.jsx | 41 ++-
.../SubmissionView/SubmissionPrompts.test.jsx | 88 +++++
.../TextResponseEditor/LaTextPreview.test.jsx | 10 +
.../__snapshots__/LaTextPreview.test.jsx.snap | 15 +
.../SubmissionPrompts.test.jsx.snap | 72 ++++
.../__snapshots__/index.test.jsx.snap | 112 ++++++
.../hooks/useUploadedFilesData.js | 4 +-
.../hooks/useUploadedFilesData.test.js | 46 +++
src/views/SubmissionView/index.jsx | 2 +-
src/views/SubmissionView/index.test.jsx | 47 +++
.../__snapshots__/index.test.jsx.snap | 16 +
.../StudioSchedule/FormatDateTime.jsx | 2 +-
.../StudioSchedule/FormatDateTime.test.jsx | 15 +
.../StudioSchedule/StepInfo.test.jsx | 17 +
.../FormatDateTime.test.jsx.snap | 13 +
.../__snapshots__/StepInfo.test.jsx.snap | 28 ++
.../__snapshots__/index.test.jsx.snap | 85 +++++
.../components/StudioSchedule/index.test.jsx | 61 ++++
.../components/StudioViewPrompt.jsx | 22 +-
.../components/StudioViewPrompt.test.jsx | 36 ++
.../components/StudioViewRubric.jsx | 2 +-
.../components/StudioViewRubric.test.jsx | 68 ++++
.../FileUploadConfig.test.jsx | 34 ++
.../RequiredConfig.test.jsx | 20 ++
.../FileUploadConfig.test.jsx.snap | 24 ++
.../RequiredConfig.test.jsx.snap | 19 +
.../__snapshots__/index.test.jsx.snap | 127 +++++++
.../components/StudioViewSettings/index.jsx | 2 +-
.../StudioViewSettings/index.test.jsx | 72 ++++
.../components/StudioViewSteps.test.jsx | 44 +++
.../components/StudioViewTitle.test.jsx | 44 +++
.../StudioViewPrompt.test.jsx.snap | 22 ++
.../StudioViewRubric.test.jsx.snap | 122 +++++++
.../StudioViewSteps.test.jsx.snap | 60 ++++
.../StudioViewTitle.test.jsx.snap | 33 ++
src/views/XBlockStudioView/index.jsx | 2 +-
src/views/XBlockStudioView/index.test.jsx | 26 ++
.../Actions/__snapshots__/index.test.jsx.snap | 101 ++++++
src/views/XBlockView/Actions/index.jsx | 30 +-
src/views/XBlockView/Actions/index.test.jsx | 107 ++++++
.../__snapshots__/index.test.jsx.snap | 9 +
.../StatusRow/DueDateMessage/index.test.jsx | 15 +
.../DueDateMessage/useDueDateMessage.js | 11 +-
.../DueDateMessage/useDueDateMessage.test.js | 66 ++++
.../__snapshots__/index.test.jsx.snap | 9 +
.../StatusRow/StatusBadge/index.test.jsx | 18 +
.../StatusRow/StatusBadge/useBadgeConfig.js | 2 +-
.../StatusBadge/useBadgeConfig.test.js | 62 ++++
.../__snapshots__/index.test.jsx.snap | 10 +
src/views/XBlockView/StatusRow/index.test.jsx | 15 +
.../__snapshots__/index.test.jsx.snap | 72 ++++
src/views/XBlockView/index.jsx | 2 +-
src/views/XBlockView/index.test.jsx | 65 ++++
169 files changed, 8232 insertions(+), 92 deletions(-)
create mode 100644 src/components/ActionButton.test.jsx
create mode 100644 src/components/AppContainer/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/AppContainer/index.test.jsx
create mode 100644 src/components/Assessment/EditableAssessment/AssessmentActions.test.jsx
create mode 100644 src/components/Assessment/EditableAssessment/OverallFeedback/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/Assessment/EditableAssessment/OverallFeedback/index.test.jsx
create mode 100644 src/components/Assessment/EditableAssessment/__snapshots__/AssessmentActions.test.jsx.snap
create mode 100644 src/components/Assessment/EditableAssessment/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/Assessment/EditableAssessment/index.test.jsx
create mode 100644 src/components/Assessment/ReadonlyAssessment/AssessmentCriteria.test.jsx
create mode 100644 src/components/Assessment/ReadonlyAssessment/CollapsibleAssessment.test.jsx
create mode 100644 src/components/Assessment/ReadonlyAssessment/Feedback.test.jsx
create mode 100644 src/components/Assessment/ReadonlyAssessment/ReadOnlyAssessment.test.jsx
create mode 100644 src/components/Assessment/ReadonlyAssessment/__snapshots__/AssessmentCriteria.test.jsx.snap
create mode 100644 src/components/Assessment/ReadonlyAssessment/__snapshots__/CollapsibleAssessment.test.jsx.snap
create mode 100644 src/components/Assessment/ReadonlyAssessment/__snapshots__/Feedback.test.jsx.snap
create mode 100644 src/components/Assessment/ReadonlyAssessment/__snapshots__/ReadOnlyAssessment.test.jsx.snap
create mode 100644 src/components/Assessment/ReadonlyAssessment/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/Assessment/ReadonlyAssessment/index.test.jsx
create mode 100644 src/components/Assessment/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/Assessment/index.test.jsx
create mode 100644 src/components/Assessment/useAssessmentData.test.js
create mode 100644 src/components/ConfirmDialog/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/ConfirmDialog/index.test.jsx
create mode 100644 src/components/CriterionContainer/CriterionFeedback.test.jsx
create mode 100644 src/components/CriterionContainer/GradedCriterion.test.jsx
create mode 100644 src/components/CriterionContainer/RadioCriterion.test.jsx
create mode 100644 src/components/CriterionContainer/ReviewCriterion.test.jsx
create mode 100644 src/components/CriterionContainer/__snapshots__/CriterionFeedback.test.jsx.snap
create mode 100644 src/components/CriterionContainer/__snapshots__/GradedCriterion.test.jsx.snap
create mode 100644 src/components/CriterionContainer/__snapshots__/RadioCriterion.test.jsx.snap
create mode 100644 src/components/CriterionContainer/__snapshots__/ReviewCriterion.test.jsx.snap
create mode 100644 src/components/CriterionContainer/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/CriterionContainer/index.test.jsx
create mode 100644 src/components/FilePreview/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/FilePreview/components/FileRenderer/Banners/ErrorBanner.test.jsx
create mode 100644 src/components/FilePreview/components/FileRenderer/Banners/LoadingBanner.test.jsx
create mode 100644 src/components/FilePreview/components/FileRenderer/Banners/__snapshots__/ErrorBanner.test.jsx.snap
create mode 100644 src/components/FilePreview/components/FileRenderer/Banners/__snapshots__/LoadingBanner.test.jsx.snap
create mode 100644 src/components/FilePreview/components/FileRenderer/BaseRenderers/ImageRenderer.test.jsx
create mode 100644 src/components/FilePreview/components/FileRenderer/BaseRenderers/PDFRenderer.test.jsx
create mode 100644 src/components/FilePreview/components/FileRenderer/BaseRenderers/TXTRenderer.test.jsx
create mode 100644 src/components/FilePreview/components/FileRenderer/BaseRenderers/__snapshots__/ImageRenderer.test.jsx.snap
create mode 100644 src/components/FilePreview/components/FileRenderer/BaseRenderers/__snapshots__/PDFRenderer.test.jsx.snap
create mode 100644 src/components/FilePreview/components/FileRenderer/BaseRenderers/__snapshots__/TXTRenderer.test.jsx.snap
create mode 100644 src/components/FilePreview/components/FileRenderer/BaseRenderers/pdfHooks.test.js
create mode 100644 src/components/FilePreview/components/FileRenderer/BaseRenderers/textHooks.test.js
create mode 100644 src/components/FilePreview/components/FileRenderer/FileCard/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/FilePreview/components/FileRenderer/FileCard/index.test.jsx
create mode 100644 src/components/FilePreview/components/FileRenderer/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/FilePreview/components/FileRenderer/hooks.test.js
create mode 100644 src/components/FilePreview/components/FileRenderer/index.test.jsx
create mode 100644 src/components/FilePreview/index.test.jsx
create mode 100644 src/components/FileUpload/ActionCell.test.jsx
create mode 100644 src/components/FileUpload/FileDownload.test.jsx
create mode 100644 src/components/FileUpload/FileMetaDisplay.test.jsx
create mode 100644 src/components/FileUpload/UploadConfirmModal.test.jsx
create mode 100644 src/components/FileUpload/__snapshots__/ActionCell.test.jsx.snap
create mode 100644 src/components/FileUpload/__snapshots__/FileDownload.test.jsx.snap
create mode 100644 src/components/FileUpload/__snapshots__/FileMetaDisplay.test.jsx.snap
create mode 100644 src/components/FileUpload/__snapshots__/UploadConfirmModal.test.jsx.snap
create mode 100644 src/components/FileUpload/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/FileUpload/hooks.test.js
create mode 100644 src/components/FileUpload/index.test.jsx
create mode 100644 src/components/HotjarSurvey/index.test.jsx
create mode 100644 src/components/InfoPopover/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/InfoPopover/index.test.jsx
create mode 100644 src/components/Instructions/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/Instructions/index.test.jsx
rename src/components/Instructions/{useInstructionsMessage.jsx => useInstructionsMessage.js} (100%)
create mode 100644 src/components/Instructions/useInstructionsMessage.test.js
create mode 100644 src/components/ModalActions/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/ModalActions/hooks/useFinishedStateActions.test.js
create mode 100644 src/components/ModalActions/hooks/useInProgressActions.test.js
create mode 100644 src/components/ModalActions/index.test.jsx
create mode 100644 src/components/ModalContainer.test.jsx
create mode 100644 src/components/ProgressBar/ProgressStep.test.jsx
create mode 100644 src/components/ProgressBar/__snapshots__/ProgressStep.test.jsx.snap
create mode 100644 src/components/ProgressBar/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/ProgressBar/hooks.test.js
create mode 100644 src/components/ProgressBar/index.test.jsx
create mode 100644 src/components/Prompt/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/Prompt/index.test.jsx
create mode 100644 src/components/TextResponse/__snapshots__/index.test.jsx.snap
create mode 100644 src/components/TextResponse/index.test.jsx
create mode 100644 src/components/__snapshots__/ActionButton.test.jsx.snap
create mode 100644 src/components/__snapshots__/ModalContainer.test.jsx.snap
create mode 100644 src/views/AssessmentView/BaseAssessmentView/__snapshots__/index.test.jsx.snap
create mode 100644 src/views/AssessmentView/BaseAssessmentView/index.test.jsx
create mode 100644 src/views/AssessmentView/__snapshots__/index.test.jsx.snap
create mode 100644 src/views/AssessmentView/index.test.jsx
create mode 100644 src/views/AssessmentView/useAssessmentData.test.js
create mode 100644 src/views/GradeView/Content.test.jsx
create mode 100644 src/views/GradeView/FinalGrade.test.jsx
create mode 100644 src/views/GradeView/__snapshots__/Content.test.jsx.snap
create mode 100644 src/views/GradeView/__snapshots__/FinalGrade.test.jsx.snap
create mode 100644 src/views/GradeView/__snapshots__/index.test.jsx.snap
create mode 100644 src/views/GradeView/index.test.jsx
create mode 100644 src/views/SubmissionView/SubmissionPrompts.test.jsx
create mode 100644 src/views/SubmissionView/TextResponseEditor/LaTextPreview.test.jsx
create mode 100644 src/views/SubmissionView/TextResponseEditor/__snapshots__/LaTextPreview.test.jsx.snap
create mode 100644 src/views/SubmissionView/__snapshots__/SubmissionPrompts.test.jsx.snap
create mode 100644 src/views/SubmissionView/__snapshots__/index.test.jsx.snap
create mode 100644 src/views/SubmissionView/hooks/useUploadedFilesData.test.js
create mode 100644 src/views/SubmissionView/index.test.jsx
create mode 100644 src/views/XBlockStudioView/__snapshots__/index.test.jsx.snap
create mode 100644 src/views/XBlockStudioView/components/StudioSchedule/FormatDateTime.test.jsx
create mode 100644 src/views/XBlockStudioView/components/StudioSchedule/StepInfo.test.jsx
create mode 100644 src/views/XBlockStudioView/components/StudioSchedule/__snapshots__/FormatDateTime.test.jsx.snap
create mode 100644 src/views/XBlockStudioView/components/StudioSchedule/__snapshots__/StepInfo.test.jsx.snap
create mode 100644 src/views/XBlockStudioView/components/StudioSchedule/__snapshots__/index.test.jsx.snap
create mode 100644 src/views/XBlockStudioView/components/StudioSchedule/index.test.jsx
create mode 100644 src/views/XBlockStudioView/components/StudioViewPrompt.test.jsx
create mode 100644 src/views/XBlockStudioView/components/StudioViewRubric.test.jsx
create mode 100644 src/views/XBlockStudioView/components/StudioViewSettings/FileUploadConfig.test.jsx
create mode 100644 src/views/XBlockStudioView/components/StudioViewSettings/RequiredConfig.test.jsx
create mode 100644 src/views/XBlockStudioView/components/StudioViewSettings/__snapshots__/FileUploadConfig.test.jsx.snap
create mode 100644 src/views/XBlockStudioView/components/StudioViewSettings/__snapshots__/RequiredConfig.test.jsx.snap
create mode 100644 src/views/XBlockStudioView/components/StudioViewSettings/__snapshots__/index.test.jsx.snap
create mode 100644 src/views/XBlockStudioView/components/StudioViewSettings/index.test.jsx
create mode 100644 src/views/XBlockStudioView/components/StudioViewSteps.test.jsx
create mode 100644 src/views/XBlockStudioView/components/StudioViewTitle.test.jsx
create mode 100644 src/views/XBlockStudioView/components/__snapshots__/StudioViewPrompt.test.jsx.snap
create mode 100644 src/views/XBlockStudioView/components/__snapshots__/StudioViewRubric.test.jsx.snap
create mode 100644 src/views/XBlockStudioView/components/__snapshots__/StudioViewSteps.test.jsx.snap
create mode 100644 src/views/XBlockStudioView/components/__snapshots__/StudioViewTitle.test.jsx.snap
create mode 100644 src/views/XBlockStudioView/index.test.jsx
create mode 100644 src/views/XBlockView/Actions/__snapshots__/index.test.jsx.snap
create mode 100644 src/views/XBlockView/Actions/index.test.jsx
create mode 100644 src/views/XBlockView/StatusRow/DueDateMessage/__snapshots__/index.test.jsx.snap
create mode 100644 src/views/XBlockView/StatusRow/DueDateMessage/index.test.jsx
create mode 100644 src/views/XBlockView/StatusRow/DueDateMessage/useDueDateMessage.test.js
create mode 100644 src/views/XBlockView/StatusRow/StatusBadge/__snapshots__/index.test.jsx.snap
create mode 100644 src/views/XBlockView/StatusRow/StatusBadge/index.test.jsx
create mode 100644 src/views/XBlockView/StatusRow/StatusBadge/useBadgeConfig.test.js
create mode 100644 src/views/XBlockView/StatusRow/__snapshots__/index.test.jsx.snap
create mode 100644 src/views/XBlockView/StatusRow/index.test.jsx
create mode 100644 src/views/XBlockView/__snapshots__/index.test.jsx.snap
create mode 100644 src/views/XBlockView/index.test.jsx
diff --git a/jest.config.js b/jest.config.js
index 23aa0724..0b5f7dd3 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -12,6 +12,8 @@ const config = createConfig('jest', {
'src/hooks/testHooks', // don't check coverage for jest mocking tools
// 'src/data/services/lms/fakeData', // don't check coverage for mock data
'src/test', // don't check coverage for test integration test utils
+ 'messages.js', // don't check coverage for i18n messages
+ 'src/data/services/lms/fakeData', // don't check coverage for fake data
],
testTimeout: 120000,
});
diff --git a/src/components/ActionButton.test.jsx b/src/components/ActionButton.test.jsx
new file mode 100644
index 00000000..3af2dfd8
--- /dev/null
+++ b/src/components/ActionButton.test.jsx
@@ -0,0 +1,28 @@
+import { shallow } from '@edx/react-unit-test-utils';
+
+import ActionButton from './ActionButton';
+
+describe('
+ Criterion Description +
++ Selected Option + : + 5 + + Points +
++ Comment Body +
++ Criterion Description +
++ Selected Option + : + 5 + + Points +
++ Selected Option + : + 5 + + Points +
++ Comment Body +
++ Criterion Description +
++ Comment Body +
++ + 1 + : +
++ + 2 + : +
++ content ++`; diff --git a/src/components/FilePreview/components/FileRenderer/BaseRenderers/pdfHooks.test.js b/src/components/FilePreview/components/FileRenderer/BaseRenderers/pdfHooks.test.js new file mode 100644 index 00000000..4d6e9c11 --- /dev/null +++ b/src/components/FilePreview/components/FileRenderer/BaseRenderers/pdfHooks.test.js @@ -0,0 +1,92 @@ +import React from 'react'; +import { mockUseKeyedState } from '@edx/react-unit-test-utils'; +import { when } from 'jest-when'; + +import { + usePDFRendererData, safeSetPageNumber, stateKeys, initialState, +} from './pdfHooks'; + +const state = mockUseKeyedState(stateKeys); + +describe('PDF Renderer hooks', () => { + describe('safeSetPageNumber', () => { + it('returns value handler that sets page number if valid', () => { + const rawSetPageNumber = jest.fn(); + const numPages = 10; + const goToPage = safeSetPageNumber({ numPages, rawSetPageNumber }); + // should not call rawSetPageNumber when page number smaller than 1 or greater than numPages + goToPage(0); + expect(rawSetPageNumber).not.toHaveBeenCalled(); + goToPage(numPages + 1); + expect(rawSetPageNumber).not.toHaveBeenCalled(); + // should call rawSetPageNumber when page number is valid + goToPage(numPages); + expect(rawSetPageNumber).toHaveBeenCalledWith(numPages); + }); + }); + + describe('usePDFRendererData', () => { + const onSuccess = jest.fn(); + const onError = jest.fn(); + + beforeEach(() => { + jest.clearAllMocks(); + state.mock(); + }); + afterEach(() => { + state.resetVals(); + }); + + it('start with initial state', () => { + usePDFRendererData({}); + state.expectInitializedWith(stateKeys.pageNumber, initialState.pageNumber); + state.expectInitializedWith(stateKeys.numPages, initialState.numPages); + state.expectInitializedWith(stateKeys.relativeHeight, initialState.relativeHeight); + }); + + it('calls onSuccess and sets numPages based on args', () => { + const out = usePDFRendererData({ onSuccess }); + out.onDocumentLoadSuccess({ numPages: 5 }); + expect(onSuccess).toHaveBeenCalled(); + state.expectSetStateCalledWith(stateKeys.numPages, 5); + }); + + it('sets relative height based on page size', () => { + when(React.useRef) + .calledWith() + .mockReturnValueOnce({ + current: { getBoundingClientRect: () => ({ width: 20 }) }, + }); + const out = usePDFRendererData({}); + + const page = { view: [0, 0, 20, 30] }; + out.onLoadPageSuccess(page); + expect(state.setState.relativeHeight).toHaveBeenCalledWith(30); + }); + + it('calls onErro if error happened', () => { + const out = usePDFRendererData({ onError }); + out.onDocumentLoadError('notFound'); + expect(onError).toHaveBeenCalledWith('notFound'); + }); + + it('has good page logic', () => { + // start with 3 pages + // this seems to be the only way to mock initial value + initialState.pageNumber = 2; + initialState.numPages = 3; + const out = usePDFRendererData({ onSuccess }); + // go to next page + out.onNextPageButtonClick(); + state.expectSetStateCalledWith(stateKeys.pageNumber, 3); + + // go to prev page + out.onPrevPageButtonClick(); + state.expectSetStateCalledWith(stateKeys.pageNumber, 1); + + // reset initial state + initialState.pageNumber = 1; + initialState.numPages = 1; + }); + }); +}); diff --git a/src/components/FilePreview/components/FileRenderer/BaseRenderers/textHooks.test.js b/src/components/FilePreview/components/FileRenderer/BaseRenderers/textHooks.test.js new file mode 100644 index 00000000..1a5c6179 --- /dev/null +++ b/src/components/FilePreview/components/FileRenderer/BaseRenderers/textHooks.test.js @@ -0,0 +1,60 @@ +import React from 'react'; +import { mockUseKeyedState } from '@edx/react-unit-test-utils'; + +import axios from 'axios'; +import { useTextRendererData, fetchFile, stateKeys } from './textHooks'; + +jest.mock('axios'); + +const state = mockUseKeyedState(stateKeys); + +describe('textHooks', () => { + const url = 'http://example.com'; + const setContent = jest.fn(); + const onError = jest.fn(); + const onSuccess = jest.fn(); + + describe('fetchFile', () => { + it('should call onSuccess and setContent when the request is successful', async () => { + const response = { data: 'file content' }; + axios.get.mockResolvedValue(response); + await fetchFile({ setContent, url, onSuccess }); + expect(onSuccess).toHaveBeenCalled(); + expect(setContent).toHaveBeenCalledWith(response.data); + }); + + it('should call onError when the request fails', async () => { + const response = { response: { status: 404 } }; + axios.get.mockRejectedValue(response); + await fetchFile({ url, onError }); + expect(onError).toHaveBeenCalledWith(response.response.status); + }); + }); + + describe('useTextRendererData', () => { + beforeEach(() => { + jest.clearAllMocks(); + state.mock(); + }); + afterEach(() => { state.resetVals(); }); + + it('start with empty content', () => { + useTextRendererData({}); + state.expectInitializedWith(stateKeys.content, ''); + }); + + it('update content after useEffect get call', async () => { + axios.get.mockResolvedValue({ data: 'file content' }); + useTextRendererData({ url, onError, onSuccess }); + // wouldn't call before useEffect + expect(axios.get).not.toHaveBeenCalled(); + const [[cb]] = React.useEffect.mock.calls; + cb(); + // because fetchFile was written with async/await, we need to wait for the next tick + await new Promise(process.nextTick); + expect(axios.get).toHaveBeenCalled(); + expect(onSuccess).toHaveBeenCalled(); + state.expectSetStateCalledWith(stateKeys.content, 'file content'); + }); + }); +}); diff --git a/src/components/FilePreview/components/FileRenderer/FileCard/__snapshots__/index.test.jsx.snap b/src/components/FilePreview/components/FileRenderer/FileCard/__snapshots__/index.test.jsx.snap new file mode 100644 index 00000000..69b7500f --- /dev/null +++ b/src/components/FilePreview/components/FileRenderer/FileCard/__snapshots__/index.test.jsx.snap @@ -0,0 +1,28 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`
+ + Instructions + : + + arbitrarilyInstructionsMessage +
+{subLabel}
+{subLabel}
)}+ Past due! +
++ 1 / 2 +
+- {effectiveAssessmentType === 'peer' + {effectiveAssessmentType === stepNames.peer ? formatMessage(messages.peerAsFinalGradeInfo) : formatMessage(messages.finalGradeInfo, { step: effectiveAssessmentType })}
diff --git a/src/views/GradeView/FinalGrade.test.jsx b/src/views/GradeView/FinalGrade.test.jsx new file mode 100644 index 00000000..aac5526d --- /dev/null +++ b/src/views/GradeView/FinalGrade.test.jsx @@ -0,0 +1,59 @@ +import { shallow } from '@edx/react-unit-test-utils'; + +import { + useAssessmentData, + useStepInfo, +} from 'hooks/app'; +import { stepNames } from 'constants/index'; + +import FinalGrade from './FinalGrade'; + +jest.mock('hooks/app', () => ({ + useAssessmentData: jest.fn(), + useStepInfo: jest.fn(), +})); +jest.mock('components/InfoPopover', () => 'InfoPopover'); +jest.mock('components/Assessment/ReadonlyAssessment', () => 'ReadOnlyAssessment'); + +describe('
+ Your grade is based on your Peer assessment score for this problem. Other assessments don't count towards your final score.
+
+ Only the required number of peer grades will counted against your final grade. The others are shown, but are not included in your grade calculation
+
+ Your grade is based on your Self assessment score for this problem. Other assessments don't count towards your final score. +
++ Only the required number of peer grades will counted against your final grade. The others are shown, but are not included in your grade calculation +
++ Your grade is based on your self score for this problem. Other assessments don't count towards your final score. +
++ These grades are given to your response. However, these are not used to compute your final grade. +
+
+
+ test
+
+ start:
+
+
+
+ test
+
+ due:
+
+
+
+ Response
+
+ start:
+
+
+
+ Response
+
+ due:
+
+
+
+ Response
+
+ start:
+
+
+
+ Response
+
+ due:
+
+
{formatMessage(messages.criteriaNameLabel)}
{criterion.name}
diff --git a/src/views/XBlockStudioView/components/StudioViewRubric.test.jsx b/src/views/XBlockStudioView/components/StudioViewRubric.test.jsx
new file mode 100644
index 00000000..e816da96
--- /dev/null
+++ b/src/views/XBlockStudioView/components/StudioViewRubric.test.jsx
@@ -0,0 +1,68 @@
+import { shallow } from '@edx/react-unit-test-utils';
+
+import { useRubricConfig } from 'hooks/app';
+
+import StudioViewRubric from './StudioViewRubric';
+
+jest.mock('hooks/app', () => ({
+ useRubricConfig: jest.fn(),
+}));
+jest.mock('./XBlockStudioViewProvider', () => ({
+ useXBlockStudioViewContext: () => ({
+ rubricIsOpen: true,
+ toggleRubric: jest.fn().mockName('toggleRubric'),
+ }),
+}));
+
+describe('
+
+ File uploads:
+
+
+
+ File upload limit:
+
+
+ 10
+
+
+
+ Text response:
+
+
+
+ Response editor:
+
+
+ WYSIWYG editor
+
+
+
+ Allow LaTeX responses:
+
+
+ True
+
+
+
+ Top responses:
+
+
+ 10
+
+
+
+ Teams enabled:
+
+
+ True
+
+
+
+ Show rubric during response:
+
+
+ False
+
+
+
+ Text response:
+
+
+
+ Response editor:
+
+
+ Text editor
+
+
+
+ Allow LaTeX responses:
+
+
+ False
+
+
+
+ Teams enabled:
+
+
+ False
+
+
+
+ Show rubric during response:
+
+
+ False
+
+
+
{formatMessage(messages.topResponsesLabel)} {leaderboardConfig.numberOfEntries}
diff --git a/src/views/XBlockStudioView/components/StudioViewSettings/index.test.jsx b/src/views/XBlockStudioView/components/StudioViewSettings/index.test.jsx new file mode 100644 index 00000000..100c7d0e --- /dev/null +++ b/src/views/XBlockStudioView/components/StudioViewSettings/index.test.jsx @@ -0,0 +1,72 @@ +import { shallow } from '@edx/react-unit-test-utils'; + +import { useORAConfigData } from 'hooks/app'; + +import StudioViewSettings from './index'; + +jest.mock('hooks/app', () => ({ + useORAConfigData: jest.fn(), +})); +jest.mock('../XBlockStudioViewProvider', () => ({ + useXBlockStudioViewContext: () => ({ + settingIsOpen: true, + toggleStudioViewSetting: jest.fn().mockName('toggleStudioViewSetting'), + }), +})); +jest.mock('./RequiredConfig', () => 'RequiredConfig'); +jest.mock('./FileUploadConfig', () => 'FileUploadConfig'); + +describe('+ + Criteria name: + + criterion1 +
++ + Criteria description: + + description1 +
++ + Criteria options: + +
++ description1 +
++ description2 +
++ + Criteria name: + + criterion2 +
++ + Criteria description: + + description2 +
++ + Criteria options: + +
++ description2 +
++ + Step + + 1 + : + + + Self assessment + +
++ + Step + + 2 + : + + + Peer assessment + +
+