Skip to content

Commit 79e0ecc

Browse files
committed
Added tests for form builder and fixed some issues
1 parent 8ec4709 commit 79e0ecc

File tree

12 files changed

+245
-47
lines changed

12 files changed

+245
-47
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
*Note: Numbers like (\#123) point to closed Pull Requests on the fractal-web repository.*
22

3+
# Unreleased
4+
5+
* Improved form builder used in workflow tasks without JSON Schema and in Meta properties tab (\#481).
6+
* Used collapsible sections in dataset history modal (\#481).
7+
38
# 1.0.3
49

510
* fixed issue in task version update when no arguments fix is needed (\#477).

playwright.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export default defineConfig({
4747

4848
webServer: [
4949
{
50-
command: './tests/start-test-server.sh 2.0.0',
50+
command: './tests/start-test-server.sh 2.0.5',
5151
port: 8000,
5252
waitForPort: true,
5353
stdout: 'pipe',

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,11 @@
6969
displayStandardErrorAlert(err, 'task-args-validation-errors');
7070
return;
7171
}
72-
if (nonParallelFormBuilderComponent && !nonParallelFormBuilderComponent.validateArguments()) {
73-
return;
74-
}
75-
if (parallelFormBuilderComponent && !parallelFormBuilderComponent.validateArguments()) {
72+
const invalidFormBuilderNonParallel =
73+
nonParallelFormBuilderComponent && !nonParallelFormBuilderComponent.validateArguments();
74+
const invalidFormBuilderParallel =
75+
parallelFormBuilderComponent && !parallelFormBuilderComponent.validateArguments();
76+
if (invalidFormBuilderNonParallel || invalidFormBuilderParallel) {
7677
return;
7778
}
7879
const payload = {};
@@ -179,7 +180,7 @@
179180
<div id="workflow-arguments-schema-panel">
180181
<div id="task-args-validation-errors" />
181182
{#if workflowTask.task_type === 'non_parallel' || workflowTask.task_type === 'compound'}
182-
{#if hasNonParallelArgs && hasParallelArgs}
183+
{#if (hasNonParallelArgs && hasParallelArgs) || (workflowTask.task_type === 'compound' && !workflowTask.is_legacy_task && !workflowTask.task.args_schema_non_parallel)}
183184
<h5 class="ps-2 mt-3">Initialisation Parameters</h5>
184185
{/if}
185186
{#if !workflowTask.is_legacy_task && workflowTask.task.args_schema_non_parallel && isSchemaValid}
@@ -202,11 +203,11 @@
202203
</div>
203204
{/if}
204205
{/if}
205-
{#if hasNonParallelArgs && hasParallelArgs}
206+
{#if (hasNonParallelArgs && hasParallelArgs) || (workflowTask.task_type === 'compound' && !argsSchemaParallel && !workflowTask.is_legacy_task && !workflowTask.task.args_schema_non_parallel)}
206207
<hr />
207208
{/if}
208209
{#if workflowTask.task_type === 'parallel' || workflowTask.task_type === 'compound'}
209-
{#if hasParallelArgs && hasNonParallelArgs}
210+
{#if (hasParallelArgs && hasNonParallelArgs) || (workflowTask.task_type === 'compound' && !argsSchemaParallel)}
210211
<h5 class="ps-2 mt-3">Compute Parameters</h5>
211212
{/if}
212213
{#if argsSchemaParallel && isSchemaValid}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,17 @@
2626
class="form-control"
2727
placeholder="Argument default value"
2828
class:is-invalid={entry.error}
29-
on:input={triggerChanges}
3029
bind:value={entry.value}
30+
on:input={triggerChanges}
3131
/>
3232
{:else if entry.type === 'number'}
3333
<input
3434
type="number"
3535
class="form-control"
3636
placeholder="Argument default value"
3737
class:is-invalid={entry.error}
38-
on:input={triggerChanges}
3938
bind:value={entry.value}
39+
on:input={triggerChanges}
4040
/>
4141
{:else if entry.type === 'boolean'}
4242
<select class="form-control" bind:value={entry.value} on:change={triggerChanges}>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<input
3535
type="text"
3636
class="form-control"
37-
placeholder="Key"
37+
placeholder="Arg name"
3838
class:is-invalid={entry.error}
3939
bind:value={entry.key}
4040
data-bs-toggle="collapse"

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@
119119
return form.hasUnsavedChanges();
120120
}
121121
122-
export function discard() {
122+
export function discardChanges() {
123123
form.discardChanges();
124124
}
125125

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,11 @@
3434
$: unsavedChanges = unsavedChangesFormBuilderParallel || unsavedChangesFormBuilderNonParallel;
3535
3636
export async function saveChanges() {
37-
if (nonParallelFormBuilderComponent && !nonParallelFormBuilderComponent.validateArguments()) {
38-
return;
39-
}
40-
if (parallelFormBuilderComponent && !parallelFormBuilderComponent.validateArguments()) {
37+
const invalidNonParallel =
38+
nonParallelFormBuilderComponent && !nonParallelFormBuilderComponent.validateArguments();
39+
const invalidParallel =
40+
parallelFormBuilderComponent && !parallelFormBuilderComponent.validateArguments();
41+
if (invalidNonParallel || invalidParallel) {
4142
return;
4243
}
4344
const payload = {};
@@ -79,7 +80,7 @@
7980
}
8081
}
8182
82-
function discardChanges() {
83+
export function discardChanges() {
8384
if (nonParallelFormBuilderComponent) {
8485
nonParallelFormBuilderComponent.discardChanges(workflowTask.meta_non_parallel);
8586
}

src/routes/v2/projects/[projectId]/workflows/[workflowId]/+page.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1218,7 +1218,7 @@
12181218
type="button"
12191219
class="btn btn-warning"
12201220
on:click={() => {
1221-
inputFiltersTab?.discard();
1221+
inputFiltersTab?.discardChanges();
12221222
setSelectedWorkflowTask(preventedSelectedTaskChange);
12231223
}}
12241224
data-bs-dismiss="modal"

tests/v2/import_export_args.spec.js

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,14 @@ test('Import/export arguments [v2]', async ({ page, workflow }) => {
8484
await page.getByPlaceholder('Arg name').click();
8585
await page.getByPlaceholder('Arg name').fill('key_non_parallel');
8686
await page.getByPlaceholder('Argument default value').fill('value_non_parallel');
87-
await page.getByLabel('Save argument').click();
87+
await page.getByRole('button', { name: 'Save changes' }).click();
8888

8989
const { file, data } = await exportArgs(page, nonParallelTaskWithoutArgsSchema);
9090
expect(data.args_non_parallel.key_non_parallel).toEqual('value_non_parallel');
9191
expect(data.args_parallel).toEqual(null);
9292
const newData = { args_non_parallel: { key_non_parallel: 'value_non_parallel-updated' } };
9393
await importValidArgs(page, file, newData);
94-
await page.getByText('value_non_parallel-updated').waitFor();
94+
await page.getByText('Arguments changes saved successfully').waitFor();
9595
await workflow.removeCurrentTask();
9696
});
9797

@@ -102,14 +102,14 @@ test('Import/export arguments [v2]', async ({ page, workflow }) => {
102102
await page.getByPlaceholder('Arg name').click();
103103
await page.getByPlaceholder('Arg name').fill('key_parallel');
104104
await page.getByPlaceholder('Argument default value').fill('value_parallel');
105-
await page.getByLabel('Save argument').click();
105+
await page.getByRole('button', { name: 'Save changes' }).click();
106106

107107
const { file, data } = await exportArgs(page, parallelTaskWithoutArgsSchema);
108108
expect(data.args_non_parallel).toEqual(null);
109109
expect(data.args_parallel.key_parallel).toEqual('value_parallel');
110110
const newData = { args_parallel: { key_parallel: 'value_parallel-updated' } };
111111
await importValidArgs(page, file, newData);
112-
await page.getByText('value_parallel-updated').waitFor();
112+
await page.getByText('Arguments changes saved successfully').waitFor();
113113
await workflow.removeCurrentTask();
114114
});
115115

@@ -119,12 +119,10 @@ test('Import/export arguments [v2]', async ({ page, workflow }) => {
119119
await page.getByRole('button', { name: 'Add property' }).first().click();
120120
await page.getByPlaceholder('Arg name').fill('key_non_parallel');
121121
await page.getByPlaceholder('Argument default value').fill('value_non_parallel');
122-
await page.getByLabel('Save argument').click();
123-
await page.getByText('Arguments changes saved successfully').waitFor();
124122
await page.getByRole('button', { name: 'Add property' }).nth(1).click();
125-
await page.getByPlaceholder('Arg name').fill('key_parallel');
126-
await page.getByPlaceholder('Argument default value').fill('value_parallel');
127-
await page.getByLabel('Save argument').click();
123+
await page.getByPlaceholder('Arg name').nth(1).fill('key_parallel');
124+
await page.getByPlaceholder('Argument default value').nth(1).fill('value_parallel');
125+
await page.getByRole('button', { name: 'Save changes' }).click();
128126
await page.getByText('Arguments changes saved successfully').waitFor();
129127

130128
const { file, data } = await exportArgs(page, compoundTaskWithoutArgsSchema);
@@ -135,8 +133,7 @@ test('Import/export arguments [v2]', async ({ page, workflow }) => {
135133
args_parallel: { key_parallel: 'value_parallel-updated' }
136134
};
137135
await importValidArgs(page, file, newData);
138-
await page.getByText('value_non_parallel-updated').waitFor();
139-
await page.getByText('value_parallel-updated').waitFor();
136+
await page.getByText('Arguments changes saved successfully').waitFor();
140137
await workflow.removeCurrentTask();
141138
});
142139

tests/v2/run_mock_tasks.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ test('Collect and run mock tasks [v2]', async ({ page, workflow, request }) => {
305305
});
306306

307307
await test.step('Cleanup zarr_dir', async () => {
308-
fs.rmSync(`/tmp/playwright/datasets/${datasetName2}`, { recursive: true });
308+
fs.rmSync(`/tmp/playwright/datasets/${datasetName2}`, { recursive: true, force: true });
309309
});
310310

311311
await test.step('Restart the workflow creating a new dataset', async () => {

0 commit comments

Comments
 (0)