mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-02-26 17:01:40 -05:00
* feat: add stripe donate page test for non donors * fix: revert changes to see if ev is passed correctly * feat: download artifacts * fix: add quotations for spec args with global patterns * fix: remove firefox from cypress donation tests * fix: trigger action on main push * Apply suggestions from code review Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com> * feat: remove matrix and simplify Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
125 lines
3.7 KiB
JavaScript
125 lines
3.7 KiB
JavaScript
import {
|
|
availableLangs,
|
|
LangNames
|
|
} from '../../../../../config/i18n/all-langs';
|
|
import envData from '../../../../../config/env.json';
|
|
|
|
const { clientLocale } = envData;
|
|
|
|
const selectors = {
|
|
'navigation-list': '.nav-list',
|
|
'toggle-button': '.toggle-button-nav',
|
|
'language-menu': '.nav-lang-menu',
|
|
'sign-in-button': "[data-test-label='landing-small-cta']",
|
|
'avatar-link': '.avatar-nav-link',
|
|
'avatar-container': '.avatar-container'
|
|
};
|
|
|
|
const links = {
|
|
'sign-in': '/signin',
|
|
'sign-out': '/signout',
|
|
donate: '/donate',
|
|
curriculum: '/learn',
|
|
forum: 'https://forum.freecodecamp.org/',
|
|
news: 'https://freecodecamp.org/news/',
|
|
radio: 'https://coderadio.freecodecamp.org',
|
|
'avatar-link': '/developmentuser',
|
|
settings: '/settings'
|
|
};
|
|
|
|
describe('Default Navigation Menu', () => {
|
|
it('should render the expected nav items.', () => {
|
|
cy.visit('/learn');
|
|
testLink('Sign in', 'sign-in-button', true);
|
|
cy.get(selectors['language-menu']).should('not.be.visible');
|
|
cy.get(selectors['toggle-button']).should('be.visible').click();
|
|
cy.get(selectors['navigation-list']).contains('Sign in to change theme.');
|
|
testLink('Donate');
|
|
testLink('Curriculum');
|
|
testLink('Forum');
|
|
testLink('News');
|
|
testLink('Radio');
|
|
});
|
|
});
|
|
|
|
describe('Lanuage menu', () => {
|
|
it('should render all used languages.', () => {
|
|
cy.get(selectors['navigation-list']).contains('Change Language').click();
|
|
testAllLanuges();
|
|
cy.get(selectors['language-menu'])
|
|
.should('be.visible')
|
|
.contains('English')
|
|
.should('have.attr', 'aria-current', 'true');
|
|
cy.get(selectors['language-menu'])
|
|
.should('be.visible')
|
|
.contains(LangNames[clientLocale])
|
|
.should('have.attr', 'aria-current', 'true');
|
|
});
|
|
it('should have default language selected', () => {
|
|
cy.get(selectors['language-menu'])
|
|
.should('be.visible')
|
|
.contains(LangNames[clientLocale])
|
|
.should('have.attr', 'aria-current', 'true');
|
|
});
|
|
});
|
|
|
|
describe('Authenticated Navigation Menu', () => {
|
|
before(() => {
|
|
cy.clearCookies();
|
|
cy.exec('npm run seed');
|
|
cy.login();
|
|
cy.get(selectors['toggle-button']).should('be.visible').click();
|
|
});
|
|
it('should show default avatar.', () => {
|
|
testLink('Settings');
|
|
testLink('Sign out');
|
|
cy.get(selectors['sign-in-button']).should('not.exist');
|
|
cy.get(selectors['avatar-link'])
|
|
.should('have.attr', 'href')
|
|
.and('contain', links['avatar-link']);
|
|
cy.get(selectors['avatar-container']).should(
|
|
'have.class',
|
|
'default-border'
|
|
);
|
|
cy.get(selectors['navigation-list']).contains('Night Mode').click();
|
|
cy.get('body').should('have.class', 'dark-palette');
|
|
});
|
|
});
|
|
|
|
describe('Donor Navigation Menu', () => {
|
|
before(() => {
|
|
cy.clearCookies();
|
|
cy.exec('npm run seed -- --donor');
|
|
cy.login();
|
|
cy.visit('/donate');
|
|
});
|
|
it('should show donor avatar border.', () => {
|
|
cy.get(selectors['avatar-container']).should('have.class', 'gold-border');
|
|
});
|
|
it('should show thank you message.', () => {
|
|
cy.get(selectors['navigation-list']).contains('Thanks for donating');
|
|
});
|
|
});
|
|
|
|
const testAllLanuges = () => {
|
|
const availableLangNames = availableLangs.client.map(lang => LangNames[lang]);
|
|
availableLangNames.forEach(langName =>
|
|
cy.get(selectors['language-menu']).contains(langName)
|
|
);
|
|
};
|
|
|
|
const testLink = (item, selector = 'navigation-list', checkParent) => {
|
|
if (checkParent) {
|
|
return cy
|
|
.get(selectors[selector])
|
|
.should('contain.text', item)
|
|
.should('have.attr', 'href')
|
|
.and('contain', links[item.replaceAll(' ', '-').toLowerCase()]);
|
|
}
|
|
return cy
|
|
.get(selectors[selector])
|
|
.contains(item)
|
|
.should('have.attr', 'href')
|
|
.and('contain', links[item.replaceAll(' ', '-').toLowerCase()]);
|
|
};
|