import { defineConfig, devices } from '@playwright/test'; import path, { dirname } from 'path'; import { PluginOptions } from '@grafana/plugin-e2e'; const testDirRoot = 'e2e/plugin-e2e/plugin-e2e-api-tests/'; export default defineConfig({ fullyParallel: true, /* Retry on CI only */ retries: process.env.CI ? 2 : 0, /* Opt out of parallel tests on CI. */ workers: process.env.CI ? 1 : undefined, reporter: 'html', use: { baseURL: `http://${process.env.HOST || 'localhost'}:${process.env.PORT || 3000}`, trace: 'on-first-retry', httpCredentials: { username: 'admin', password: 'admin', }, provisioningRootDir: path.join(process.cwd(), process.env.PROV_DIR ?? 'conf/provisioning'), }, projects: [ // Login to Grafana with admin user and store the cookie on disk for use in other tests { name: 'authenticate', testDir: `${dirname(require.resolve('@grafana/plugin-e2e'))}/auth`, testMatch: [/.*\.js/], }, // Login to Grafana with new user with viewer role and store the cookie on disk for use in other tests { name: 'createUserAndAuthenticate', testDir: `${dirname(require.resolve('@grafana/plugin-e2e'))}/auth`, testMatch: [/.*\.js/], use: { user: { user: 'viewer', password: 'password', role: 'Viewer', }, }, }, // Run all tests in parallel using user with admin role { name: 'admin', testDir: path.join(testDirRoot, '/as-admin-user'), use: { ...devices['Desktop Chrome'], storageState: 'playwright/.auth/admin.json', }, dependencies: ['authenticate'], }, // Run all tests in parallel using user with viewer role { name: 'viewer', testDir: path.join(testDirRoot, '/as-viewer-user'), use: { ...devices['Desktop Chrome'], storageState: 'playwright/.auth/viewer.json', }, dependencies: ['createUserAndAuthenticate'], }, ], });