Skip to content

Commit 0d6ff85

Browse files
authored
feat(mv3-part-3): Fix assessment store start over logic (#5435)
1 parent 8ef4236 commit 0d6ff85

File tree

3 files changed

+139
-3
lines changed

3 files changed

+139
-3
lines changed

src/background/stores/assessment-store.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -413,14 +413,16 @@ export class AssessmentStore extends PersistentStore<AssessmentStoreData> {
413413
private onResetData = (payload: ToggleActionPayload): void => {
414414
const test = this.assessmentsProvider.forType(payload.test);
415415
const config = test.getVisualizationConfiguration();
416-
const defaultTestStatus: AssessmentData = config.getAssessmentData(this.getDefaultState());
416+
const defaultTestStatus: AssessmentData = config.getAssessmentData(
417+
this.generateDefaultState(null),
418+
);
417419
this.state.assessments[test.key] = defaultTestStatus;
418420
this.state.assessmentNavState.selectedTestSubview = test.requirements[0].key;
419421
this.emitChanged();
420422
};
421423

422424
private onResetAllAssessmentsData = (targetTabId: number): void => {
423-
this.state = this.getDefaultState();
425+
this.state = this.generateDefaultState(null);
424426
this.updateTargetTabWithId(targetTabId);
425427
};
426428

src/tests/unit/tests/background/stores/__snapshots__/assessment-store.test.ts.snap

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@
22

33
exports[`AssessmentStore onResetAllAssessmentsData 1`] = `"tab with Id 1000 not found"`;
44

5+
exports[`AssessmentStore onResetAllAssessmentsData with persisted data 1`] = `"tab with Id 1000 not found"`;
6+
57
exports[`AssessmentStore onUpdateTargetTabId 1`] = `"tab with Id 1000 not found"`;

src/tests/unit/tests/background/stores/assessment-store.test.ts

Lines changed: 133 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,62 @@ describe('AssessmentStore', () => {
295295
.testListenerToBeCalledOnce(initialState, expectedState);
296296
});
297297

298+
test('on resetData: only reset data for one test with persisted data', () => {
299+
const expectedInstanceMap = {};
300+
const expectedManualTestStepResultMap = {};
301+
302+
const assessmentData = new AssessmentDataBuilder()
303+
.with('generatedAssessmentInstancesMap', expectedInstanceMap)
304+
.with('manualTestStepResultMap', expectedManualTestStepResultMap)
305+
.with('testStepStatus', getSampleTestStepsData())
306+
.build();
307+
308+
const initialState = getStateWithAssessment(assessmentData);
309+
const expectedState = getDefaultStateWithDefaultAssessmentData(
310+
assessmentKey,
311+
requirementKey,
312+
);
313+
const getVisualizationConfigurationMock = Mock.ofInstance(() => {});
314+
const visualizationConfigStub = {
315+
getAssessmentData: state => {
316+
return state.assessments[assessmentKey];
317+
},
318+
} as AssessmentVisualizationConfiguration;
319+
320+
getVisualizationConfigurationMock
321+
.setup(configGetter => configGetter())
322+
.returns(() => {
323+
return visualizationConfigStub;
324+
});
325+
326+
const assessmentStub = {
327+
getVisualizationConfiguration: getVisualizationConfigurationMock.object,
328+
key: assessmentKey,
329+
requirements: [
330+
{
331+
key: requirementKey,
332+
},
333+
],
334+
} as Assessment;
335+
336+
assessmentsProviderMock
337+
.setup(apm => apm.forType(assessmentType))
338+
.returns(() => assessmentStub);
339+
340+
// Called with persisted data from initialize
341+
setupDataGeneratorMock(initialState, getDefaultState(), Times.once());
342+
// Called without persisted data from resetData
343+
setupDataGeneratorMock(null, expectedState, Times.once());
344+
345+
const payload: ToggleActionPayload = {
346+
test: assessmentType,
347+
};
348+
349+
createStoreTesterForAssessmentActions('resetData', initialState)
350+
.withActionParam(payload)
351+
.testListenerToBeCalledOnce(initialState, expectedState);
352+
});
353+
298354
test('test that tests indexedDB and also reset', () => {
299355
const expectedInstanceMap = {};
300356
const expectedManualTestStepResultMap = {};
@@ -442,6 +498,81 @@ describe('AssessmentStore', () => {
442498
expect(() => rejectCb()).toThrowErrorMatchingSnapshot();
443499
});
444500

501+
test('onResetAllAssessmentsData with persisted data', () => {
502+
const persisted: AssessmentStoreData = {
503+
persistedTabInfo: null,
504+
assessments: {
505+
['assessment-1']: {
506+
fullAxeResultsMap: null,
507+
generatedAssessmentInstancesMap: null,
508+
manualTestStepResultMap: {
509+
['assessment-1-step-1']: {
510+
instances: [],
511+
status: 2,
512+
id: 'assessment-1-step-1',
513+
},
514+
['removed-step']: {
515+
instances: [],
516+
status: 2,
517+
id: '123',
518+
},
519+
},
520+
testStepStatus: {},
521+
},
522+
},
523+
assessmentNavState: {
524+
selectedTestType: null,
525+
selectedTestSubview: null,
526+
},
527+
resultDescription: '',
528+
};
529+
530+
const oldTabId = 1;
531+
const tabId = 1000;
532+
const url = 'url';
533+
const title = 'title';
534+
const tab: Tab = {
535+
id: tabId,
536+
url,
537+
title,
538+
};
539+
let rejectCb;
540+
browserMock
541+
.setup(b => b.getTab(tabId, It.isAny(), It.isAny()))
542+
.returns((id, resolve, reject) => {
543+
rejectCb = reject;
544+
resolve(tab);
545+
})
546+
.verifiable();
547+
548+
assessmentsProviderMock.setup(apm => apm.all()).returns(() => assessmentsProvider.all());
549+
const initialState = new AssessmentsStoreDataBuilder(
550+
assessmentsProvider,
551+
assessmentDataConverterMock.object,
552+
)
553+
.withSelectedTestType(VisualizationType.Color)
554+
.withTargetTab(oldTabId, null, null, true)
555+
.build();
556+
557+
const finalState = new AssessmentsStoreDataBuilder(
558+
assessmentsProvider,
559+
assessmentDataConverterMock.object,
560+
)
561+
.withTargetTab(tabId, url, title, false)
562+
.build();
563+
564+
// Called with persisted data from initialize
565+
setupDataGeneratorMock(persisted, getDefaultState(), Times.once());
566+
// Called without persisted data from resetAllAssessmentsData
567+
setupDataGeneratorMock(null, getDefaultState(), Times.once());
568+
569+
createStoreTesterForAssessmentActions('resetAllAssessmentsData', persisted)
570+
.withActionParam(tabId)
571+
.testListenerToBeCalledOnce(initialState, finalState);
572+
573+
expect(() => rejectCb()).toThrowErrorMatchingSnapshot();
574+
});
575+
445576
test('onContinuePreviousAssessment', () => {
446577
const oldTabId = 1;
447578
const tabId = 1000;
@@ -2019,6 +2150,7 @@ describe('AssessmentStore', () => {
20192150

20202151
function createStoreTesterForAssessmentActions(
20212152
actionName: keyof AssessmentActions,
2153+
persistedData: AssessmentStoreData = null,
20222154
): AssessmentStoreTester<AssessmentStoreData, AssessmentActions> {
20232155
const factory = (actions: AssessmentActions) =>
20242156
new AssessmentStore(
@@ -2028,7 +2160,7 @@ describe('AssessmentStore', () => {
20282160
assessmentDataRemoverMock.object,
20292161
assessmentsProviderMock.object,
20302162
indexDBInstanceMock.object,
2031-
null,
2163+
persistedData,
20322164
initialAssessmentStoreDataGeneratorMock.object,
20332165
failTestOnErrorLogger,
20342166
);

0 commit comments

Comments
 (0)