@@ -13,20 +13,20 @@ test('Collect and run mock tasks [v2]', async ({ page, workflow, request }) => {
1313 await waitPageLoading ( page ) ;
1414
1515 /** @type {string } */
16- let successDatasetName ;
16+ let datasetName1 ;
1717 /** @type {number } */
18- let successDatasetId ;
19- await test . step ( 'Create test dataset for success task ' , async ( ) => {
18+ let datasetId1 ;
19+ await test . step ( 'Create first test dataset' , async ( ) => {
2020 const { name, id } = await createDataset ( page , workflow . projectId ) ;
21- successDatasetName = name ;
22- successDatasetId = id ;
21+ datasetName1 = name ;
22+ datasetId1 = id ;
2323 } ) ;
2424
2525 /** @type {string } */
26- let errorDatasetName ;
27- await test . step ( 'Create test dataset for error task ' , async ( ) => {
26+ let datasetName2 ;
27+ await test . step ( 'Create second test dataset' , async ( ) => {
2828 const { name } = await createDataset ( page , workflow . projectId ) ;
29- errorDatasetName = name ;
29+ datasetName2 = name ;
3030 } ) ;
3131
3232 await test . step ( 'Go to tasks page' , async ( ) => {
@@ -115,13 +115,20 @@ test('Collect and run mock tasks [v2]', async ({ page, workflow, request }) => {
115115 await waitPageLoading ( page ) ;
116116 } ) ;
117117
118+ await test . step ( 'Select the first dataset' , async ( ) => {
119+ await page
120+ . getByRole ( 'combobox' , { name : 'Dataset' , exact : true } )
121+ . first ( )
122+ . selectOption ( datasetName1 ) ;
123+ } ) ;
124+
118125 await test . step ( 'Add and select create_ome_zarr_compound' , async ( ) => {
119126 await workflow . addCollectedTask ( 'create_ome_zarr_compound' ) ;
120127 await workflow . selectTask ( 'create_ome_zarr_compound' ) ;
121128 } ) ;
122129
123- await test . step ( 'Fill arguments' , async ( ) => {
124- await page . getByRole ( 'textbox' , { name : 'Image Dir' } ) . fill ( '/tmp/test1' ) ;
130+ await test . step ( 'Fill create_ome_zarr_compound arguments' , async ( ) => {
131+ await page . getByRole ( 'textbox' , { name : 'Image Dir' } ) . fill ( '/tmp/playwright/ test1' ) ;
125132 await page . getByRole ( 'button' , { name : 'Save changes' } ) . click ( ) ;
126133 await page . getByText ( 'Arguments changes saved successfully' ) . waitFor ( ) ;
127134 } ) ;
@@ -130,9 +137,9 @@ test('Collect and run mock tasks [v2]', async ({ page, workflow, request }) => {
130137 await page . getByRole ( 'button' , { name : 'Run workflow' } ) . click ( ) ;
131138 const modal = page . locator ( '.modal.show' ) ;
132139 await modal . waitFor ( ) ;
133- await modal
134- . getByRole ( 'combobox' , { name : 'Dataset' , exact : true } )
135- . selectOption ( successDatasetName ) ;
140+ await expect ( modal . getByRole ( 'combobox' , { name : 'Dataset' , exact : true } ) ) . toHaveValue (
141+ datasetId1 . toString ( )
142+ ) ;
136143 await page . getByRole ( 'button' , { name : 'Run' , exact : true } ) . click ( ) ;
137144 await page . getByRole ( 'button' , { name : 'Confirm' } ) . click ( ) ;
138145 await waitModalClosed ( page ) ;
@@ -148,16 +155,16 @@ test('Collect and run mock tasks [v2]', async ({ page, workflow, request }) => {
148155 await page . locator ( '.job-status-icon.bi-check' ) . waitFor ( ) ;
149156 } ) ;
150157
151- await test . step ( 'Open run workflow modal again ' , async ( ) => {
152- await page . getByRole ( 'button' , { name : 'Run workflow' } ) . click ( ) ;
158+ await test . step ( 'Open "Continue workflow" modal' , async ( ) => {
159+ await page . getByRole ( 'button' , { name : 'Continue workflow' } ) . click ( ) ;
153160 const modal = page . locator ( '.modal.show' ) ;
154161 await modal . waitFor ( ) ;
155162 // Check that confirm mode has been reset
156163 expect ( await page . getByRole ( 'button' , { name : 'Run' , exact : true } ) . isVisible ( ) ) . toEqual ( true ) ;
157164 } ) ;
158165
159166 await test . step ( 'Verify that the dataset contains some images' , async ( ) => {
160- await page . goto ( `/v2/projects/${ workflow . projectId } /datasets/${ successDatasetId } ` ) ;
167+ await page . goto ( `/v2/projects/${ workflow . projectId } /datasets/${ datasetId1 } ` ) ;
161168 await waitPageLoading ( page ) ;
162169 await expect ( page . getByRole ( 'table' ) . getByRole ( 'row' ) ) . toHaveCount ( 4 ) ;
163170 } ) ;
@@ -167,44 +174,124 @@ test('Collect and run mock tasks [v2]', async ({ page, workflow, request }) => {
167174 await waitPageLoading ( page ) ;
168175 } ) ;
169176
170- await test . step ( 'Remove create_ome_zarr_compound task' , async ( ) => {
171- await workflow . selectTask ( 'create_ome_zarr_compound' ) ;
172- await workflow . removeCurrentTask ( ) ;
177+ await test . step ( 'Select the second dataset' , async ( ) => {
178+ await page
179+ . getByRole ( 'combobox' , { name : 'Dataset' , exact : true } )
180+ . first ( )
181+ . selectOption ( datasetName2 ) ;
173182 } ) ;
174183
175184 await test . step ( 'Add and select generic_task' , async ( ) => {
176185 await workflow . addCollectedTask ( 'generic_task' ) ;
177186 await workflow . selectTask ( 'generic_task' ) ;
178187 } ) ;
179188
180- await test . step ( 'Fill arguments' , async ( ) => {
189+ await test . step ( 'Fill generic_task arguments, set "Raise Error" to true ' , async ( ) => {
181190 await page . getByRole ( 'switch' ) . check ( ) ;
182191 await page . getByRole ( 'button' , { name : 'Save changes' } ) . click ( ) ;
183192 await page . getByText ( 'Arguments changes saved successfully' ) . waitFor ( ) ;
184193 } ) ;
185194
186- await test . step ( 'Start the job' , async ( ) => {
195+ await test . step ( 'Start the new job' , async ( ) => {
187196 await page . getByRole ( 'button' , { name : 'Run workflow' } ) . click ( ) ;
188197 const modal = page . locator ( '.modal.show' ) ;
189198 await modal . waitFor ( ) ;
190- await modal
191- . getByRole ( 'combobox' , { name : 'Dataset' , exact : true } )
192- . selectOption ( errorDatasetName ) ;
193199 await page . getByRole ( 'button' , { name : 'Run' , exact : true } ) . click ( ) ;
194200 await page . getByRole ( 'button' , { name : 'Confirm' } ) . click ( ) ;
195201 await waitModalClosed ( page ) ;
196202 } ) ;
197203
198204 await test . step ( 'Wait tasks submitted' , async ( ) => {
199205 const spinners = page . locator ( '.job-status-submitted.spinner-border' ) ;
200- await spinners . waitFor ( ) ;
201- expect ( await spinners . count ( ) ) . toEqual ( 1 ) ;
206+ await expect ( spinners ) . toHaveCount ( 2 ) ;
202207 } ) ;
203208
204209 await test . step ( 'Wait job failure' , async ( ) => {
205210 await page . locator ( '.job-status-icon.bi-x' ) . waitFor ( ) ;
206211 await page . getByText ( 'The last job failed with the following error' ) . waitFor ( ) ;
207212 } ) ;
213+
214+ await test . step ( 'Fill generic_task arguments, set "Raise Error" to false' , async ( ) => {
215+ await page . getByRole ( 'switch' ) . uncheck ( ) ;
216+ await page . getByRole ( 'button' , { name : 'Save changes' } ) . click ( ) ;
217+ await page . getByText ( 'Arguments changes saved successfully' ) . waitFor ( ) ;
218+ } ) ;
219+
220+ await test . step ( 'Continue the workflow from failed task' , async ( ) => {
221+ await page . getByRole ( 'button' , { name : 'Continue workflow' } ) . click ( ) ;
222+ const modal = page . locator ( '.modal.show' ) ;
223+ await modal . waitFor ( ) ;
224+ await page
225+ . getByRole ( 'combobox' , { name : 'First task (Optional)' } )
226+ . selectOption ( 'generic_task' ) ;
227+ await page . getByRole ( 'button' , { name : 'Run' , exact : true } ) . click ( ) ;
228+ await page . getByRole ( 'button' , { name : 'Confirm' } ) . click ( ) ;
229+ await waitModalClosed ( page ) ;
230+ } ) ;
231+
232+ await test . step ( 'Wait tasks submitted' , async ( ) => {
233+ const spinners = page . locator ( '.job-status-submitted.spinner-border' ) ;
234+ await spinners . waitFor ( ) ;
235+ expect ( await spinners . count ( ) ) . toEqual ( 1 ) ;
236+ } ) ;
237+
238+ await test . step ( 'Wait tasks success' , async ( ) => {
239+ await expect ( page . locator ( '.job-status-icon.bi-check' ) ) . toHaveCount ( 2 ) ;
240+ } ) ;
241+
242+ await test . step ( 'Cleanup zarr_dir' , async ( ) => {
243+ fs . rmSync ( `/tmp/playwright/datasets/${ datasetName2 } ` , { recursive : true } ) ;
244+ } ) ;
245+
246+ await test . step ( 'Restart the workflow replacing dataset' , async ( ) => {
247+ await page . getByRole ( 'button' , { name : 'Restart workflow' } ) . click ( ) ;
248+ const modal = page . locator ( '.modal.show' ) ;
249+ await modal . waitFor ( ) ;
250+ await page . getByRole ( 'button' , { name : 'Run' , exact : true } ) . click ( ) ;
251+ await page . getByRole ( 'button' , { name : 'Confirm' } ) . click ( ) ;
252+ await waitModalClosed ( page ) ;
253+ } ) ;
254+
255+ await test . step ( 'Wait tasks submitted' , async ( ) => {
256+ const spinners = page . locator ( '.job-status-submitted.spinner-border' ) ;
257+ await expect ( spinners ) . toHaveCount ( 2 ) ;
258+ } ) ;
259+
260+ await test . step ( 'Wait tasks success' , async ( ) => {
261+ await expect ( page . locator ( '.job-status-icon.bi-check' ) ) . toHaveCount ( 2 ) ;
262+ } ) ;
263+
264+ await test . step ( 'Cleanup zarr_dir' , async ( ) => {
265+ fs . rmSync ( `/tmp/playwright/datasets/${ datasetName2 } ` , { recursive : true } ) ;
266+ } ) ;
267+
268+ await test . step ( 'Restart the workflow creating a new dataset' , async ( ) => {
269+ await page . getByRole ( 'button' , { name : 'Restart workflow' } ) . click ( ) ;
270+ const modal = page . locator ( '.modal.show' ) ;
271+ await modal . waitFor ( ) ;
272+ await modal . getByRole ( 'checkbox' , { name : 'Replace existing dataset' } ) . uncheck ( ) ;
273+ await modal . getByRole ( 'button' , { name : 'Run' , exact : true } ) . click ( ) ;
274+ await modal . getByRole ( 'button' , { name : 'Confirm' } ) . click ( ) ;
275+ await waitModalClosed ( page ) ;
276+ } ) ;
277+
278+ await test . step ( 'Check the new dataset name' , async ( ) => {
279+ await expect (
280+ page
281+ . getByRole ( 'combobox' , { name : 'Dataset' , exact : true } )
282+ . first ( )
283+ . getByRole ( 'option' , { selected : true } )
284+ ) . toHaveText ( `${ datasetName2 } _1` ) ;
285+ } ) ;
286+
287+ await test . step ( 'Wait tasks submitted' , async ( ) => {
288+ const spinners = page . locator ( '.job-status-submitted.spinner-border' ) ;
289+ await expect ( spinners ) . toHaveCount ( 2 ) ;
290+ } ) ;
291+
292+ await test . step ( 'Wait tasks success' , async ( ) => {
293+ await expect ( page . locator ( '.job-status-icon.bi-check' ) ) . toHaveCount ( 2 ) ;
294+ } ) ;
208295} ) ;
209296
210297/**
0 commit comments