Skip to content

Commit 6cce607

Browse files
authored
fix: run suite button should only launch visible tests (#747)
1 parent 9371804 commit 6cce607

2 files changed

Lines changed: 60 additions & 12 deletions

File tree

lib/static/new-ui/components/TreeViewItemTitle/index.tsx

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {useDispatch, useSelector} from 'react-redux';
77
import {getToggledCheckboxState, isCheckboxChecked, isCheckboxIndeterminate} from '@/common-utils';
88
import {EntityType, TreeViewItemData} from '@/static/new-ui/features/suites/components/SuitesPage/types';
99
import {toggleBrowserCheckbox, toggleGroupCheckbox, toggleSuiteCheckbox, thunkRunSuite} from '@/static/modules/actions';
10-
import {getAreCheckboxesNeeded, getBrowsers, getSuites} from '@/static/new-ui/store/selectors';
10+
import {getAreCheckboxesNeeded, getBrowsers, getBrowsersState, getSuites} from '@/static/new-ui/store/selectors';
1111
import {getItemCheckStatus} from '@/static/new-ui/components/TreeViewItemTitle/selectors';
1212
import {ClipboardButton} from '@/static/new-ui/components/ClipboardButton';
1313
import {RunTestsFeature} from '@/constants';
@@ -19,21 +19,28 @@ interface TreeViewItemTitleProps {
1919
item: TreeViewItemData;
2020
}
2121

22-
const getSuiteBrowsers = (suiteId: string, suites: Record<string, {suiteIds?: string[]; browserIds?: string[]}>, browsers: Record<string, {parentId: string; name: string}>): TestSpec[] => {
22+
const getVisibleSuiteBrowsers = (
23+
suiteId: string,
24+
suites: Record<string, {suiteIds?: string[]; browserIds?: string[]}>,
25+
browsers: Record<string, {parentId: string; name: string}>,
26+
browsersState: Record<string, {shouldBeShown: boolean}>
27+
): TestSpec[] => {
2328
const suite = suites[suiteId];
2429
if (!suite) {
2530
return [];
2631
}
2732

2833
if (suite.browserIds) {
29-
return suite.browserIds.map(browserId => {
30-
const browser = browsers[browserId];
31-
return {testName: browser.parentId, browserName: browser.name};
32-
});
34+
return suite.browserIds
35+
.filter(browserId => browsersState[browserId]?.shouldBeShown)
36+
.map(browserId => {
37+
const browser = browsers[browserId];
38+
return {testName: browser.parentId, browserName: browser.name};
39+
});
3340
}
3441

3542
if (suite.suiteIds) {
36-
return suite.suiteIds.flatMap(childSuiteId => getSuiteBrowsers(childSuiteId, suites, browsers));
43+
return suite.suiteIds.flatMap(childSuiteId => getVisibleSuiteBrowsers(childSuiteId, suites, browsers, browsersState));
3744
}
3845

3946
return [];
@@ -48,13 +55,14 @@ export function TreeViewItemTitle({item}: TreeViewItemTitleProps): React.JSX.Ele
4855

4956
const suites = useSelector(getSuites);
5057
const browsers = useSelector(getBrowsers);
58+
const browsersState = useSelector(getBrowsersState);
5159
const isRunning = useSelector(state => state.running);
5260
const isRunTestsAvailable = useSelector(state => state.app.availableFeatures)
5361
.find(feature => feature.name === RunTestsFeature.name);
5462

5563
const getTestsToRun = (): TestSpec[] => {
5664
if (item.entityType === EntityType.Suite) {
57-
return getSuiteBrowsers(item.entityId, suites, browsers);
65+
return getVisibleSuiteBrowsers(item.entityId, suites, browsers, browsersState);
5866
} else if (item.entityType === EntityType.Browser) {
5967
// On visual checks page, browserId is stored separately from entityId
6068
const browserId = item.browserId || item.entityId;
@@ -65,10 +73,12 @@ export function TreeViewItemTitle({item}: TreeViewItemTitleProps): React.JSX.Ele
6573
} else if (item.entityType === EntityType.Group) {
6674
const group = groups[item.entityId];
6775
if (group) {
68-
return group.browserIds.map(browserId => {
69-
const browser = browsers[browserId];
70-
return {testName: browser.parentId, browserName: browser.name};
71-
});
76+
return group.browserIds
77+
.filter(browserId => browsersState[browserId]?.shouldBeShown)
78+
.map(browserId => {
79+
const browser = browsers[browserId];
80+
return {testName: browser.parentId, browserName: browser.name};
81+
});
7282
}
7383
}
7484
return [];

test/func/tests/common-gui/tree-view-actions.testplane.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,44 @@ describe('GUI mode', () => {
7979
expect(attempts.length).toBe(2);
8080
});
8181

82+
it('should run only visible tests in suite', async ({browser}) => {
83+
const searchInput = await browser.$('[data-qa="name-filter"] input');
84+
await searchInput.setValue('test with no reference image');
85+
await browser.pause(500);
86+
87+
const suiteItem = await browser.$('[data-list-item="tests to run"]');
88+
await suiteItem.moveTo();
89+
90+
const runButton = await suiteItem.$('button[title="Run tests"]');
91+
await runButton.waitForClickable();
92+
await runButton.click();
93+
94+
await browser.waitUntil(async () => {
95+
const spinners = await browser.$$('.g-spin');
96+
return spinners.length > 0;
97+
}, {timeout: 5000, timeoutMsg: 'Tests did not start running'});
98+
99+
await browser.waitUntil(async () => {
100+
const spinners = await browser.$$('.g-spin');
101+
return spinners.length === 0;
102+
}, {timeout: 30000, timeoutMsg: 'Tests did not complete'});
103+
104+
await browser.$('[data-qa="clear-name-filter"]').click();
105+
await browser.pause(500);
106+
107+
const firstTest = await browser.$('[data-list-item*="test with image comparison diff"][data-list-item*="chrome"]');
108+
await firstTest.click();
109+
await browser.$('[data-qa="suite-title-counter"]').waitForDisplayed();
110+
let attempts = await browser.$$('[data-qa="retry-switcher"]');
111+
expect(attempts.length).toBe(1);
112+
113+
const secondTest = await browser.$('[data-list-item*="test with no reference image"][data-list-item*="chrome"]');
114+
await secondTest.click();
115+
await browser.$('[data-qa="suite-title-counter"]').waitForDisplayed();
116+
attempts = await browser.$$('[data-qa="retry-switcher"]');
117+
expect(attempts.length).toBe(2);
118+
});
119+
82120
it('should run test on visual checks page via run button click', async ({browser}) => {
83121
await browser.keys('v');
84122

0 commit comments

Comments
 (0)