diff --git a/cypress/integration/revision-diff.spec.js b/cypress/integration/revision-diff.spec.js new file mode 100644 --- /dev/null +++ b/cypress/integration/revision-diff.spec.js @@ -0,0 +1,98 @@ +/** + * 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 + */ + +const origin = { + url: 'https://github.com/memononen/libtess2', + revision: '344b31572659aa74426c5c6ad91bbde3fe23bbb8' +}; + +let diffData; + +describe('Test Diffs View', function() { + before(function() { + const url = this.Urls.browse_revision(origin.revision) + `?origin=${origin.url}`; + + cy.visit(url).window().then(win => { + cy.request(win.diffRevUrl) + .then(res => { + diffData = res.body; + }); + }); + }); + + beforeEach(function() { + const url = this.Urls.browse_revision(origin.revision) + `?origin=${origin.url}`; + cy.visit(url); + cy.get('a[data-toggle="tab"]') + .contains('Changes') + .click(); + }); + + it('should list all files with changes', function() { + let files = new Set([]); + for (let change of diffData.changes) { + files.add(change.from_path); + files.add(change.to_path); + } + for (let file of files) { + cy.get('#swh-revision-changes-list a') + .contains(file) + .should('be.visible'); + } + }); + + it('should load diffs when scrolled down', function() { + cy.get('#swh-revision-changes-list a') + .each($el => { + cy.get($el.attr('href')) + .scrollIntoView() + .find('.swh-content') + .should('be.visible'); + }); + }); + + it('should compute all diffs when selected', function() { + cy.get('#swh-compute-all-diffs') + .click(); + cy.get('#swh-revision-changes-list a') + .each($el => { + cy.get($el.attr('href')) + .find('.swh-content') + .should('be.visible'); + }); + }); + + it('should have correct links in diff file names', function() { + for (let change of diffData.changes) { + cy.get(`#swh-revision-changes-list a[href="#panel_${change.id}"`) + .should('be.visible'); + } + }); + + it('should load unified diff by default', function() { + cy.get('#swh-compute-all-diffs') + .click(); + for (let change of diffData.changes) { + cy.get(`#${change.id}-unified-diff`) + .should('be.visible'); + cy.get(`#${change.id}-splitted-diff`) + .should('not.be.visible'); + } + }); + + it('should switch between unified and side-by-side diff when selected', function() { + // Test for first diff + const id = diffData.changes[0].id; + cy.get(`#panel_${id}`) + .contains('label', 'Side-by-side') + .click(); + cy.get(`#${id}-splitted-diff`) + .should('be.visible') + .get(`#${id}-unified-diff`) + .should('not.be.visible'); + }); +});