diff --git a/cypress/integration/origin-visits.spec.js b/cypress/integration/origin-visits.spec.js new file mode 100644 --- /dev/null +++ b/cypress/integration/origin-visits.spec.js @@ -0,0 +1,72 @@ +/** + * Copyright (C) 2019 The Software Heritage developers + * See the AUTHORS file at the top-level directory of this distribution + * License: GNU Affero General Public License version 3, or any later version + * See top-level LICENSE file for more information + */ + +import {getTime} from '../utils'; + +const origin = 'https://github.com/wcoder/highlightjs-line-numbers.js'; + +function checkTimeLink(element) { + expect(element.text()).not.to.be.empty; + + const timeStringLink = element.attr('href').split('visit/')[1].split('/')[0]; + + // time in link should be equal to that in text + assert.deepEqual(getTime(timeStringLink), getTime(element.text())); +} + +function searchInCalendar(date) { + cy.contains('label', 'Show all visits') + .click(); + cy.get(`.year${date.year}`) + .click({force: true}); + cy.contains('.month', date.monthName) + .find('.day-content') + .eq(date.date - 1) + .trigger('mouseover') + .get('.popover-body') + .should('be.visible') + .and('contain', `${date.hours}:${date.minutes} UTC`); +} + +describe('Visits tests', function() { + beforeEach(function() { + cy.visit(this.Urls.browse_origin_visits(origin)); + }); + + it('should display first full visit time', function() { + cy.get('#swh-first-full-visit > .swh-visit-full') + .then(($el) => { + checkTimeLink($el); + searchInCalendar(getTime($el.text())); + }); + }); + + it('should display last full visit time', function() { + cy.get('#swh-last-full-visit > .swh-visit-full') + .then(($el) => { + checkTimeLink($el); + searchInCalendar(getTime($el.text())); + }); + }); + + it('should display last visit time', function() { + cy.get('#swh-last-visit > .swh-visit-full') + .then(($el) => { + checkTimeLink($el); + searchInCalendar(getTime($el.text())); + }); + }); + + it('should display list of visits and mark them on calendar', function() { + cy.get('.swh-visits-list-row .swh-visit-full') + .should('be.visible') + .each(($el) => { + checkTimeLink($el); + searchInCalendar(getTime($el.text())); + }); + }); +}); diff --git a/cypress/utils/index.js b/cypress/utils/index.js --- a/cypress/utils/index.js +++ b/cypress/utils/index.js @@ -11,3 +11,26 @@ const response = await axios.get(url); return response.data; } + +/** + * Converts string with Time information + * to an object with Time information + */ +export function getTime(text) { + const date = new Date(text); + + function pad(n) { + return n < 10 ? '0' + n : n; + } + + const time = { + date: date.getUTCDate(), + month: date.getUTCMonth(), + monthName: date.toLocaleString('en', { month: 'long' }), + year: date.getUTCFullYear(), + hours: pad(date.getUTCHours()), + minutes: pad(date.getUTCMinutes()) + }; + + return time; +} diff --git a/swh/web/tests/data.py b/swh/web/tests/data.py --- a/swh/web/tests/data.py +++ b/swh/web/tests/data.py @@ -6,7 +6,6 @@ from copy import deepcopy import os import random -import time from swh.indexer.fossology_license import FossologyLicenseIndexer from swh.indexer.mimetype import MimetypeIndexer @@ -141,17 +140,21 @@ 'type': 'git', 'url': 'https://github.com/wcoder/highlightjs-line-numbers.js', 'archives': ['highlightjs-line-numbers.js.zip', - 'highlightjs-line-numbers.js_visit2.zip'] + 'highlightjs-line-numbers.js_visit2.zip'], + 'visit_date': ['Dec 1 2018, 01:00 UTC', + 'Jan 20 2019, 15:00 UTC'] }, { 'type': 'git', 'url': 'https://github.com/memononen/libtess2', - 'archives': ['libtess2.zip'] + 'archives': ['libtess2.zip'], + 'visit_date': ['May 25 2018, 01:00 UTC'] }, { 'type': 'git', 'url': 'repo_with_submodules', - 'archives': ['repo_with_submodules.tgz'] + 'archives': ['repo_with_submodules.tgz'], + 'visit_date': ['Jan 1 2019, 01:00 UTC'] } ] @@ -167,14 +170,13 @@ storage = loader.storage for origin in _TEST_ORIGINS: - nb_visits = len(origin['archives']) for i, archive in enumerate(origin['archives']): origin_repo_archive = \ os.path.join(os.path.dirname(__file__), 'resources/repos/%s' % archive) - loader.load(origin['url'], origin_repo_archive, None) - if nb_visits > 1 and i != nb_visits - 1: - time.sleep(1) + loader.load(origin['url'], origin_repo_archive, + origin['visit_date'][i]) + origin.update(storage.origin_get(origin)) # add an 'id' key if enabled contents = set()