Add @testing-library/cypress

This commit is contained in:
SleepWalker 2020-05-21 21:37:35 +03:00
parent e1f15b5d22
commit 97d2841eda
18 changed files with 188 additions and 137 deletions

View File

@ -58,6 +58,7 @@ async function polyfillIntl(locale: string): Promise<void> {
// resolve issue with RegExp errors // resolve issue with RegExp errors
// @see https://github.com/mattlewis92/angular-calendar/issues/274 // @see https://github.com/mattlewis92/angular-calendar/issues/274
// @see https://github.com/mattlewis92/angular-calendar/issues/274 // @see https://github.com/mattlewis92/angular-calendar/issues/274
// @ts-expect-error
Intl.__disableRegExpRestore(); Intl.__disableRegExpRestore();
window.Intl = Intl; window.Intl = Intl;

View File

@ -23,13 +23,13 @@ describe('Forgot / reset password', () => {
cy.location('pathname').should('eq', '/password'); cy.location('pathname').should('eq', '/password');
cy.getByTestId('auth-controls-secondary') cy.findByTestId('auth-controls-secondary')
.contains('Forgot password') .contains('Forgot password')
.click(); .click();
cy.location('pathname').should('eq', '/forgot-password'); cy.location('pathname').should('eq', '/forgot-password');
cy.getByTestId('forgot-password-login').should( cy.findByTestId('forgot-password-login').should(
'contain', 'contain',
account1.username, account1.username,
); );
@ -54,7 +54,7 @@ describe('Forgot / reset password', () => {
cy.location('pathname').should('eq', '/recover-password'); cy.location('pathname').should('eq', '/recover-password');
cy.getByTestId('auth-body').should('contain', emailMask); cy.findByTestId('auth-body').should('contain', emailMask);
}); });
it('should allow change login', () => { it('should allow change login', () => {
@ -80,13 +80,13 @@ describe('Forgot / reset password', () => {
cy.location('pathname').should('eq', '/password'); cy.location('pathname').should('eq', '/password');
cy.getByTestId('auth-controls-secondary') cy.findByTestId('auth-controls-secondary')
.contains('Forgot password') .contains('Forgot password')
.click(); .click();
cy.location('pathname').should('eq', '/forgot-password'); cy.location('pathname').should('eq', '/forgot-password');
cy.getByTestId('edit-login').click(); cy.findByTestId('edit-login').click();
cy.get('[name=login]').should('have.value', account1.username); cy.get('[name=login]').should('have.value', account1.username);
cy.get('[name=login]').type(`{selectall}${login}`); cy.get('[name=login]').type(`{selectall}${login}`);
@ -175,22 +175,22 @@ describe('Forgot / reset password', () => {
cy.location('pathname').should('eq', '/password'); cy.location('pathname').should('eq', '/password');
cy.getByTestId('auth-controls-secondary') cy.findByTestId('auth-controls-secondary')
.contains('Forgot password') .contains('Forgot password')
.click(); .click();
cy.location('pathname').should('eq', '/forgot-password'); cy.location('pathname').should('eq', '/forgot-password');
cy.getByTestId('auth-controls-secondary').contains('Already have').click(); cy.findByTestId('auth-controls-secondary').contains('Already have').click();
cy.location('pathname').should('eq', '/recover-password'); cy.location('pathname').should('eq', '/recover-password');
cy.getByTestId('auth-controls-secondary') cy.findByTestId('auth-controls-secondary')
.contains('Contact support') .contains('Contact support')
.click(); .click();
cy.getByTestId('feedbackPopup').should('be.visible'); cy.findByTestId('feedbackPopup').should('be.visible');
cy.getByTestId('feedback-popup-close').click(); cy.findByTestId('feedback-popup-close').click();
cy.getByTestId('feedbackPopup').should('not.be.visible'); cy.findByTestId('feedbackPopup').should('not.be.visible');
cy.get('[name=key]').type(key); cy.get('[name=key]').type(key);
cy.get('[name=newPassword]').type(newPassword); cy.get('[name=newPassword]').type(newPassword);

View File

@ -49,7 +49,7 @@ describe('User with invalid token and refreshToken', () => {
cy.url().should('include', '/password'); cy.url().should('include', '/password');
cy.getByTestId('toolbar').get('a').contains('Ely.by').click(); cy.findByTestId('toolbar').get('a').contains('Ely.by').click();
cy.url().should('include', '/password'); cy.url().should('include', '/password');
}); });
@ -82,7 +82,7 @@ describe('User with invalid token and refreshToken', () => {
cy.url().should('include', '/login'); cy.url().should('include', '/login');
cy.getByTestId('toolbar').contains('Join'); cy.findByTestId('toolbar').contains('Join');
}); });
it('should allow logout', () => { it('should allow logout', () => {
@ -99,12 +99,12 @@ describe('User with invalid token and refreshToken', () => {
cy.wait('@account').its('status').should('eq', 401); cy.wait('@account').its('status').should('eq', 401);
cy.getByTestId('toolbar').contains(account2.username).click(); cy.findByTestId('toolbar').contains(account2.username).click();
cy.getByTestId('toolbar').contains('Log out').click(); cy.findByTestId('toolbar').contains('Log out').click();
cy.wait('@logout'); cy.wait('@logout');
cy.getByTestId('toolbar').contains(account2.email).should('not.exist'); cy.findByTestId('toolbar').contains(account2.email).should('not.exist');
cy.getByTestId('toolbar').contains(account2.username).should('not.exist'); cy.findByTestId('toolbar').contains(account2.username).should('not.exist');
}); });
it('should allow enter new login from choose account', () => { it('should allow enter new login from choose account', () => {
@ -151,7 +151,7 @@ describe('User with invalid token and refreshToken', () => {
cy.url().should('include', '/login'); cy.url().should('include', '/login');
cy.getByTestId('toolbar').contains('a', 'Join'); cy.findByTestId('toolbar').contains('a', 'Join');
}); });
it('should ask for password if selected account with bad token', () => { it('should ask for password if selected account with bad token', () => {

View File

@ -47,9 +47,9 @@ describe('OAuth', () => {
cy.url().should('include', '/oauth/choose-account'); cy.url().should('include', '/oauth/choose-account');
cy.getByTestId('auth-header').should('contain', 'Choose an account'); cy.findByTestId('auth-header').should('contain', 'Choose an account');
cy.getByTestId('auth-body').contains(account.email).click(); cy.findByTestId('auth-body').contains(account.email).click();
cy.url().should('equal', 'https://dev.ely.by/'); cy.url().should('equal', 'https://dev.ely.by/');
}, },
@ -89,7 +89,7 @@ describe('OAuth', () => {
cy.server({ enable: false }); cy.server({ enable: false });
cy.getByTestId('auth-controls').contains('Approve').click(); cy.findByTestId('auth-controls').contains('Approve').click();
cy.url().should('match', /^http:\/\/localhost:8080\/?\?code=[^&]+&state=$/); cy.url().should('match', /^http:\/\/localhost:8080\/?\?code=[^&]+&state=$/);
}); });
@ -141,7 +141,7 @@ describe('OAuth', () => {
cy.server({ enable: false }); cy.server({ enable: false });
cy.getByTestId('auth-controls-secondary').contains('Decline').click(); cy.findByTestId('auth-controls-secondary').contains('Decline').click();
cy.url().should('include', 'error=access_denied'); cy.url().should('include', 'error=access_denied');
}); });
@ -214,9 +214,9 @@ describe('OAuth', () => {
cy.url().should('include', '/oauth/choose-account'); cy.url().should('include', '/oauth/choose-account');
cy.getByTestId('auth-header').should('contain', 'Choose an account'); cy.findByTestId('auth-header').should('contain', 'Choose an account');
cy.getByTestId('auth-body').contains(account.email).click(); cy.findByTestId('auth-body').contains(account.email).click();
cy.url().should('equal', 'https://dev.ely.by/'); cy.url().should('equal', 'https://dev.ely.by/');
}); });
@ -234,7 +234,7 @@ describe('OAuth', () => {
cy.url().should('include', '/oauth/choose-account'); cy.url().should('include', '/oauth/choose-account');
cy.getByTestId('auth-controls').contains('another account').click(); cy.findByTestId('auth-controls').contains('another account').click();
cy.url().should('include', '/login'); cy.url().should('include', '/login');
@ -261,7 +261,7 @@ describe('OAuth', () => {
assertPermissions(); assertPermissions();
cy.getByTestId('auth-controls').contains('Approve').click(); cy.findByTestId('auth-controls').contains('Approve').click();
cy.url().should( cy.url().should(
'match', 'match',
@ -284,7 +284,7 @@ describe('OAuth', () => {
cy.url().should('include', '/oauth/permissions'); cy.url().should('include', '/oauth/permissions');
cy.getByTestId('auth-controls-secondary').contains('Decline').click(); cy.findByTestId('auth-controls-secondary').contains('Decline').click();
cy.url().should('include', 'error=access_denied'); cy.url().should('include', 'error=access_denied');
}); });
@ -302,13 +302,13 @@ describe('OAuth', () => {
cy.url().should('include', '/oauth/choose-account'); cy.url().should('include', '/oauth/choose-account');
cy.getByTestId('auth-header').should('contain', 'Choose an account'); cy.findByTestId('auth-header').should('contain', 'Choose an account');
cy.getByTestId('auth-body').contains(account.email).click(); cy.findByTestId('auth-body').contains(account.email).click();
assertPermissions(); assertPermissions();
cy.getByTestId('auth-controls').contains('Approve').click(); cy.findByTestId('auth-controls').contains('Approve').click();
cy.url().should( cy.url().should(
'match', 'match',
@ -337,7 +337,7 @@ describe('OAuth', () => {
assertPermissions(); assertPermissions();
cy.getByTestId('auth-controls').contains('Approve').click(); cy.findByTestId('auth-controls').contains('Approve').click();
cy.url().should( cy.url().should(
'match', 'match',
@ -390,7 +390,7 @@ describe('OAuth', () => {
cy.url().should('include', 'oauth/finish#{%22auth_code%22:'); cy.url().should('include', 'oauth/finish#{%22auth_code%22:');
cy.getByTestId('oauth-code-container').should( cy.findByTestId('oauth-code-container').should(
'contain', 'contain',
'provide the following code', 'provide the following code',
); );
@ -398,7 +398,7 @@ describe('OAuth', () => {
// just click on copy, but we won't assert if the string was copied // just click on copy, but we won't assert if the string was copied
// because it is a little bit complicated // because it is a little bit complicated
// https://github.com/cypress-io/cypress/issues/2752 // https://github.com/cypress-io/cypress/issues/2752
cy.getByTestId('oauth-code-container').contains('Copy').click(); cy.findByTestId('oauth-code-container').contains('Copy').click();
}); });
}); });
}); });
@ -406,12 +406,12 @@ describe('OAuth', () => {
function assertPermissions() { function assertPermissions() {
cy.url().should('include', '/oauth/permissions'); cy.url().should('include', '/oauth/permissions');
cy.getByTestId('auth-header').should('contain', 'Application permissions'); cy.findByTestId('auth-header').should('contain', 'Application permissions');
cy.getByTestId('auth-body').should( cy.findByTestId('auth-body').should(
'contain', 'contain',
'Access to your profile data (except Email)', 'Access to your profile data (except Email)',
); );
cy.getByTestId('auth-body').should( cy.findByTestId('auth-body').should(
'contain', 'contain',
'Access to your Email address', 'Access to your Email address',
); );

View File

@ -27,7 +27,7 @@ describe('Register', () => {
}); });
cy.visit('/'); cy.visit('/');
cy.getByTestId('toolbar').contains('Join').click(); cy.findByTestId('toolbar').contains('Join').click();
cy.location('pathname').should('eq', '/register'); cy.location('pathname').should('eq', '/register');
@ -89,7 +89,7 @@ describe('Register', () => {
}); });
cy.visit('/register'); cy.visit('/register');
cy.getByTestId('auth-controls-secondary').contains('Already have').click(); cy.findByTestId('auth-controls-secondary').contains('Already have').click();
cy.location('pathname').should('eq', '/activation'); cy.location('pathname').should('eq', '/activation');
@ -142,7 +142,7 @@ describe('Register', () => {
}).as('resend'); }).as('resend');
cy.visit('/register'); cy.visit('/register');
cy.getByTestId('auth-controls-secondary').contains('not received').click(); cy.findByTestId('auth-controls-secondary').contains('not received').click();
cy.location('pathname').should('eq', '/resend-activation'); cy.location('pathname').should('eq', '/resend-activation');

View File

@ -16,7 +16,7 @@ describe('Sign in / Log out', () => {
cy.location('pathname').should('eq', '/'); cy.location('pathname').should('eq', '/');
cy.getByTestId('toolbar') cy.findByTestId('toolbar')
.contains(account1.username) .contains(account1.username)
.should(() => { .should(() => {
const state = JSON.parse(localStorage.getItem('redux-storage') || ''); const state = JSON.parse(localStorage.getItem('redux-storage') || '');
@ -43,7 +43,7 @@ describe('Sign in / Log out', () => {
cy.location('pathname').should('eq', '/login'); cy.location('pathname').should('eq', '/login');
cy.getByTestId('home-page').click(); cy.findByTestId('home-page').click();
cy.location('pathname').should('eq', '/login'); cy.location('pathname').should('eq', '/login');
}); });
@ -62,7 +62,7 @@ describe('Sign in / Log out', () => {
cy.location('pathname').should('eq', '/'); cy.location('pathname').should('eq', '/');
cy.getByTestId('toolbar') cy.findByTestId('toolbar')
.contains(account1.username) .contains(account1.username)
.should(() => { .should(() => {
const state = JSON.parse(localStorage.getItem('redux-storage') || ''); const state = JSON.parse(localStorage.getItem('redux-storage') || '');
@ -123,12 +123,12 @@ describe('Sign in / Log out', () => {
cy.visit('/'); cy.visit('/');
cy.getByTestId('toolbar').contains(account1.username).click(); cy.findByTestId('toolbar').contains(account1.username).click();
cy.getByTestId('active-account').getByTestId('logout-account').click(); cy.findByTestId('active-account').findByTestId('logout-account').click();
cy.location('pathname').should('eq', '/login'); cy.location('pathname').should('eq', '/login');
cy.getByTestId('toolbar').should('contain', 'Join'); cy.findByTestId('toolbar').should('contain', 'Join');
}); });
describe('multi account', () => { describe('multi account', () => {
@ -137,12 +137,12 @@ describe('Sign in / Log out', () => {
cy.visit('/'); cy.visit('/');
cy.getByTestId('toolbar').contains(account2.username).click(); cy.findByTestId('toolbar').contains(account2.username).click();
cy.getByTestId('active-account').should('have.length', 1); cy.findByTestId('active-account').should('have.length', 1);
cy.get('[data-e2e-account-id]').should('have.length', 0); cy.get('[data-e2e-account-id]').should('have.length', 0);
cy.getByTestId('add-account').click(); cy.findByTestId('add-account').click();
cy.location('pathname').should('eq', '/login'); cy.location('pathname').should('eq', '/login');
@ -156,12 +156,12 @@ describe('Sign in / Log out', () => {
cy.location('pathname').should('eq', '/'); cy.location('pathname').should('eq', '/');
cy.getByTestId('toolbar').contains(account1.username).click(); cy.findByTestId('toolbar').contains(account1.username).click();
cy.getByTestId('active-account').should('have.length', 1); cy.findByTestId('active-account').should('have.length', 1);
cy.get('[data-e2e-account-id]').should('have.length', 1); cy.get('[data-e2e-account-id]').should('have.length', 1);
cy.get('[data-e2e-account-id]').getByTestId('logout-account').click(); cy.get('[data-e2e-account-id]').findByTestId('logout-account').click();
}); });
it('should go back to profile from login screen', () => { it('should go back to profile from login screen', () => {
@ -169,9 +169,9 @@ describe('Sign in / Log out', () => {
cy.visit('/'); cy.visit('/');
cy.getByTestId('toolbar').contains(account1.username).click(); cy.findByTestId('toolbar').contains(account1.username).click();
cy.getByTestId('add-account').click(); cy.findByTestId('add-account').click();
cy.location('pathname').should('eq', '/login'); cy.location('pathname').should('eq', '/login');
@ -185,14 +185,14 @@ describe('Sign in / Log out', () => {
cy.visit('/'); cy.visit('/');
cy.getByTestId('toolbar').contains(account1.username).click(); cy.findByTestId('toolbar').contains(account1.username).click();
cy.getByTestId('active-account').getByTestId('logout-account').click(); cy.findByTestId('active-account').findByTestId('logout-account').click();
cy.getByTestId('toolbar').contains(account2.username).click(); cy.findByTestId('toolbar').contains(account2.username).click();
cy.get('[data-e2e-account-id]').should('have.length', 0); cy.get('[data-e2e-account-id]').should('have.length', 0);
cy.getByTestId('profile-index').should('not.contain', account1.username); cy.findByTestId('profile-index').should('not.contain', account1.username);
cy.getByTestId('profile-index').should('contain', account2.username); cy.findByTestId('profile-index').should('contain', account2.username);
}); });
it('should not allow log in the same account twice', () => { it('should not allow log in the same account twice', () => {
@ -200,12 +200,12 @@ describe('Sign in / Log out', () => {
cy.visit('/'); cy.visit('/');
cy.getByTestId('toolbar').contains(account1.username).click(); cy.findByTestId('toolbar').contains(account1.username).click();
cy.getByTestId('active-account').should('have.length', 1); cy.findByTestId('active-account').should('have.length', 1);
cy.get('[data-e2e-account-id]').should('have.length', 0); cy.get('[data-e2e-account-id]').should('have.length', 0);
cy.getByTestId('add-account').click(); cy.findByTestId('add-account').click();
cy.location('pathname').should('eq', '/login'); cy.location('pathname').should('eq', '/login');
@ -219,7 +219,7 @@ describe('Sign in / Log out', () => {
cy.location('pathname').should('eq', '/'); cy.location('pathname').should('eq', '/');
cy.getByTestId('toolbar').contains(account1.username).click(); cy.findByTestId('toolbar').contains(account1.username).click();
cy.get('[data-e2e-account-id]').should('have.length', 0); cy.get('[data-e2e-account-id]').should('have.length', 0);
}); });
}); });

View File

@ -65,20 +65,20 @@ describe('Applications', () => {
cy.contains('Cancel').should('not.exist'); cy.contains('Cancel').should('not.exist');
// test reset client secret // test reset client secret
cy.getByTestId('client-secret').then(([el]) => { cy.findByTestId('client-secret').then(([el]) => {
const prevSecret = el.value; const prevSecret = el.value;
cy.getByTestId('client-secret').should('have.value', prevSecret); cy.findByTestId('client-secret').should('have.value', prevSecret);
cy.contains('Reset Client Secret').click(); cy.contains('Reset Client Secret').click();
cy.contains('Continue').click(); cy.contains('Continue').click();
cy.wait('@revokeSecret'); cy.wait('@revokeSecret');
cy.contains('Cancel').should('not.exist'); cy.contains('Cancel').should('not.exist');
cy.getByTestId('client-secret').should('not.have.value', prevSecret); cy.findByTestId('client-secret').should('not.have.value', prevSecret);
}); });
// test delete // test delete
cy.contains('Delete').click(); cy.contains('Delete').click();
cy.getByTestId('delete-app').click(); cy.findByTestId('delete-app').click();
cy.wait('@delete'); cy.wait('@delete');
cy.contains("You don't have any app registered yet.").should( cy.contains("You don't have any app registered yet.").should(
'be.visible', 'be.visible',
@ -111,7 +111,7 @@ describe('Applications', () => {
cy.visit('/dev/applications'); cy.visit('/dev/applications');
cy.get('[data-e2e-content] [data-e2e-button="feedbackPopup"]').click(); cy.get('[data-e2e-content] [data-e2e-button="feedbackPopup"]').click();
cy.getByTestId('feedbackPopup').should('be.visible'); cy.findByTestId('feedbackPopup').should('be.visible');
}); });
}); });
}); });

View File

@ -58,9 +58,9 @@ describe('Profile — Change Email', () => {
cy.location('pathname').should('eq', '/profile/change-email/step2'); cy.location('pathname').should('eq', '/profile/change-email/step2');
cy.getByTestId('step2').should('be.visible'); cy.findByTestId('step2').should('be.visible');
cy.getByTestId('step2').find('[name=key]').type(key); cy.findByTestId('step2').find('[name=key]').type(key);
cy.getByTestId('step2') cy.findByTestId('step2')
.find('[name=email]') .find('[name=email]')
.type(`${account.email}{enter}`); .type(`${account.email}{enter}`);
@ -75,9 +75,9 @@ describe('Profile — Change Email', () => {
); );
cy.location('pathname').should('eq', '/profile/change-email/step3'); cy.location('pathname').should('eq', '/profile/change-email/step3');
cy.getByTestId('step3').find('[name=key]').should('be.visible'); cy.findByTestId('step3').find('[name=key]').should('be.visible');
cy.getByTestId('step3').find('[name=key]').should('have.value', ''); cy.findByTestId('step3').find('[name=key]').should('have.value', '');
cy.getByTestId('step3').find('[name=key]').type(`${key2}{enter}`); cy.findByTestId('step3').find('[name=key]').type(`${key2}{enter}`);
cy.wait('@saveEmail') cy.wait('@saveEmail')
.its('requestBody') .its('requestBody')
@ -118,9 +118,9 @@ describe('Profile — Change Email', () => {
cy.visit(`/profile/change-email/step2/${key}`); cy.visit(`/profile/change-email/step2/${key}`);
cy.getByTestId('step2').find('[name=key]').should('have.value', key); cy.findByTestId('step2').find('[name=key]').should('have.value', key);
cy.getByTestId('step2').find('[name=key]').should('be.disabled'); cy.findByTestId('step2').find('[name=key]').should('be.disabled');
cy.getByTestId('step2') cy.findByTestId('step2')
.find('[name=email]') .find('[name=email]')
.type(`${account.email}{enter}`); .type(`${account.email}{enter}`);
@ -134,7 +134,7 @@ describe('Profile — Change Email', () => {
}).toString(), }).toString(),
); );
cy.location('pathname').should('eq', '/profile/change-email/step3'); cy.location('pathname').should('eq', '/profile/change-email/step3');
cy.getByTestId('step3').find('[name=key]').should('have.value', ''); cy.findByTestId('step3').find('[name=key]').should('have.value', '');
}); });
}); });
@ -151,10 +151,10 @@ describe('Profile — Change Email', () => {
cy.visit(`/profile/change-email/step3/${key}`); cy.visit(`/profile/change-email/step3/${key}`);
cy.getByTestId('step3').find('[name=key]').should('have.value', key); cy.findByTestId('step3').find('[name=key]').should('have.value', key);
cy.getByTestId('step3').find('[name=key]').should('be.disabled'); cy.findByTestId('step3').find('[name=key]').should('be.disabled');
cy.getByTestId('change-email').find('[type=submit]').click(); cy.findByTestId('change-email').find('[type=submit]').click();
cy.wait('@saveEmail').its('requestBody').should( cy.wait('@saveEmail').its('requestBody').should(
'eq', 'eq',

View File

@ -82,7 +82,7 @@ describe('Profile — Change password', () => {
confirmWithPassword(account.password); confirmWithPassword(account.password);
cy.getByTestId('password-request-form').should('not.be.visible'); cy.findByTestId('password-request-form').should('not.be.visible');
cy.contains('The passwords does not match').should('be.visible'); cy.contains('The passwords does not match').should('be.visible');
}); });
}); });

View File

@ -66,9 +66,9 @@ describe('Profile — Change Username', () => {
); );
cy.location('pathname').should('eq', '/'); cy.location('pathname').should('eq', '/');
cy.getByTestId('profile-item').should('contain', account.username); cy.findAllByTestId('profile-item').should('contain', account.username);
cy.getByTestId('toolbar').contains(account.username).click(); cy.findByTestId('toolbar').contains(account.username).click();
cy.getByTestId('active-account').should('contain', account.username); cy.findByTestId('active-account').should('contain', account.username);
}); });
}); });
@ -77,7 +77,7 @@ describe('Profile — Change Username', () => {
cy.visit('/profile/change-username'); cy.visit('/profile/change-username');
cy.getByTestId('back-to-profile').click(); cy.findByTestId('back-to-profile').click();
cy.location('pathname').should('eq', '/'); cy.location('pathname').should('eq', '/');
}); });

View File

@ -16,32 +16,32 @@ describe('feedback popup', () => {
cy.visit('/'); cy.visit('/');
cy.getByTestId('footer').contains('Contact Us').click(); cy.findByTestId('footer').contains('Contact Us').click();
cy.getByTestId('feedbackPopup').should('be.visible'); cy.findByTestId('feedbackPopup').should('be.visible');
cy.get('[name=subject]').type(subject); cy.get('[name=subject]').type(subject);
cy.get('[name=email]').should('have.value', account1.email); cy.get('[name=email]').should('have.value', account1.email);
cy.get('[name=message]').type(message); cy.get('[name=message]').type(message);
cy.get('[data-e2e-select-name=category]') cy.get('[data-e2e-select-name=category]')
.getByTestId('select-label') .findByTestId('select-label')
.should('contain', 'What are you interested'); .should('contain', 'What are you interested');
cy.get('[data-e2e-select-name=category]').click(); cy.get('[data-e2e-select-name=category]').click();
cy.get('[data-e2e-select-name=category]').contains('bug').click(); cy.get('[data-e2e-select-name=category]').contains('bug').click();
cy.get('[data-e2e-select-name=category]') cy.get('[data-e2e-select-name=category]')
.getByTestId('select-label') .findByTestId('select-label')
.should('contain', 'bug'); .should('contain', 'bug');
cy.getByTestId('feedbackPopup').get('[type=submit]').click(); cy.findByTestId('feedbackPopup').get('[type=submit]').click();
cy.getByTestId('feedbackPopup').should( cy.findByTestId('feedbackPopup').should(
'contain', 'contain',
'Your message was received', 'Your message was received',
); );
cy.getByTestId('feedbackPopup').should('contain', account1.email); cy.findByTestId('feedbackPopup').should('contain', account1.email);
cy.getByTestId('feedback-popup-close-button').click(); cy.findByTestId('feedback-popup-close-button').click();
cy.getByTestId('feedbackPopup').should('not.be.visible'); cy.findByTestId('feedbackPopup').should('not.be.visible');
}); });
}); });

View File

@ -2,32 +2,32 @@ describe('Change locale', () => {
it('should change locale from footer', () => { it('should change locale from footer', () => {
cy.visit('/'); cy.visit('/');
cy.getByTestId('footer').contains('Site language').click(); cy.findByTestId('footer').contains('Site language').click();
cy.getByTestId('language-switcher').should('be.visible'); cy.findByTestId('language-switcher').should('be.visible');
cy.getByTestId('language-switcher').should( cy.findByTestId('language-switcher').should(
'have.attr', 'have.attr',
'data-e2e-active-locale', 'data-e2e-active-locale',
'en', 'en',
); );
cy.getByTestId('language-list').contains('Belarusian').click(); cy.findByTestId('language-list').contains('Belarusian').click();
cy.getByTestId('language-switcher').should('not.be.visible'); cy.findByTestId('language-switcher').should('not.be.visible');
cy.getByTestId('footer').contains('Мова сайта').click(); cy.findByTestId('footer').contains('Мова сайта').click();
cy.getByTestId('language-switcher').should('be.visible'); cy.findByTestId('language-switcher').should('be.visible');
cy.getByTestId('language-switcher').should( cy.findByTestId('language-switcher').should(
'have.attr', 'have.attr',
'data-e2e-active-locale', 'data-e2e-active-locale',
'be', 'be',
); );
cy.getByTestId('language-list').contains('English').click(); cy.findByTestId('language-list').contains('English').click();
cy.getByTestId('language-switcher').should('not.be.visible'); cy.findByTestId('language-switcher').should('not.be.visible');
cy.getByTestId('footer').should('contain', 'Site language'); cy.findByTestId('footer').should('contain', 'Site language');
}); });
it('should change locale from profile', () => { it('should change locale from profile', () => {
@ -42,20 +42,20 @@ describe('Change locale', () => {
cy.visit('/'); cy.visit('/');
cy.getByTestId('profile-index').contains('English').click(); cy.findByTestId('profile-index').contains('English').click();
cy.getByTestId('language-switcher').should('be.visible'); cy.findByTestId('language-switcher').should('be.visible');
cy.getByTestId('language-switcher').should( cy.findByTestId('language-switcher').should(
'have.attr', 'have.attr',
'data-e2e-active-locale', 'data-e2e-active-locale',
'en', 'en',
); );
cy.getByTestId('language-list').contains('Belarusian').click(); cy.findByTestId('language-list').contains('Belarusian').click();
cy.wait('@language').its('requestBody').should('eq', 'lang=be'); cy.wait('@language').its('requestBody').should('eq', 'lang=be');
cy.getByTestId('language-switcher').should('not.be.visible'); cy.findByTestId('language-switcher').should('not.be.visible');
cy.getByTestId('profile-index').should('contain', 'Беларуская'); cy.findByTestId('profile-index').should('contain', 'Беларуская');
}); });
}); });

View File

@ -31,7 +31,7 @@ describe('Profile — mfa', () => {
cy.location('pathname').should('eq', '/profile/mfa/step2'); cy.location('pathname').should('eq', '/profile/mfa/step2');
cy.getByTestId('secret').should('not.be.empty'); cy.findByTestId('secret').should('not.be.empty');
cy.contains('Ready').click(); cy.contains('Ready').click();
@ -170,9 +170,9 @@ describe('Profile — mfa', () => {
}); });
function assertOs(name: string, os: string) { function assertOs(name: string, os: string) {
cy.getByTestId('os-tile').contains(name).click(); cy.findAllByTestId('os-tile').contains(name).click();
cy.getByTestId('os-instruction').should('have.attr', 'data-os', os); cy.findByTestId('os-instruction').should('have.attr', 'data-os', os);
cy.getByTestId('os-tile').contains(name).click(); cy.findAllByTestId('os-tile').contains(name).click();
} }

View File

@ -1,16 +1,16 @@
export function getSectionByName(name: string) { export function getSectionByName(name: string) {
return cy return cy
.getByTestId('profile-item') .findAllByTestId('profile-item')
.contains(name) .contains(name)
.closest('[data-testid="profile-item"]'); .closest('[data-testid="profile-item"]');
} }
export function openSectionByName(name: string) { export function openSectionByName(name: string) {
return getSectionByName(name).getByTestId('profile-action').click(); return getSectionByName(name).findByTestId('profile-action').click();
} }
export function confirmWithPassword(password: string) { export function confirmWithPassword(password: string) {
cy.getByTestId('password-request-form').should('be.visible'); cy.findByTestId('password-request-form').should('be.visible');
cy.get('[name=password]').type(password); cy.get('[name=password]').type(password);
cy.getByTestId('password-request-form').find('[type=submit]').click(); cy.findByTestId('password-request-form').find('[type=submit]').click();
} }

View File

@ -1,3 +1,5 @@
import '@testing-library/cypress/add-commands';
import { account1, account2 } from '../fixtures/accounts'; import { account1, account2 } from '../fixtures/accounts';
// *********************************************** // ***********************************************
@ -83,20 +85,6 @@ Cypress.Commands.add(
}, },
); );
Cypress.Commands.add(
'getByTestId',
{ prevSubject: 'optional' },
(subject, id, options) => {
const selector = `[data-testid=${id}]`;
if (subject) {
return cy.wrap(subject.find(selector));
}
return cy.get(selector, options);
},
);
function createState(accounts) { function createState(accounts) {
return { return {
accounts: { accounts: {

View File

@ -13,6 +13,8 @@
"private": true, "private": true,
"dependencies": { "dependencies": {
"@cypress/webpack-preprocessor": "^5.4.1", "@cypress/webpack-preprocessor": "^5.4.1",
"@testing-library/cypress": "^6.0.0",
"@types/testing-library__cypress": "^5.0.5",
"cypress": "^4.5.0" "cypress": "^4.5.0"
} }
} }

View File

@ -8,7 +8,7 @@
"noEmit": true, "noEmit": true,
"moduleResolution": "node", "moduleResolution": "node",
"lib": ["es6", "dom"], "lib": ["es6", "dom"],
"types": ["cypress"], "types": ["cypress", "@types/testing-library__cypress"],
"resolveJsonModule": true, "resolveJsonModule": true,
"noImplicitAny": false "noImplicitAny": false
}, },

View File

@ -1809,7 +1809,7 @@
dependencies: dependencies:
regenerator-runtime "^0.13.2" regenerator-runtime "^0.13.2"
"@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2", "@babel/runtime@^7.9.6": "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2", "@babel/runtime@^7.9.6":
version "7.9.6" version "7.9.6"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f"
integrity sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ== integrity sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==
@ -2891,7 +2891,16 @@
"@svgr/plugin-svgo" "^4.3.1" "@svgr/plugin-svgo" "^4.3.1"
loader-utils "^1.2.3" loader-utils "^1.2.3"
"@testing-library/dom@^7.2.2": "@testing-library/cypress@^6.0.0":
version "6.0.0"
resolved "https://registry.yarnpkg.com/@testing-library/cypress/-/cypress-6.0.0.tgz#935f7716e0e495f02fd753a42621e4d350097dce"
integrity sha512-vWPQtPsIDk5STOH2XdJbJoYq9gxOSAItP0ail+MlylK230zNkf3ODKd6eqWnDdruuqrhTF3CyqvPNMA8Xks/UQ==
dependencies:
"@babel/runtime" "^7.8.7"
"@testing-library/dom" "^7.0.2"
"@types/testing-library__cypress" "^5.0.3"
"@testing-library/dom@^7.0.2", "@testing-library/dom@^7.2.2":
version "7.5.7" version "7.5.7"
resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.5.7.tgz#c4bf683a65083d4a78644588cfa4ad684c113fc7" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.5.7.tgz#c4bf683a65083d4a78644588cfa4ad684c113fc7"
integrity sha512-835MiwAxQE7xjSrhpeJbv41UQRmsPJQ0tGfzWiJMdZj2LBbdG5cT8Z44Viv11/XucCmJHr/v8q7VpZnuSimscg== integrity sha512-835MiwAxQE7xjSrhpeJbv41UQRmsPJQ0tGfzWiJMdZj2LBbdG5cT8Z44Viv11/XucCmJHr/v8q7VpZnuSimscg==
@ -3325,7 +3334,7 @@
resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.5.1.tgz#d27b81af0d1cfe1f9b24eebe7a24f74ae40f5b7c" resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.5.1.tgz#d27b81af0d1cfe1f9b24eebe7a24f74ae40f5b7c"
integrity sha512-EZQUP3hSZQyTQRfiLqelC9NMWd1kqLcmQE0dMiklxBkgi84T+cHOhnKpgk4NnOWpGX863yE6+IaGnOXUNFqDnQ== integrity sha512-EZQUP3hSZQyTQRfiLqelC9NMWd1kqLcmQE0dMiklxBkgi84T+cHOhnKpgk4NnOWpGX863yE6+IaGnOXUNFqDnQ==
"@types/sinonjs__fake-timers@*": "@types/sinonjs__fake-timers@*", "@types/sinonjs__fake-timers@6.0.1":
version "6.0.1" version "6.0.1"
resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.1.tgz#681df970358c82836b42f989188d133e218c458e" resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.1.tgz#681df970358c82836b42f989188d133e218c458e"
integrity sha512-yYezQwGWty8ziyYLdZjwxyMb0CZR49h8JALHGrxjQHWlqGgc8kLdHEgWrgL0uZ29DMvEVBDnHU2Wg36zKSIUtA== integrity sha512-yYezQwGWty8ziyYLdZjwxyMb0CZR49h8JALHGrxjQHWlqGgc8kLdHEgWrgL0uZ29DMvEVBDnHU2Wg36zKSIUtA==
@ -3350,6 +3359,14 @@
resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.5.tgz#9adbc12950582aa65ead76bffdf39fe0c27a3c02" resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.5.tgz#9adbc12950582aa65ead76bffdf39fe0c27a3c02"
integrity sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ== integrity sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ==
"@types/testing-library__cypress@^5.0.3", "@types/testing-library__cypress@^5.0.5":
version "5.0.5"
resolved "https://registry.yarnpkg.com/@types/testing-library__cypress/-/testing-library__cypress-5.0.5.tgz#ca2a23eb03c48ecb50f411b3d5e62a218ac6b03b"
integrity sha512-FXRE98G+jkru7Dag6dFWs3M90BGMzDEBzox8Uro+7M70UcB1YVUetNVRyqYShFDLIDv+z3ZjV4ZeUmdgPuuyNw==
dependencies:
"@types/testing-library__dom" "*"
cypress "*"
"@types/testing-library__dom@*": "@types/testing-library__dom@*":
version "7.0.2" version "7.0.2"
resolved "https://registry.yarnpkg.com/@types/testing-library__dom/-/testing-library__dom-7.0.2.tgz#2906f8a0dce58b0746c6ab606f786bd06fe6940e" resolved "https://registry.yarnpkg.com/@types/testing-library__dom/-/testing-library__dom-7.0.2.tgz#2906f8a0dce58b0746c6ab606f786bd06fe6940e"
@ -6256,6 +6273,49 @@ cyclist@^1.0.1:
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
cypress@*:
version "4.6.0"
resolved "https://registry.yarnpkg.com/cypress/-/cypress-4.6.0.tgz#ac76786500580df1347a0a50be63e5c59ffbef59"
integrity sha512-vIPXAceRP+Nxvnm/O9ruY9EQaRGmVVybtk9F1sfC9mH3067YbitrdBTynaaLuHFj90p9e0U2ZCV7OkX4x4V/Wg==
dependencies:
"@cypress/listr-verbose-renderer" "0.4.1"
"@cypress/request" "2.88.5"
"@cypress/xvfb" "1.2.4"
"@types/sinonjs__fake-timers" "6.0.1"
"@types/sizzle" "2.3.2"
arch "2.1.1"
bluebird "3.7.2"
cachedir "2.3.0"
chalk "2.4.2"
check-more-types "2.24.0"
cli-table3 "0.5.1"
commander "4.1.0"
common-tags "1.8.0"
debug "4.1.1"
eventemitter2 "4.1.2"
execa "1.0.0"
executable "4.1.1"
extract-zip "1.7.0"
fs-extra "8.1.0"
getos "3.1.4"
is-ci "2.0.0"
is-installed-globally "0.1.0"
lazy-ass "1.6.0"
listr "0.14.3"
lodash "4.17.15"
log-symbols "3.0.0"
minimist "1.2.5"
moment "2.24.0"
ospath "1.2.2"
pretty-bytes "5.3.0"
ramda "0.26.1"
request-progress "3.0.0"
supports-color "7.1.0"
tmp "0.1.0"
untildify "4.0.0"
url "0.11.0"
yauzl "2.10.0"
cypress@^4.5.0: cypress@^4.5.0:
version "4.5.0" version "4.5.0"
resolved "https://registry.yarnpkg.com/cypress/-/cypress-4.5.0.tgz#01940d085f6429cec3c87d290daa47bb976a7c7b" resolved "https://registry.yarnpkg.com/cypress/-/cypress-4.5.0.tgz#01940d085f6429cec3c87d290daa47bb976a7c7b"