diff --git a/lib/tests-tree-builder/base.ts b/lib/tests-tree-builder/base.ts index 1c4382ca4..d57fb408a 100644 --- a/lib/tests-tree-builder/base.ts +++ b/lib/tests-tree-builder/base.ts @@ -160,6 +160,17 @@ export class BaseTestsTreeBuilder { const suite: TreeSuite = {id, parentId, name, suitePath, root: isRoot}; this._addSuite(suite); + } else if (suitePath.length > suites.byId[id].suitePath.length) { + const newParentId = this._buildId(suitePath.slice(0, -1)); + + suites.byId[id].parentId = newParentId; + suites.byId[id].suitePath = suitePath; + suites.byId[id].name = suites.byId[id].id.slice(newParentId.length + 1); + + if (suites.byId[id].root) { + suites.byId[id].root = false; + suites.allRootIds.splice(suites.allRootIds.indexOf(id), 1); + } } if (ind !== arr.length - 1) { diff --git a/test/unit/lib/tests-tree-builder/base.js b/test/unit/lib/tests-tree-builder/base.js index 4805c5713..4faf6b4be 100644 --- a/test/unit/lib/tests-tree-builder/base.js +++ b/test/unit/lib/tests-tree-builder/base.js @@ -108,6 +108,88 @@ describe('ResultsTreeBuilder', () => { } ); }); + + it('should transform root suite into non-root suite', () => { + builder.addTestResult(mkFormattedResult_({testPath: ['s1 s2', 's3']})); + + assert.deepEqual( + builder.tree.suites.byId['s1 s2'], + { + id: 's1 s2', + name: 's1 s2', + parentId: null, + root: true, + suitePath: ['s1 s2'], + status: SUCCESS, + suiteIds: ['s1 s2 s3'] + } + ); + + builder.addTestResult(mkFormattedResult_({testPath: ['s1', 's2', 's4']})); + + assert.deepEqual( + builder.tree.suites.byId['s1 s2'], + { + id: 's1 s2', + name: 's2', + parentId: 's1', + root: false, + suitePath: ['s1', 's2'], + status: SUCCESS, + suiteIds: ['s1 s2 s3', 's1 s2 s4'] + } + ); + }); + + it('should transform suite into child suite', () => { + builder.addTestResult(mkFormattedResult_({testPath: ['s1', 's2 s3', 's4']})); + + assert.deepEqual( + builder.tree.suites.byId['s1 s2 s3'], + { + id: 's1 s2 s3', + name: 's2 s3', + parentId: 's1', + root: false, + suitePath: ['s1', 's2 s3'], + status: SUCCESS, + suiteIds: ['s1 s2 s3 s4'] + } + ); + + builder.addTestResult(mkFormattedResult_({testPath: ['s1', 's2', 's3', 's5']})); + + assert.deepEqual( + builder.tree.suites.byId['s1 s2 s3'], + { + id: 's1 s2 s3', + name: 's3', + parentId: 's1 s2', + root: false, + suitePath: ['s1', 's2', 's3'], + status: SUCCESS, + suiteIds: ['s1 s2 s3 s4', 's1 s2 s3 s5'] + } + ); + }); + + it('should merge suite into existing one', () => { + builder.addTestResult(mkFormattedResult_({testPath: ['s1', 's2', 's3', 's4']})); + builder.addTestResult(mkFormattedResult_({testPath: ['s1', 's2 s3', 's5']})); + + assert.deepEqual( + builder.tree.suites.byId['s1 s2 s3'], + { + id: 's1 s2 s3', + name: 's3', + parentId: 's1 s2', + root: false, + suitePath: ['s1', 's2', 's3'], + status: SUCCESS, + suiteIds: ['s1 s2 s3 s4', 's1 s2 s3 s5'] + } + ); + }); }); describe('"browsers" field in the tree', () => {