Skip to content

Commit 28e6f35

Browse files
committed
Run workflow implicit applies changed filters
1 parent eb02055 commit 28e6f35

File tree

3 files changed

+78
-2
lines changed

3 files changed

+78
-2
lines changed

src/lib/components/v2/projects/datasets/DatasetImagesTable.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@
117117
return relativePath;
118118
}
119119
120-
async function applySearchFields() {
120+
export async function applySearchFields() {
121121
searching = true;
122122
await searchImages();
123123
resetBtnActive =

src/lib/components/v2/workflow/RunWorkflowModal.svelte

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,10 @@
213213
/** @type {{ [key: string]: boolean }} */
214214
let appliedTypeFilters = {};
215215
216-
function showConfirmRun() {
216+
async function showConfirmRun() {
217+
if (datasetImagesTable) {
218+
await datasetImagesTable.applySearchFields();
219+
}
217220
const wft = workflow.task_list[firstTaskIndex || 0];
218221
if (mode === 'restart') {
219222
appliedAttributeFilters = { ...selectedDataset?.attribute_filters };
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import { expect, test } from './workflow_fixture.js';
2+
import { getSlimSelectValues, selectSlimSelect, waitPageLoading } from '../utils.js';
3+
import { createImage } from './image_utils.js';
4+
import { createDataset } from './dataset_utils.js';
5+
6+
test('Run workflow implicit applies changed filters [#694]', async ({ page, workflow }) => {
7+
await page.waitForURL(workflow.url);
8+
await waitPageLoading(page);
9+
10+
let datasetName;
11+
await test.step('Create test dataset1 and open dataset page', async () => {
12+
const { name } = await createDataset(page, workflow.projectId);
13+
datasetName = name;
14+
await page.getByRole('link', { name: datasetName }).click();
15+
await waitPageLoading(page);
16+
});
17+
18+
await test.step('Create test images for dataset1', async () => {
19+
await createImage(page, `/tmp/playwright/datasets/${datasetName}/img1`, { a1: 'v1' });
20+
await createImage(page, `/tmp/playwright/datasets/${datasetName}/img2`, { a1: 'v2' });
21+
});
22+
23+
await test.step('Create filters for dataset1', async () => {
24+
await page.getByText('Dataset filters').click();
25+
await selectSlimSelect(page, page.getByLabel('Selector for attribute a1'), 'v1');
26+
await page.getByRole('button', { name: 'Apply' }).click();
27+
await page.getByRole('button', { name: 'Save filters' }).click();
28+
await expect(page.getByRole('button', { name: 'Save filters' })).toBeDisabled();
29+
});
30+
31+
const modal = page.locator('.modal.show');
32+
33+
await test.step('Open "Run workflow" modal', async () => {
34+
await page.goto(workflow.url);
35+
await waitPageLoading(page);
36+
await workflow.addTask('generic_task');
37+
await page.getByRole('button', { name: 'Run workflow' }).click();
38+
await modal.waitFor();
39+
40+
// check images and selected filters
41+
await modal.getByRole('button', { name: 'Image list' }).click();
42+
const values = await getSlimSelectValues(page, page.getByLabel('Selector for attribute a1'));
43+
expect(values).toHaveLength(1);
44+
expect(/** @type {string[]} */ (values)[0]).toEqual('v1');
45+
});
46+
47+
await test.step('Add another filter and click on Run without clicking Apply', async () => {
48+
await selectSlimSelect(page, page.getByLabel('Selector for attribute a1'), 'v2', true);
49+
await expect(modal.getByRole('button', { name: 'Apply' })).toBeEnabled();
50+
await modal.getByRole('button', { name: 'Run', exact: true }).click();
51+
});
52+
53+
await test.step('Check filters have been applied in any case', async () => {
54+
await expect(modal.getByText('This job will process 2 images')).toBeVisible();
55+
await expect(modal.getByRole('listitem')).toContainText('v1');
56+
await expect(modal.getByRole('listitem')).toContainText('v2');
57+
});
58+
59+
await test.step('Click cancel and check that filters have been reset', async () => {
60+
await modal.getByRole('button', { name: 'Cancel' }).click();
61+
const values = await getSlimSelectValues(page, page.getByLabel('Selector for attribute a1'));
62+
expect(values).toHaveLength(1);
63+
expect(/** @type {string[]} */ (values)[0]).toEqual('v1');
64+
await expect(modal.getByRole('button', { name: 'Apply' })).toBeDisabled();
65+
});
66+
67+
await test.step('Click Run and check', async () => {
68+
await modal.getByRole('button', { name: 'Run', exact: true }).click();
69+
await expect(modal.getByText('This job will process 1 image')).toBeVisible();
70+
await expect(modal.getByRole('listitem')).toContainText('v1');
71+
await expect(modal.getByRole('listitem')).not.toContainText('v2');
72+
});
73+
});

0 commit comments

Comments
 (0)