/* eslint-disable no-undef */
// playwright.config.js
// @ts-check

// eslint-disable-next-line no-unused-vars
const { devices } = require('@playwright/test');

/** @type {import('@playwright/test').PlaywrightTestConfig} */
const config = {
    retries: 0,
    testDir: 'tests',
    testIgnore: '**/*.perf.spec.js',
    timeout: 30 * 1000,
    webServer: {
        command: 'npm run start:coverage',
        url: 'http://localhost:8080/#',
        timeout: 120 * 1000,
        reuseExistingServer: true
    },
    workers: 1,
    use: {
        browserName: "chromium",
        baseURL: 'http://localhost:8080/',
        headless: false,
        ignoreHTTPSErrors: true,
        screenshot: 'only-on-failure',
        trace: 'retain-on-failure',
        video: 'off'
    },
    projects: [
        {
            name: 'chrome',
            use: {
                browserName: 'chromium'
            }
        },
        {
            name: 'MMOC',
            testMatch: '**/*.e2e.spec.js', // only run e2e tests
            grepInvert: /@snapshot/,
            use: {
                browserName: 'chromium',
                viewport: {
                    width: 2560,
                    height: 1440
                }
            }
        },
        {
            name: 'safari',
            testMatch: '**/*.e2e.spec.js', // only run e2e tests
            grep: /@ipad/, // only run ipad tests due to this bug https://github.com/microsoft/playwright/issues/8340
            grepInvert: /@snapshot/,
            use: {
                browserName: 'webkit'
            }
        },
        {
            name: 'firefox',
            testMatch: '**/*.e2e.spec.js', // only run e2e tests
            grepInvert: /@snapshot/,
            use: {
                browserName: 'firefox'
            }
        },
        {
            name: 'canary',
            testMatch: '**/*.e2e.spec.js', // only run e2e tests
            grepInvert: /@snapshot/,
            use: {
                browserName: 'chromium',
                channel: 'chrome-canary' //Note this is not available in ubuntu/CircleCI
            }
        },
        {
            name: 'chrome-beta',
            testMatch: '**/*.e2e.spec.js', // only run e2e tests
            grepInvert: /@snapshot/,
            use: {
                browserName: 'chromium',
                channel: 'chrome-beta'
            }
        },
        {
            name: 'ipad',
            testMatch: '**/*.e2e.spec.js', // only run e2e tests
            grep: /@ipad/,
            grepInvert: /@snapshot/,
            use: {
                browserName: 'webkit',
                ...devices['iPad (gen 7) landscape'] // Complete List https://github.com/microsoft/playwright/blob/main/packages/playwright-core/src/server/deviceDescriptorsSource.json
            }
        }
    ],
    reporter: [
        ['list'],
        ['html', {
            open: 'on-failure',
            outputFolder: '../html-test-results' //Must be in different location due to https://github.com/microsoft/playwright/issues/12840
        }]
    ]
};

module.exports = config;