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

describe('Item index path', () => {
    let browser;
    let page;
    beforeAll(async() => {
        browser = await getBrowser();
        page = browser.page;
        await page.loginAndModule('salesPerson', 'item');
        await page.waitToClick(selectors.globalItems.searchButton);
    });

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

    it('should click on the fields to show button to open the list of columns to show', async() => {
        await page.waitToClick(selectors.itemsIndex.shownColumns);
        const visible = await page.isVisible(selectors.itemsIndex.shownColumnsList);

        expect(visible).toBeTruthy();
    });

    it('should unmark all checkboxes except the first and the last ones', async() => {
        await page.waitToClick(selectors.itemsIndex.idCheckbox);
        await page.waitToClick(selectors.itemsIndex.stemsCheckbox);
        await page.waitToClick(selectors.itemsIndex.sizeCheckbox);
        await page.waitToClick(selectors.itemsIndex.typeCheckbox);
        await page.waitToClick(selectors.itemsIndex.categoryCheckbox);
        await page.waitToClick(selectors.itemsIndex.intrastadCheckbox);
        await page.waitToClick(selectors.itemsIndex.originCheckbox);
        await page.waitToClick(selectors.itemsIndex.buyerCheckbox);
        await page.waitToClick(selectors.itemsIndex.weightByPieceCheckbox);
        await page.waitToClick(selectors.itemsIndex.saveFieldsButton);
        const message = await page.waitForSnackbar();

        expect(message.text).toContain('Data saved!');
    });

    it('should navigate forth and back to see the images column is still visible', async() => {
        await page.closePopup();
        await page.waitToClick(selectors.itemsIndex.firstSearchResult);
        await page.waitToClick(selectors.itemDescriptor.goBackToModuleIndexButton);
        await page.waitToClick(selectors.globalItems.searchButton);
        await page.waitForSelector(selectors.itemsIndex.searchResult);
        await page.waitImgLoad(selectors.itemsIndex.firstItemImage);
        const imageVisible = await page.isVisible(selectors.itemsIndex.firstItemImageTd);

        expect(imageVisible).toBeTruthy();
    });

    it('should check the ids column is not visible', async() => {
        await page.waitForSelector(selectors.itemsIndex.firstItemId, {hidden: true});
    });

    it('should mark all unchecked boxes to leave the index as it was', async() => {
        await page.waitToClick(selectors.itemsIndex.shownColumns);
        await page.waitToClick(selectors.itemsIndex.idCheckbox);
        await page.waitToClick(selectors.itemsIndex.stemsCheckbox);
        await page.waitToClick(selectors.itemsIndex.sizeCheckbox);
        await page.waitToClick(selectors.itemsIndex.typeCheckbox);
        await page.waitToClick(selectors.itemsIndex.categoryCheckbox);
        await page.waitToClick(selectors.itemsIndex.intrastadCheckbox);
        await page.waitToClick(selectors.itemsIndex.originCheckbox);
        await page.waitToClick(selectors.itemsIndex.buyerCheckbox);
        await page.waitToClick(selectors.itemsIndex.weightByPieceCheckbox);
        await page.waitToClick(selectors.itemsIndex.saveFieldsButton);
        const message = await page.waitForSnackbar();

        expect(message.text).toContain('Data saved!');
    });

    it('should now navigate forth and back to see the ids column is now visible', async() => {
        await page.closePopup();
        await page.waitToClick(selectors.itemsIndex.firstSearchResult);
        await page.waitToClick(selectors.itemDescriptor.goBackToModuleIndexButton);
        await page.waitToClick(selectors.globalItems.searchButton);
        await page.waitForSelector(selectors.itemsIndex.searchResult);
        const idVisible = await page.isVisible(selectors.itemsIndex.firstItemId);

        expect(idVisible).toBeTruthy();
    });
});