Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PB-1180: Add test for changing language in mobile and desktop #1196

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/modules/menu/components/header/HeaderLangSelector.vue
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ function changeLang(lang) {
v-for="lang in languages"
:key="lang"
:primary="currentLang === lang"
:data-cy="`menu-lang-${lang}`"
@click="changeLang(lang)"
>
{{ lang.toUpperCase() }}
Expand Down
5 changes: 5 additions & 0 deletions src/modules/menu/components/header/HeaderLink.vue
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ const props = defineProps({
type: Boolean,
default: false,
},
dataCy: {
type: String,
default: '',
},
})
const { primary, secondary, showAsButton } = toRefs(props)
Expand All @@ -38,6 +42,7 @@ function forwardClickEvent(e) {
'text-primary': primary,
'text-secondary': secondary,
}"
:data-cy="dataCy"
@click="forwardClickEvent"
>
<slot />
Expand Down
2 changes: 1 addition & 1 deletion src/modules/menu/components/header/HeaderWithSearch.vue
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ function resetApp() {
<ReportProblemButton v-if="hasReportProblemButton" show-as-link />
<MoreInfo small />
<HelpLink small />
<HeaderLangSelector id="menu-lang-selector" />
<HeaderLangSelector id="menu-lang-selector" data-cy="menu-lang-selector" />
</div>
<!-- eslint-disable vue/no-v-html-->
<div
Expand Down
108 changes: 108 additions & 0 deletions tests/cypress/tests-e2e/changeLanguage.cy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
/// <reference types="cypress" />

import { isMobile } from 'tests/cypress/support/utils'

function checkLanguage(lang) {
// Check language in store
cy.readStoreValue('state.i18n.lang').should('eq', lang)

// Check UI
if (isMobile()) {
cy.readStoreValue('state.ui.showMenu').then((isMenuCurrentlyOpen) => {
if (!isMenuCurrentlyOpen) {
cy.get('[data-cy="menu-button"]').click()
}
})
cy.get('[data-cy="mobile-lang-selector"]').should('exist')
cy.get('[data-cy="mobile-lang-selector"]')
.find('option:selected') // it's a select element
.invoke('text')
.then((text) => {
expect(text).to.be.equal(lang.toUpperCase())
})
} else {
cy.get('[data-cy="menu-lang-selector"]')
.find('button')
.each((button) => {
// Get the text of each button
cy.wrap(button)
.invoke('text')
.then((text) => {
// Check if the text is the current language
if (text.trim() === lang.toUpperCase()) {
// The text should be bold (primary) if it is the current language
cy.wrap(button).should('have.class', 'text-primary')
} else {
// The text should be black if it is not the current language
cy.wrap(button).should('have.class', 'text-black')
}
})
})
}
// Check the translation of the menu button (in english: close)
const closeTranslationsMobile = {
de: 'Schliessen',
fr: 'Fermer',
it: 'Chiudere',
rm: 'Serrar',
en: 'Close',
}
const closeTranslationsDesktop = {
de: 'Menü schliessen',
fr: 'Fermer menu',
it: 'Chiudere menu',
rm: 'Serrar menu',
en: 'Close menu',
}
if (isMobile()) {
cy.get('[data-cy="menu-button"]')
.invoke('text')
.should('contain', closeTranslationsMobile[lang])
} else {
cy.get('[data-cy="menu-button"]')
.invoke('text')
.should('contain', closeTranslationsDesktop[lang])
}
}

describe('Change language', () => {
context('in mobile view', () => {
it('should change the language', () => {
cy.goToMapView()
expect(isMobile()).to.be.true

checkLanguage('en') // Initial language is 'en'

// Check for all available languages
const availableLanguages = ['de', 'fr', 'it', 'rm', 'en']

availableLanguages.forEach((lang) => {
cy.clickOnLanguage(lang)
checkLanguage(lang)
})
})
})
context(
'in desktop view',
{
viewportWidth: 1920,
viewportHeight: 1080,
},
() => {
it('should change the language', () => {
cy.goToMapView()
expect(isMobile()).to.be.false

checkLanguage('en') // Initial language is 'en'

// Check for all available languages
const availableLanguages = ['de', 'fr', 'it', 'rm', 'en']

availableLanguages.forEach((lang) => {
cy.clickOnLanguage(lang)
checkLanguage(lang)
})
})
}
)
})
Loading