diff --git a/cypress/integration/language-select.spec.js b/cypress/integration/language-select.spec.js new file mode 100644 --- /dev/null +++ b/cypress/integration/language-select.spec.js @@ -0,0 +1,93 @@ +/** + * 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 {random} from '../utils'; + +const origin = { + url: 'https://github.com/memononen/libtess2', + content: { + path: 'premake4.lua' + } +}; + +let contentWithLanguageInfo, contentWithoutLanguageInfo; + +const $ = Cypress.$; + +describe('Test Content Language Select', function() { + before(function() { + contentWithLanguageInfo = this.Urls.browse_origin_content(origin.url, origin.content.path); + + cy.visit(contentWithLanguageInfo); + cy.window().then(async win => { + const metadata = win.swh.webapp.getBrowsedSwhObjectMetadata(); + + origin.content.name = metadata.filename; + origin.content.sha1git = metadata.sha1_git; + contentWithoutLanguageInfo = this.Urls.browse_content(`sha1_git:${origin.content.sha1git}`); + }); + }); + + context('When Language is detected', function() { + it('should display correct language in dropdown', function() { + cy.visit(contentWithLanguageInfo) + .then(() => { + cy.get(`code.${$('.language-select').val()}`) + .should('exist'); + }); + }); + }); + + context('When Language is not detected', function() { + it('should have no selected language in dropdown', function() { + cy.visit(contentWithoutLanguageInfo).then(() => { + assert.strictEqual($('.language-select').val(), null); + }); + }); + }); + + context('When language is switched from dropdown', function() { + before(function() { + cy.visit(contentWithLanguageInfo); + + let languageSelected; + cy.get('.language-select') + .get('option') + .its('length') + .then((numOptions) => { + const indexSelected = random(0, numOptions); + + cy.get('.chosen-container') + .click() + .get('.chosen-results > li') + .eq(indexSelected) + .then(($el) => { + languageSelected = $el.text(); + }) + .click() + .then(() => { + assert.strictEqual($('.language-select').val(), languageSelected); + }); + }); + + }); + + it('should contain argument with language in url', function() { + cy.location('search') + .should('contain', `language=${$('.language-select').val()}`); + }); + + it('should show correct language in dropdown', function() { + assert.strictEqual($('.language-select').val(), $('.language-select').val()); + }); + + it('should highlight according to new language', function() { + + }); + }); + +}); 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,8 @@ const response = await axios.get(url); return response.data; } + +export function random(start, end) { + const range = end - start; + return Math.floor(Math.random() * range) + start; +}