File: D:/HostingSpaces/SBogers10/ste.komma.pro/tests/Cypress/integration/kms/login_and_reset_spec.js
/// <reference types="Cypress" />
import faker from 'faker'
describe('KMS Login and password reset', function() {
it('Shows email and password required errors', function() {
cy.clearCookies();
cy.visit('/kms');
cy.get('input[type=submit]').click();
cy.contains('e-mailadres is verplicht.').should('exist');
cy.contains('wachtwoord is verplicht.').should('exist');
});
it('Shows wrong account error', function() {
cy.clearCookies();
cy.visit('/kms');
cy.get('input[name=email]').type('doesnotexist@example.org');
cy.get('input[name=password]').type('heyhowareyou');
cy.get('input[type=submit]').click();
cy.contains('Het opgeven e-mailadres en/of wachtwoord komen niet overeen, Probeer nogmaals?');
});
it('Can be logged in to', () => {
cy.clearCookies();
cy.visit('/kms');
cy.getCsrfToken((csrfToken) => {
cy.request({
method: 'GET',
url: 'testapi/v1/kms_users/create',
headers: {'X-CSRF-TOKEN': csrfToken},
body: {'attributes': {'password': 'Test123'}}
}).then(function (response) {
let user = response.body.data;
cy.get('input[name=email]').type(user.email);
cy.get('input[name=password]').type('Test123');
cy.get('input[type=submit]').click();
cy.contains('Welkom');
cy.getCsrfToken((csrfToken) => {
cy.request({
method: 'DELETE',
url: 'testapi/v1/kms_users/' + user.id,
headers: {'X-CSRF-TOKEN': csrfToken},
body: {}
});
});
});
});
});
it('Should be able to reset the password', () => {
cy.clearCookies();
cy.visit('/kms');
cy.getCsrfToken((csrfToken) => {
cy.request({
method: 'GET',
url: 'testapi/v1/kms_users/create',
headers: {'X-CSRF-TOKEN': csrfToken},
body: {'attributes': {'password': 'Test123' }}
}).then(function(response) {
let user = response.body.data;
cy.log('Telling laravel that it should intercept the next mails');
cy.request('testapi/v1/mail_intercept/enable').then((response) => {
cy.log('Requesting a password reset');
cy.get('[data-test="reset_password"]').click();
cy.get('input[name="email"]').type(user.email);
cy.get('[data-test="send_email"]').click();
cy.contains('We hebben een e-mail verstuurd').should('exist');
cy.log('Getting the latest sent mails from laravel');
cy.request('testapi/v1/mail_intercept/get').then((response) => {
let mails = response.body;
//Get the mails for the user only
let mailsForUser = mails.filter(function(mail) {
for (let mailAddress in mail.to) if(mailAddress === user.email) return true;
return false;
});
let passwordResetMail = mailsForUser[0];
//Validate the mail
cy.log('Validating the email');
expect(passwordResetMail.subject).to.contain('Je wachtwoord instellen');
expect(passwordResetMail).to.have.property('data');
expect(passwordResetMail.data).to.have.property('resetPasswordUrl');
//Construct the reset url and visit it.
cy.log('Heading to the password reset page');
cy.visit(passwordResetMail.data.resetPasswordUrl).then(() => {
let newPassword = faker.internet.password();
cy.get('[data-test="email"]').type(user.email);
cy.get('[data-test="password"]').type(newPassword);
cy.get('[data-test="password_confirmation"]').type(newPassword);
cy.get('[data-test="reset_password"]').click();
cy.contains('Your password has been changed. You can log in with your new password.').should('exist');
cy.log('Trying to login!');
cy.get('input[name=email]').type(user.email);
cy.get('input[name=password]').type(newPassword);
cy.get('input[type=submit]').click();
cy.get('[data-test="log-out"]').should('exist');
});
cy.getCsrfToken((csrfToken) => {
cy.request({
method: 'DELETE',
url: 'testapi/v1/kms_users/' + user.id,
headers: {'X-CSRF-TOKEN': csrfToken},
body: {}
});
});
});
});
});
});
})
});