diff --git a/cypress/e2e/vault.cy.js b/cypress/e2e/vault.cy.js --- a/cypress/e2e/vault.cy.js +++ b/cypress/e2e/vault.cy.js @@ -118,6 +118,44 @@ }); + it('should report pending cooking task when already submitted', function() { + // Browse a directory + cy.visit(this.directoryUrl); + + // Stub responses when requesting the vault API to simulate + // an internal server error + cy.intercept(this.vaultDirectoryUrl, { + body: this.genVaultDirCookingResponse('pending', 'Processing...') + }).as('checkVaultCookingTask'); + + cy.intercept('POST', this.vaultDirectoryUrl, { + body: this.genVaultDirCookingResponse('pending', 'Processing...') + }).as('createVaultCookingTask'); + + cy.contains('button', 'Download') + .click(); + + // Create a vault cooking task through the GUI + cy.get('.modal-dialog') + .contains('button:visible', 'Ok') + .click(); + + cy.wait('@createVaultCookingTask'); + + // Check success alert is displayed + cy.get('.alert-success') + .should('be.visible') + .should('contain', 'Archive cooking request successfully submitted.'); + + // Go to Downloads page + cy.visit(this.Urls.vault()); + + cy.wait('@checkVaultCookingTask').then(() => { + testStatus(this.directory, progressbarColors['pending'], 'Processing...', 'pending'); + }); + + }); + it('should report an error when vault service is experiencing issues', function() { // Browse a directory cy.visit(this.directoryUrl); diff --git a/swh/web/vault/assets/vault-create-tasks.js b/swh/web/vault/assets/vault-create-tasks.js --- a/swh/web/vault/assets/vault-create-tasks.js +++ b/swh/web/vault/assets/vault-create-tasks.js @@ -35,7 +35,7 @@ const data = await response.json(); // object needs to be cooked - if (data.exception === 'NotFoundExc' || data.status === 'failed') { + if (data.exception === 'NotFoundExc' || data.status === 'failed' || data.status === 'pending') { // if last cooking has failed, remove previous task info from localStorage // in order to force the recooking of the object swh.vault.removeCookingTaskInfo([swhid]); @@ -48,7 +48,7 @@ const vaultModalId = `#vault-fetch-${objectType}-modal`; $(vaultModalId).modal('show'); $('body').on('keyup', vaultModalId, vaultModalHandleEnterKey); - } else { + } else if (!response.ok) { const cookingServiceDownAlert = $(htmlAlert('danger', 'Archive cooking service is currently experiencing issues.
' +