Skip to content

Commit

Permalink
fix: do not show success branches on "failed" view mode
Browse files Browse the repository at this point in the history
  • Loading branch information
rmdm committed May 18, 2020
1 parent aeb8d2a commit 14df13d
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 11 deletions.
6 changes: 3 additions & 3 deletions lib/static/components/section/section-common.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class SectionCommon extends Component {
}

render() {
const {suite, testNameFilter, strictMatchFilter, filteredBrowsers, sectionStatusResolver, errorGroupTests} = this.props;
const {suite, testNameFilter, strictMatchFilter, filteredBrowsers, sectionStatusResolver, errorGroupTests, viewMode} = this.props;
const {opened} = this.state;
const {
name,
Expand All @@ -76,15 +76,15 @@ class SectionCommon extends Component {
);
}

const visibleChildren = children.filter(child => shouldSuiteBeShown({suite: child, testNameFilter, strictMatchFilter, filteredBrowsers, errorGroupTests}));
const visibleChildren = children.filter(child => shouldSuiteBeShown({suite: child, testNameFilter, strictMatchFilter, filteredBrowsers, errorGroupTests, viewMode}));
const childrenTmpl = visibleChildren.map((child) => {
const key = uniqueId(`${suite.suitePath}-${child.name}`);

return <SectionCommonWrapper key={key} suite={child} testNameFilter={testNameFilter} strictMatchFilter={strictMatchFilter} filteredBrowsers={filteredBrowsers} errorGroupTests={errorGroupTests} />;
});

const browserTmpl = browsers
.filter(browser => shouldBrowserBeShown({browser, fullTestName, filteredBrowsers, errorGroupTests}))
.filter(browser => shouldBrowserBeShown({browser, fullTestName, filteredBrowsers, errorGroupTests, viewMode}))
.map(browser => {
return (
<SectionBrowser
Expand Down
7 changes: 4 additions & 3 deletions lib/static/components/suites.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ class Suites extends Component {
}

render() {
const {suites, suiteIds, testNameFilter, strictMatchFilter, filteredBrowsers, lazyLoadOffset, errorGroupTests} = this.props;
const {suites, suiteIds, testNameFilter, strictMatchFilter, filteredBrowsers, lazyLoadOffset, errorGroupTests, viewMode} = this.props;

const visibleSuiteIds = suiteIds.filter(id =>
shouldSuiteBeShown({suite: suites[id], testNameFilter, strictMatchFilter, filteredBrowsers, errorGroupTests})
shouldSuiteBeShown({suite: suites[id], testNameFilter, strictMatchFilter, filteredBrowsers, errorGroupTests, viewMode})
);

return (
Expand Down Expand Up @@ -52,14 +52,15 @@ class Suites extends Component {

export default connect(
({reporter: state}) => {
const {testNameFilter, strictMatchFilter, filteredBrowsers, lazyLoadOffset} = state.view;
const {testNameFilter, strictMatchFilter, filteredBrowsers, lazyLoadOffset, viewMode} = state.view;

return ({
suiteIds: state.suiteIds[state.view.viewMode],
testNameFilter,
filteredBrowsers,
strictMatchFilter,
lazyLoadOffset,
viewMode,
suites: state.suites
});
}
Expand Down
46 changes: 41 additions & 5 deletions lib/static/modules/utils.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
'use strict';

const testStatus = require('../../constants/test-statuses');
const {config: {defaultView}} = require('../../constants/defaults');

const url = require('url');
const {forOwn, pick, isArray, isObject, find, get, values, isEmpty} = require('lodash');

Expand Down Expand Up @@ -170,7 +172,30 @@ function dateToLocaleString(date) {
return new Date(date).toLocaleString(lang);
}

function shouldSuiteBeShown({suite, testNameFilter = '', strictMatchFilter = false, filteredBrowsers = [], errorGroupTests = {}}) {
function isStatusMatchViewMode(status, viewMode) {
if (viewMode === 'all') {
return true;
}

if (viewMode === 'failed' && isFailStatus(status) || isErroredStatus(status)) {
return true;
}

return false;
}

function shouldSuiteBeShown({
suite,
testNameFilter = '',
strictMatchFilter = false,
filteredBrowsers = [],
errorGroupTests = {},
viewMode = defaultView
}) {
if (!isStatusMatchViewMode(suite.status, viewMode)) {
return false;
}

const strictTestNameFilters = Object.keys(errorGroupTests);

// suite may contain children and browsers
Expand All @@ -181,7 +206,8 @@ function shouldSuiteBeShown({suite, testNameFilter = '', strictMatchFilter = fal
testNameFilter,
strictMatchFilter,
errorGroupTests,
filteredBrowsers
filteredBrowsers,
viewMode
})
);

Expand All @@ -201,13 +227,23 @@ function shouldSuiteBeShown({suite, testNameFilter = '', strictMatchFilter = fal
const strictMatchNames = strictTestNameFilters.length === 0
|| strictTestNameFilters.includes(suiteFullPath);

const matchBrowsers = filteredBrowsers.length === 0
|| suite.browsers.some(({name}) => filteredBrowsers.includes(name));
const matchBrowsers = filteredBrowsers.length === 0 || suite.browsers.some((browser) =>
filteredBrowsers.includes(browser.name) && isStatusMatchViewMode(get(browser, 'result.status'), viewMode));

return matchName && strictMatchNames && matchBrowsers;
}

function shouldBrowserBeShown({browser, fullTestName, filteredBrowsers = [], errorGroupTests = {}}) {
function shouldBrowserBeShown({
browser,
fullTestName,
filteredBrowsers = [],
errorGroupTests = {},
viewMode = defaultView
}) {
if (!isStatusMatchViewMode(get(browser, 'result.status'), viewMode)) {
return false;
}

const {name} = browser;
let errorGroupBrowsers = [];

Expand Down
59 changes: 59 additions & 0 deletions test/unit/lib/static/modules/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,65 @@ describe('static/modules/utils', () => {
assert.isTrue(utils.shouldSuiteBeShown({suite, filteredBrowsers: ['second-bro']}));
});
});

describe('viewMode', () => {
const successSuite = mkSuite({
status: 'success',
children: [
mkState({
browsers: [mkBrowserResult({name: 'first-bro'})]
})
]
});
const errorSuite = mkSuite({
status: 'error',
children: [
mkState({
status: 'error',
browsers: [mkBrowserResult({name: 'second-bro', result: {status: 'error'}})]
})
]
});

it('should be true if viewMode is "all" for success suite', () => {
assert.isTrue(utils.shouldSuiteBeShown({suite: successSuite, viewMode: 'all'}));
});

it('should be true if viewMode is "all" for error suite', () => {
assert.isTrue(utils.shouldSuiteBeShown({suite: errorSuite, viewMode: 'all'}));
});

it('should be false if viewMode is "failed" for success suite', () => {
assert.isFalse(utils.shouldSuiteBeShown({suite: successSuite, viewMode: 'failed'}));
});

it('should be true if viewMode is "failed" for error suite', () => {
assert.isTrue(utils.shouldSuiteBeShown({suite: errorSuite, viewMode: 'failed'}));
});
});
});

describe('shouldBrowserBeShown', () => {
describe('viewMode', () => {
const successBrowser = mkBrowserResult({name: 'first-bro'});
const errorBrowser = mkBrowserResult({name: 'second-bro', result: {status: 'error'}});

it('should be true if viewMode is "all" for success browser', () => {
assert.isTrue(utils.shouldBrowserBeShown({browser: successBrowser, viewMode: 'all'}));
});

it('should be true if viewMode is "all" for error browser', () => {
assert.isTrue(utils.shouldBrowserBeShown({browser: errorBrowser, viewMode: 'all'}));
});

it('should be false if viewMode is "failed" for success browser', () => {
assert.isFalse(utils.shouldBrowserBeShown({browser: successBrowser, viewMode: 'failed'}));
});

it('should be true if viewMode is "failed" for error browser', () => {
assert.isTrue(utils.shouldBrowserBeShown({browser: errorBrowser, viewMode: 'failed'}));
});
});
});

describe('getStats', () => {
Expand Down

0 comments on commit 14df13d

Please sign in to comment.