import getBrowser from '../../helpers/puppeteer';

const $ = {
    form: 'vn-out-layout form'
};

describe('ChangePassword path', async() => {
    let browser;
    let page;
    beforeAll(async() => {
        browser = await getBrowser();
        page = browser.page;
    });

    afterAll(async() => {
        await browser.close();
    });

    const badPassword = 'badpass';
    const oldPassword = 'nightmare';
    const newPassword = 'newPass.1234';
    describe('Bad login', async() => {
        it('should receive an error when the password is expired', async() => {
            // Expired login
            await page.doLogin('Maintenance', oldPassword);
            let message = await page.waitForSnackbar();

            expect(message.text).toContain('The password has expired, change it from Salix');
            expect(await page.getState()).toContain('change-password');

            // Bad attempt: incorrect current password
            message = await page.sendForm($.form, {
                oldPassword: newPassword,
                newPassword: oldPassword,
                repeatPassword: oldPassword
            });

            expect(message.text).toContain('Invalid current password');

            // Bad attempt: password not meet requirements
            message = await page.sendForm($.form, {
                oldPassword: oldPassword,
                newPassword: badPassword,
                repeatPassword: badPassword
            });

            expect(message.text).toContain('Password does not meet requirements');

            // Bad attempt: same password
            message = await page.sendForm($.form, {
                oldPassword: oldPassword,
                newPassword: oldPassword,
                repeatPassword: oldPassword
            });

            expect(message.text).toContain('You can not use the same password');

            // Correct attempt: change password
            message = await page.sendForm($.form, {
                oldPassword: oldPassword,
                newPassword: newPassword,
                repeatPassword: newPassword
            });

            expect(message.text).toContain('Password updated!');
            expect(await page.getState()).toContain('login');

            // Bad login, old password
            await page.doLogin('Maintenance', oldPassword);
            message = await page.waitForSnackbar();

            expect(message.text).toContain('Invalid login');

            // Correct login, new password
            await page.doLogin('Maintenance', newPassword);
            await page.waitForSelector('vn-home');

            expect(await page.getState()).toBe('home');
        });
    });
});