diff --git a/cypress/integration/origin-search.spec.js b/cypress/integration/origin-search.spec.js --- a/cypress/integration/origin-search.spec.js +++ b/cypress/integration/origin-search.spec.js @@ -30,14 +30,15 @@ .and('contain', msg); } -function stubOriginVisitLatestRequests() { +function stubOriginVisitLatestRequests(status = 200) { cy.server(); cy.route({ method: 'GET', url: '**/visit/latest/**', response: { - type: 'tar' - } + type: 'git' + }, + status: status }).as('originVisitLatest'); } @@ -52,6 +53,7 @@ }); it('should show in result when url is searched', function() { + stubOriginVisitLatestRequests(); cy.get('#origins-url-patterns') .type(origin.url); cy.get('.swh-search-icon') @@ -72,6 +74,44 @@ .should('have.attr', 'href', browseOriginUrl); }); + it('should hide origin not yet archived when related option is on', function() { + stubOriginVisitLatestRequests(404); + cy.get('#origins-url-patterns') + .type(origin.url); + cy.get('.swh-search-icon') + .click(); + cy.wait('@originVisitLatest'); + + cy.get('#origin-search-results') + .should('be.visible') + .find('tr') + .should('have.length', 1); + }); + + it('should show origin not yet archived when related option is off', function() { + stubOriginVisitLatestRequests(404); + cy.get('#swh-search-origins-with-visit') + .uncheck({force: true}); + cy.get('#origins-url-patterns') + .type(origin.url); + cy.get('.swh-search-icon') + .click(); + cy.wait('@originVisitLatest'); + + cy.get('#origin-search-results') + .should('be.visible') + .find('tr') + .should('have.length', 2); + + cy.contains('tr', origin.url) + .should('be.visible') + .find('.swh-visit-status') + .find('i') + .should('have.class', 'mdi-close-thick') + .and('have.attr', 'title', + 'Software origin archival by Software Heritage is pending'); + }); + it('should show not found message when no repo matches', function() { searchShouldShowNotFound(nonExistentText, 'No origins matching the search criteria were found.'); diff --git a/swh/web/assets/src/bundles/browse/origin-search.js b/swh/web/assets/src/bundles/browse/origin-search.js --- a/swh/web/assets/src/bundles/browse/origin-search.js +++ b/swh/web/assets/src/bundles/browse/origin-search.js @@ -55,6 +55,7 @@ let latestSnapshotUrl = Urls.api_1_origin_visit_latest(origin.url); latestSnapshotUrl += '?require_snapshot=true'; fetch(latestSnapshotUrl) + .then(handleFetchError) .then(response => response.json()) .then(data => { $(`#visit-type-origin-${i}`).html(data.type); @@ -71,6 +72,20 @@ $(`#origin-${i}`).remove(); } } + }) + .catch(response => { + if (response.status !== 404) { + return; + } + // origin has not yet been archived by Software Heritage + if ($('#swh-search-origins-with-visit').prop('checked')) { + $(`#origin-${i}`).remove(); + } else { + $(`#visit-type-origin-${i}`).html('???'); + $(`#visit-status-origin-${i}`).html( + 'Pending archival'); + } }); } fixTableRowsStyle();