accounts-frontend/tests-e2e/cypress/integration/profile/change-password.test.ts

90 lines
2.6 KiB
TypeScript

import { openSectionByName, confirmWithPassword } from './utils';
describe('Profile — Change password', () => {
it('should change password', () => {
cy.login({ accounts: ['default'] }).then(({ accounts: [account] }) => {
cy.server();
cy.route({
method: 'POST',
url: `/api/v1/accounts/${account.id}/password`,
}).as('password');
cy.visit('/');
openSectionByName('Password');
cy.location('pathname').should('eq', '/profile/change-password');
cy.get('[name=newPassword]').type(account.password);
cy.get('[name=newRePassword]').type(account.password);
cy.get('[name=logoutAll]').should('be.checked');
cy.get('[type=submit]').click();
cy.wait('@password')
.its('requestBody')
.should(
'eq',
new URLSearchParams({
password: '',
newPassword: account.password,
newRePassword: account.password,
logoutAll: '1',
}).toString(),
);
confirmWithPassword(account.password);
cy.wait('@password')
.its('requestBody')
.should(
'eq',
new URLSearchParams({
password: account.password,
newPassword: account.password,
newRePassword: account.password,
logoutAll: '1',
}).toString(),
);
cy.location('pathname').should('eq', '/');
});
});
it('should close password popup if form has errors', () => {
cy.login({ accounts: ['default'] }).then(({ accounts: [account] }) => {
cy.server();
cy.route({
method: 'POST',
url: `/api/v1/accounts/${account.id}/password`,
response: {
success: false,
errors: {
password: 'force popup to be shown',
},
},
}).as('password');
cy.visit('/');
openSectionByName('Password');
cy.location('pathname').should('eq', '/profile/change-password');
cy.get('[name=newPassword]').type(account.password);
// make a mistake to hide confirm popup in future
cy.get('[name=newRePassword]').type(`${account.password}lol`);
cy.get('[name=logoutAll]').should('be.checked');
cy.get('[type=submit]').click();
// disable response mocks
cy.route({
method: 'POST',
url: `/api/v1/accounts/${account.id}/password`,
}).as('password');
confirmWithPassword(account.password);
cy.getByTestId('password-request-form').should('not.be.visible');
cy.contains('The passwords does not match').should('be.visible');
});
});
});