16073: Remove buggy waits in cypress and try to streamline output details fetching
authorStephen Smith <stephen@curii.com>
Mon, 24 Oct 2022 18:37:18 +0000 (14:37 -0400)
committerStephen Smith <stephen@curii.com>
Mon, 24 Oct 2022 18:37:18 +0000 (14:37 -0400)
Arvados-DCO-1.1-Signed-off-by: Stephen Smith <stephen@curii.com>

cypress/integration/process.spec.js
src/views/process-panel/process-panel-root.tsx

index 38d9083086b45856b6017d3e965ce0448ecf146c..84c786bdef42e74f7eb2f85060bf789d0bf7aa67 100644 (file)
@@ -869,8 +869,6 @@ describe('Process tests', function() {
             cy.goToPath(`/processes/${containerRequest.uuid}`);
             cy.get('[data-cy=process-io-card] h6').contains('Inputs')
                 .parents('[data-cy=process-io-card]').within(() => {
-                    cy.wait(2000);
-                    cy.waitForDom();
                     verifyIOParameter('input_file', null, "Label Description", 'input1.tar', '00000000000000000000000000000000+01');
                     verifyIOParameter('input_file', null, "Label Description", 'input1-2.txt', undefined, true);
                     verifyIOParameter('input_file', null, "Label Description", 'input1-3.txt', undefined, true);
@@ -896,7 +894,7 @@ describe('Process tests', function() {
             cy.get('[data-cy=process-io-card] h6').contains('Outputs')
                 .parents('[data-cy=process-io-card]').within((ctx) => {
                     cy.get(ctx).scrollIntoView();
-                    cy.waitForDom().get('[data-cy="io-preview-image-toggle"]').click();
+                    cy.get('[data-cy="io-preview-image-toggle"]').click();
                     const outPdh = testOutputCollection.portable_data_hash;
 
                     verifyIOParameter('output_file', null, "Label Description", 'cat.png', `${outPdh}`);
index 6217181c324c030befa66bafd30fb061800c6407..c2267ec02a28ed5ed6e15020147ff2c25db86fcd 100644 (file)
@@ -99,17 +99,24 @@ export const ProcessPanelRoot = withStyles(styles)(
         }
     }, [containerRequest, fetchOutputs]);
 
-    // Format raw output into ProcessIOParameter[] when it changes
+    // Fetch outputDefinitons from mounts whenever containerRequest is updated
     React.useEffect(() => {
-        if (outputDetails !== undefined && outputDetails.rawOutputs && containerRequest) {
+        if (containerRequest && containerRequest.mounts) {
             const newOutputDefinitions = getOutputParameters(containerRequest);
-            // Avoid setting output definitions back to [] when mounts briefly go missing
+            // Avoid setting output definitions to [] when mounts briefly go missing
             if (newOutputDefinitions.length) {
                 setOutputDefinitions(newOutputDefinitions);
             }
+        }
+    }, [containerRequest]);
+
+    // Format raw output into ProcessIOParameter[] when it changes
+    React.useEffect(() => {
+        if (outputDetails !== undefined && outputDetails.rawOutputs) {
+            // Update processed outputs as long as outputDetails is loaded (or failed to load with {} rawOutputs)
             setProcessedOutputs(formatOutputData(outputDefinitions, outputDetails.rawOutputs, outputDetails.pdh, auth));
         }
-    }, [outputDetails, auth, containerRequest, outputDefinitions]);
+    }, [outputDetails, auth, outputDefinitions]);
 
     // Fetch raw inputs and format into ProcessIOParameter[]
     //   Can be sync because inputs are either already in containerRequest mounts or props