From 91fbb8978af3ee43de03bb51c0d99584ee484c00 Mon Sep 17 00:00:00 2001 From: Ben Warzeski Date: Wed, 11 May 2022 14:14:25 -0400 Subject: [PATCH] chore: update integration tests (#109) --- src/test/app.test.jsx | 74 ++++++++++++++++++++++++------------ src/test/inspector.js | 3 +- src/utils/StrictDict.js | 4 ++ src/utils/StrictDict.test.js | 1 + 4 files changed, 57 insertions(+), 25 deletions(-) diff --git a/src/test/app.test.jsx b/src/test/app.test.jsx index 1f2a558..bd7021a 100644 --- a/src/test/app.test.jsx +++ b/src/test/app.test.jsx @@ -124,8 +124,8 @@ const mockApi = () => { }; }, )); - api.fetchSubmissionStatus = jest.fn((submissionUUID) => new Promise( - (resolve) => resolve(fakeData.mockSubmissionStatus(submissionUUID)), + api.fetchSubmissionStatus = jest.fn((submissionUUID) => Promise.resolve( + fakeData.mockSubmissionStatus(submissionUUID) )); api.lockSubmission = jest.fn(() => new Promise( (resolve, reject) => { @@ -187,7 +187,7 @@ const initialize = async () => { */ const makeTableSelections = async () => { [0, 1, 2, 3, 4].forEach(index => userEvent.click(inspector.listView.listCheckbox(index))); - userEvent.click(inspector.listView.selectedBtn()); + userEvent.click(inspector.listView.selectedBtn(5)); // wait for navigation, which will show while request is pending try { await inspector.find.review.prevNav(); @@ -404,10 +404,12 @@ describe('ESG app integration tests', () => { await waitForRequestStatus(RequestKeys.fetchSubmission, RequestStates.completed); await userEvent.click(await inspector.find.review.startGradingBtn()); }); + describe('active grading', () => { beforeEach(async () => { await resolveFns.lock.success(); }); + const selectedOptions = [1, 2]; const feedback = ['feedback 0', 'feedback 1']; const overallFeedback = 'some overall feedback'; @@ -427,22 +429,17 @@ describe('ESG app integration tests', () => { await userEvent.type(criterionFeedback(0), feedback[0]); await userEvent.click(options[1]); await userEvent.type(criterionFeedback(1), feedback[1]); - await userEvent.type( - inspector.review.rubric.feedbackInput(), - overallFeedback - ); + await userEvent.type(inspector.review.rubric.feedbackInput(), overallFeedback); return; - }; // Verify active-grading state - const checkGradingState = () => { - const { gradingData } = getState().grading; - const entry = gradingData[submissionUUIDs[0]]; + const checkGradingState = (submissionUUID=submissionUUIDs[0]) => { + const entry = getState().grading.gradingData[submissionUUID]; const checkCriteria = (index) => { const criterion = entry.criteria[index]; - const rubricOptions = rubricConfig.criteria[index].options; - expect(criterion.selectedOption).toEqual(rubricOptions[selectedOptions[index]].name); + const selected = rubricConfig.criteria[index].options[selectedOptions[index]].name; + expect(criterion.selectedOption).toEqual(selected); expect(criterion.feedback).toEqual(feedback[index]); } [0, 1].forEach(checkCriteria); @@ -464,6 +461,22 @@ describe('ESG app integration tests', () => { expect(current.gradeStatus).toEqual(gradeStatuses.graded); expect(current.lockStatus).toEqual(lockStatuses.unlocked); } + + const loadNext = async () => { + await userEvent.click(inspector.review.nextNav()); + await resolveFns.fetch.success(); + }; + + const loadPrev = async () => { + await userEvent.click(inspector.review.prevNav()); + await resolveFns.fetch.success(); + } + + const startGrading = async () => { + await waitForRequestStatus(RequestKeys.fetchSubmission, RequestStates.completed); + await userEvent.click(await inspector.find.review.startGradingBtn()); + await resolveFns.lock.success(); + } /* test('submit pending', async (done) => { done(); @@ -472,17 +485,30 @@ describe('ESG app integration tests', () => { done(); }); */ - test('submit grade (success)', async (done) => { - expect(await inspector.find.review.submitGradeBtn()).toBeVisible(); - await setGrade(); - // checkGradingState(); - /* - await userEvent.click(inspector.review.rubric.submitGradeBtn()); - await resolveFns.updateGrade.success(); - checkGradeSuccess(); - */ - done(); - }); + test('grade and submit', + async (done) => { + expect(await inspector.find.review.submitGradeBtn()).toBeVisible(); + await setGrade(); + checkGradingState(); + await userEvent.click(inspector.review.rubric.submitGradeBtn()); + await resolveFns.updateGrade.success(); + checkGradeSuccess(); + done(); + }, + ); + test('grade, navigate, and return, maintaining gradingState', + async (done) => { + expect(await inspector.find.review.submitGradeBtn()).toBeVisible(); + await setGrade(); + checkGradingState(); + await loadNext(); + await waitForEqual(() => getState().grading.activeIndex, 1, 'activeIndex'); + await loadPrev(); + await waitForEqual(() => getState().grading.activeIndex, 0, 'activeIndex'); + checkGradingState(); + done(); + }, + ); }); }); }); diff --git a/src/test/inspector.js b/src/test/inspector.js index c582f30..49fadb0 100644 --- a/src/test/inspector.js +++ b/src/test/inspector.js @@ -32,7 +32,7 @@ class Inspector { return { table, tableRows, - selectedBtn: () => this.getByText('View selected responses (5)'), + selectedBtn: (num) => this.getByText(`View selected responses (${num})`), loadingResponses: () => this.getByText(appMessages.ListView.loadingResponses), listCheckbox: (index) => ( within(tableRows().item(index)).getByTitle('Toggle Row Selected') @@ -100,6 +100,7 @@ class Inspector { ), loadErrorHeading: () => this.findByText(appMessages.ReviewErrors.loadErrorHeading), startGradingBtn: () => this.findByText(appMessages.ReviewActionsComponents.startGrading), + overrideGradeBtn: () => this.findByText(appMessages.ReviewActionsComponents.overrideGrade), submitGradeBtn: () => this.findByText(appMessages.Rubric.submitGrade), }, }; diff --git a/src/utils/StrictDict.js b/src/utils/StrictDict.js index dd9588b..a127e48 100644 --- a/src/utils/StrictDict.js +++ b/src/utils/StrictDict.js @@ -4,6 +4,10 @@ const strictGet = (target, name) => { return target; } + if (name === '$$typeof') { + return typeof target; + } + if (name in target || name === '_reactFragment') { return target[name]; } diff --git a/src/utils/StrictDict.test.js b/src/utils/StrictDict.test.js index 07e1288..de65e65 100644 --- a/src/utils/StrictDict.test.js +++ b/src/utils/StrictDict.test.js @@ -44,6 +44,7 @@ describe('StrictDict', () => { }); it('allows type querying', () => { expect(typeof dict).toEqual('object'); + expect(dict.$$typeof).toEqual('object'); }); it('allows entry listing', () => { expect(Object.entries(dict)).toEqual(Object.entries(rawDict));