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); @@ -135,7 +173,7 @@ // Check error alert is displayed cy.get('.alert-danger') .should('be.visible') - .should('contain', 'Archive cooking service is currently experiencing issues.'); + .should('contain', 'Something unexpected happened when requesting the archive cooking service.'); }); it('should report an error when a cooking task creation failed', function() { 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,8 @@ const data = await response.json(); // object needs to be cooked - if (data.exception === 'NotFoundExc' || data.status === 'failed') { + const statusForCooking = ['failed', 'pending', 'new']; + if (data.exception === 'NotFoundExc' || statusForCooking.includes(data.status)) { // if last cooking has failed, remove previous task info from localStorage // in order to force the recooking of the object swh.vault.removeCookingTaskInfo([swhid]); @@ -51,7 +52,7 @@ } else { const cookingServiceDownAlert = $(htmlAlert('danger', - 'Archive cooking service is currently experiencing issues.
' + + 'Something unexpected happened when requesting the archive cooking service.
' + 'Please try again later.', true)); cookingServiceDownAlert.css(alertStyle);