Skip to content

Commit f617ca6

Browse files
fix: use propper result status after reference update
1 parent e752653 commit f617ca6

File tree

4 files changed

+74
-8
lines changed

4 files changed

+74
-8
lines changed

lib/gui/tool-runner/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,13 +194,15 @@ export class ToolRunner {
194194

195195
return Promise.all(tests.map(async (test): Promise<TestBranch> => {
196196
const updateResult = this._createHermioneTestResult(test);
197+
const currentResult = formatTestResult(updateResult, UPDATED, test.attempt);
198+
const estimatedStatus = reportBuilder.getUpdatedReferenceTestStatus(currentResult);
197199

198200
const formattedResultWithoutAttempt = formatTestResult(updateResult, UPDATED);
199201
const formattedResult = reportBuilder.provideAttempt(formattedResultWithoutAttempt);
200202

201203
const formattedResultUpdated = await reporterHelper.updateReferenceImages(formattedResult, this._reportPath, this._handleReferenceUpdate.bind(this));
202204

203-
await reportBuilder.addTestResult(formattedResultUpdated);
205+
await reportBuilder.addTestResult(formattedResultUpdated, {status: estimatedStatus});
204206

205207
return reportBuilder.getTestBranch(formattedResultUpdated.id);
206208
}));

lib/report-builder/gui.ts

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import _ from 'lodash';
22
import {StaticReportBuilder, StaticReportBuilderOptions} from './static';
33
import {GuiTestsTreeBuilder, TestBranch, TestEqualDiffsData, TestRefUpdateData} from '../tests-tree-builder/gui';
4-
import {UPDATED, DB_COLUMNS, ToolName, HERMIONE_TITLE_DELIMITER, SKIPPED} from '../constants';
4+
import {UPDATED, DB_COLUMNS, ToolName, TestStatus, HERMIONE_TITLE_DELIMITER, SKIPPED, SUCCESS} from '../constants';
55
import {ConfigForStaticFile, getConfigForStaticFile} from '../server-utils';
66
import {ReporterTestResult} from '../test-adapter';
77
import {Tree, TreeImage} from '../tests-tree-builder/base';
88
import {ImageInfoFull, ImageInfoWithState, ReporterConfig} from '../types';
9-
import {isUpdatedStatus} from '../common-utils';
9+
import {determineStatus, isUpdatedStatus} from '../common-utils';
1010
import {HtmlReporter, HtmlReporterValues} from '../plugin-api';
1111
import {SkipItem} from '../tests-tree-builder/static';
1212
import {copyAndUpdate} from '../test-adapter/utils';
@@ -134,7 +134,25 @@ export class GuiReportBuilder extends StaticReportBuilder {
134134
return {updatedImage, removedResult, previousExpectedPath, shouldRemoveReference, shouldRevertReference, newResult};
135135
}
136136

137-
override async addTestResult(formattedResultOriginal: ReporterTestResult): Promise<ReporterTestResult> {
137+
getUpdatedReferenceTestStatus(testResult: ReporterTestResult): TestStatus {
138+
const getStateName = (imageInfo: ImageInfoFull): string => (imageInfo as ImageInfoWithState).stateName;
139+
const resultId = testResult.id;
140+
const originalResult = this._testsTree.getTestBranch(resultId);
141+
const omittedImageStates = testResult.imagesInfo.map(getStateName);
142+
143+
const estimatedStatus = determineStatus({
144+
status: originalResult.result.status,
145+
error: originalResult.result.error,
146+
imagesInfo: originalResult.images.filter(image => !omittedImageStates.includes(getStateName(image)))
147+
});
148+
149+
return estimatedStatus === SUCCESS ? UPDATED : estimatedStatus;
150+
}
151+
152+
override async addTestResult(
153+
formattedResultOriginal: ReporterTestResult,
154+
updates?: Partial<ReporterTestResult>
155+
): Promise<ReporterTestResult> {
138156
const formattedResult = await super.addTestResult(formattedResultOriginal);
139157

140158
if (formattedResult.status === SKIPPED) {
@@ -148,10 +166,13 @@ export class GuiReportBuilder extends StaticReportBuilder {
148166
}
149167

150168
const formattedResultWithImages = this._loadImagesFromPreviousAttempt(formattedResult);
169+
const resultOverrided = updates
170+
? copyAndUpdate(formattedResultWithImages, updates)
171+
: formattedResultWithImages;
151172

152-
this._testsTree.addTestResult(formattedResultWithImages);
173+
this._testsTree.addTestResult(resultOverrided);
153174

154-
return formattedResultWithImages;
175+
return resultOverrided;
155176
}
156177

157178
private _loadImagesFromPreviousAttempt(formattedResult: ReporterTestResult): ReporterTestResult {

lib/reporter-helpers.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ export const updateReferenceImages = async (testResult: ReporterTestResult, repo
2828
? path.resolve(reportPath, actualImg.path)
2929
: utils.getCurrentAbsolutePath(testResult, reportPath, stateName);
3030

31-
// TODO: get rid of type assertion
32-
const referencePath = newImageInfo?.refImg?.path as string;
31+
const referencePath = newImageInfo.refImg.path;
3332

3433
if (utils.fileExists(referencePath)) {
3534
const referenceId = mkReferenceHash(testResult.id, stateName);

test/unit/lib/report-builder/gui.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,26 @@ describe('GuiReportBuilder', () => {
155155
{stateName: 'state-2', status: UPDATED}
156156
]);
157157
});
158+
159+
it('should load images info from previous attempt, while being overrided with fail status', async () => {
160+
const reportBuilder = await mkGuiReportBuilder_();
161+
GuiTestsTreeBuilder.prototype.getImagesInfo.returns([
162+
{stateName: 'state-1', status: ERROR},
163+
{stateName: 'state-2', status: ERROR}
164+
]);
165+
166+
copyAndUpdate.callsFake(_.assign);
167+
const enrichedResult = await reportBuilder.addTestResult(stubTest_({
168+
status: UPDATED,
169+
imagesInfo: [{stateName: 'state-2', status: UPDATED}]
170+
}), {status: FAIL});
171+
172+
assert.equal(enrichedResult.status, FAIL);
173+
assert.deepEqual(enrichedResult.imagesInfo, [
174+
{stateName: 'state-1', status: ERROR},
175+
{stateName: 'state-2', status: UPDATED}
176+
]);
177+
});
158178
});
159179

160180
describe('"setApiValues" method', () => {
@@ -375,6 +395,30 @@ describe('GuiReportBuilder', () => {
375395
});
376396
});
377397

398+
describe('"getUpdatedReferenceTestStatus"', () => {
399+
it('should return estimated by determineStatus status', async () => {
400+
const reportBuilder = await mkGuiReportBuilder_();
401+
const testResult = {id: 'result-id', imagesInfo: [{stateName: 'foo'}]};
402+
const testBranch = {result: {status: 'fail', error: 'some-error'}, images: [{stateName: 'foo'}, {stateName: 'bar'}]};
403+
GuiTestsTreeBuilder.prototype.getTestBranch.withArgs('result-id').returns(testBranch);
404+
405+
const estimatedStatus = reportBuilder.getUpdatedReferenceTestStatus(testResult);
406+
407+
assert.equal(estimatedStatus, ERROR);
408+
});
409+
410+
it('should return "updated", if there are no errors', async () => {
411+
const reportBuilder = await mkGuiReportBuilder_();
412+
const testResult = {id: 'result-id', imagesInfo: [{stateName: 'foo'}]};
413+
const testBranch = {result: {status: 'fail'}, images: [{stateName: 'foo'}]};
414+
GuiTestsTreeBuilder.prototype.getTestBranch.withArgs('result-id').returns(testBranch);
415+
416+
const estimatedStatus = reportBuilder.getUpdatedReferenceTestStatus(testResult);
417+
418+
assert.equal(estimatedStatus, UPDATED);
419+
});
420+
});
421+
378422
describe('add test result to tree', () => {
379423
describe('should pass test result with', () => {
380424
it('"suiteUrl" field', async () => {

0 commit comments

Comments
 (0)