Skip to content

Commit

Permalink
fix: filter suites by browsers correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
Rashid Ksirov committed Oct 18, 2019
1 parent cc60184 commit 15d8890
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 2 deletions.
4 changes: 4 additions & 0 deletions lib/common-utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ exports.isSkippedStatus = (status) => status === SKIPPED;
exports.isUpdatedStatus = (status) => status === UPDATED;

exports.determineStatus = (statuses) => {
if (!statuses.length) {
return SUCCESS;
}

const set = new Set(statuses);
for (const status of statusPriority) {
if (set.has(status)) {
Expand Down
7 changes: 5 additions & 2 deletions lib/static/modules/reducer.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@ import url from 'url';
import actionNames from './action-names';
import defaultState from './default-state';
import {assign, merge, filter, map, clone, cloneDeep, reduce, find, last} from 'lodash';
import {isSuiteFailed, setStatusToAll, findNode, setStatusForBranch, dateToLocaleString} from './utils';
import {
isSuiteFailed, setStatusToAll, findNode, setStatusForBranch, dateToLocaleString,
filterSuites
} from './utils';
import {groupErrors} from './group-errors';
import * as localStorageWrapper from './local-storage-wrapper';

Expand Down Expand Up @@ -59,7 +62,7 @@ function reducer(state = getInitialState(compiledData), action) {
const {errorPatterns} = state.config;
const {filteredBrowsers, testNameFilter, viewMode} = state.view;

const formattedSuites = formatSuitesData(suites);
const formattedSuites = formatSuitesData(filterSuites(suites, filteredBrowsers));
const groupedErrors = groupErrors({
suites: formattedSuites.suites,
viewMode,
Expand Down
34 changes: 34 additions & 0 deletions lib/static/modules/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,39 @@ function shouldBrowserBeShown({browser, fullTestName, filteredBrowsers = [], err
return matchFilteredBrowsers && matchErrorGroupBrowsers;
}

function filterSuites(suites = [], filteredBrowsers = []) {
if (isEmpty(filteredBrowsers) || isEmpty(suites)) {
return suites;
}

const filteredSuites = suites.filter((suite) => {
let result = false;
let browserStatuses = [];

if (suite.browsers) {
suite.browsers = suite.browsers.filter(({name}) => filteredBrowsers.includes(name));
browserStatuses = suite.browsers.map(({result: {status}}) => status);

result = result || suite.browsers.length > 0;
}

let childrenStatuses = [];

if (suite.children) {
suite.children = filterSuites(suite.children, filteredBrowsers);
childrenStatuses = suite.children.map(({status}) => status);

result = result || suite.children.length > 0;
}

suite.status = determineStatus([...browserStatuses, ...childrenStatuses]);

return result;
});

return filteredSuites;
}

function isUrl(str) {
if (typeof str !== 'string') {
return false;
Expand Down Expand Up @@ -245,5 +278,6 @@ module.exports = {
dateToLocaleString,
shouldSuiteBeShown,
shouldBrowserBeShown,
filterSuites,
isUrl
};
42 changes: 42 additions & 0 deletions test/unit/lib/static/modules/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,48 @@ describe('static/modules/utils', () => {
});
});

describe('filterSuites', () => {
let suites;

beforeEach(() => {
suites = [mkSuite({
browsers: [
mkBrowserResult({name: 'first-bro'}),
mkBrowserResult({name: 'third-bro'})
],
children: [
mkState({
browsers: [mkBrowserResult({name: 'first-bro'})]
}),
mkState({
browsers: [mkBrowserResult({name: 'second-bro'})]
})
]
})];
});

it('should return suites as is if no browsers to filter', () => {
assert.deepEqual(suites, utils.filterSuites(suites));
});

it('should return empty suites if no suites given', () => {
assert.deepEqual([], utils.filterSuites([], ['some-bro']));
});

it('should filter suites by given browsers', () => {
const filteredSuites = [mkSuite({
browsers: [mkBrowserResult({name: 'first-bro'})],
children: [
mkState({
browsers: [mkBrowserResult({name: 'first-bro'})]
})
]
})];

assert.deepEqual(filteredSuites, utils.filterSuites(suites, ['first-bro']));
});
});

describe('shouldSuiteBeShown', () => {
describe('testNameFilter', () => {
const suite = mkSuite({
Expand Down

0 comments on commit 15d8890

Please sign in to comment.