import selectors from '../../helpers/selectors.js';
import createNightmare from '../../helpers/nightmare';

describe('Claim detail', () => {
    const nightmare = createNightmare();

    beforeAll(() => {
        nightmare
            .loginAndModule('salesPerson', 'claim')
            .accessToSearchResult('4')
            .accessToSection('claim.card.detail');
    });

    it('should add the first claimable item from ticket to the claim', async() => {
        const result = await nightmare
            .waitToClick(selectors.claimDetail.addItemButton)
            .waitToClick(selectors.claimDetail.firstClaimableSaleFromTicket)
            .waitForLastSnackbar();

        expect(result).toEqual('Data saved!');
    });

    it('should confirm the claim contains now two items', async() => {
        const result = await nightmare
            .countElement(selectors.claimDetail.claimDetailLine);

        expect(result).toEqual(2);
    });

    it('should edit de second item claimed quantity', async() => {
        const result = await nightmare
            .clearInput(selectors.claimDetail.secondItemQuantityInput)
            .write(selectors.claimDetail.secondItemQuantityInput, 10)
            .write('body', '\u000d') // simulates enter
            .waitForLastSnackbar();

        expect(result).toEqual('Data saved!');
    });

    it('should confirm the second item, and the claimed total were correctly edited', async() => {
        const claimedQuantity = await nightmare
            .waitToGetProperty(selectors.claimDetail.secondItemQuantityInput, 'value');

        const totalClaimed = await nightmare
            .waitToGetProperty(selectors.claimDetail.totalClaimed, 'innerText');

        expect(claimedQuantity).toEqual('10');
        expect(totalClaimed).toContain('99.30');
    });

    it('should delete the second item from the claim', async() => {
        const result = await nightmare
            .waitToClick(selectors.claimDetail.secondItemDeleteButton)
            .waitForLastSnackbar();

        expect(result).toEqual('Data saved!');
    });

    it('should confirm the claim contains now one item', async() => {
        const result = await nightmare
            .countElement(selectors.claimDetail.claimDetailLine);

        expect(result).toEqual(1);
    });

    it('should login as salesAssistant to be redirected to the next claim section', async() => {
        const result = await nightmare
            .loginAndModule('salesAssistant', 'claim')
            .accessToSearchResult('2')
            .accessToSection('claim.card.detail')
            .waitToClick(selectors.claimDetail.addItemButton)
            .waitToClick(selectors.claimDetail.firstClaimableSaleFromTicket)
            .waitForLastSnackbar();

        expect(result).toEqual('Data saved!');
    });

    it(`should have been redirected to the next section in claims`, async() => {
        const url = await nightmare
            .waitForURL('/development')
            .parsedUrl();

        expect(url.hash).toContain('development');
    });
});