apps/chat-e2e/src/core/baseFixtures.ts (172 lines of code) (raw):

import { BaseAssertion } from '@/src/assertions'; import { LocalStorageManager } from '@/src/core/localStorageManager'; import { AuthProvider } from '@/src/testData'; import { Auth0Login } from '@/src/ui/actions/auth0Login'; import { AzureADLogin } from '@/src/ui/actions/azureADLogin'; import { KeycloakLogin } from '@/src/ui/actions/keycloakLogin'; import { ProviderLogin } from '@/src/ui/actions/providerLogin'; import { KeycloakPage, LoginPage } from '@/src/ui/pages'; import { Auth0Page } from '@/src/ui/pages/auth0Page'; import { AzureADPage } from '@/src/ui/pages/azureADPage'; import { Page, test as base } from '@playwright/test'; import { allure } from 'allure-playwright'; import * as process from 'node:process'; export const skipReason = 'Execute test on CI env only'; export const noSimpleModelSkipReason = 'Skip the test if no simple model is configured'; export const noImportModelsSkipReason = 'Skip the test if imported models are not configured'; interface ReportAttributes { setTestIds: (...testId: string[]) => void; setIssueIds: (...issueIds: string[]) => void; } const test = base.extend< ReportAttributes & { loginPage: LoginPage; auth0Page: Auth0Page; azureADPage: AzureADPage; keycloakPage: KeycloakPage; localStorageManager: LocalStorageManager; auth0Login: ProviderLogin<Auth0Page>; azureADLogin: ProviderLogin<AzureADPage>; keycloakLogin: ProviderLogin<KeycloakPage>; // eslint-disable-next-line @typescript-eslint/no-explicit-any providerLogin: ProviderLogin<any>; incognitoPage: Page; incognitoLoginPage: LoginPage; incognitoAuth0Page: Auth0Page; incognitoLocalStorageManager: LocalStorageManager; incognitoAuth0Login: ProviderLogin<Auth0Page>; baseAssertion: BaseAssertion; // eslint-disable-next-line @typescript-eslint/no-explicit-any incognitoProviderLogin: ProviderLogin<any>; } >({ // eslint-disable-next-line no-empty-pattern setTestIds: async ({}, use) => { const callback = (...testIds: string[]) => { for (const testId of testIds) { allure.tms(testId, `${process.env.TMS_URL}/${testId}`); } }; await use(callback); }, // eslint-disable-next-line no-empty-pattern setIssueIds: async ({}, use) => { const callback = (...issueIds: string[]) => { for (const issueId of issueIds) { allure.issue(issueId, `${process.env.ISSUE_URL}/${issueId}`); test.skip(); } }; await use(callback); }, // eslint-disable-next-line no-empty-pattern baseAssertion: async ({}, use) => { const baseAssertion = new BaseAssertion(); await use(baseAssertion); }, loginPage: async ({ page }, use) => { const loginPage = new LoginPage(page); await use(loginPage); }, auth0Page: async ({ page }, use) => { const auth0Page = new Auth0Page(page); await use(auth0Page); }, azureADPage: async ({ page }, use) => { const azureADPage = new AzureADPage(page); await use(azureADPage); }, keycloakPage: async ({ page }, use) => { const keycloakPage = new KeycloakPage(page); await use(keycloakPage); }, auth0Login: async ({ loginPage, auth0Page, localStorageManager }, use) => { const auth0Login = new Auth0Login( loginPage, auth0Page, localStorageManager, ); await use(auth0Login); }, azureADLogin: async ( { loginPage, azureADPage, localStorageManager }, use, ) => { const azureADLogin = new AzureADLogin( loginPage, azureADPage, localStorageManager, ); await use(azureADLogin); }, keycloakLogin: async ( { loginPage, keycloakPage, localStorageManager }, use, ) => { const keycloakLogin = new KeycloakLogin( loginPage, keycloakPage, localStorageManager, ); await use(keycloakLogin); }, providerLogin: async ({ auth0Login, azureADLogin, keycloakLogin }, use) => { let providerLogin; //AUTH_PROVIDER env var to define authentication provider //auth0 provider is used if AUTH_PROVIDER is undefined switch (process.env.AUTH_PROVIDER) { case AuthProvider.auth0: providerLogin = auth0Login; break; case AuthProvider.azureAD: providerLogin = azureADLogin; break; case AuthProvider.keycloak: providerLogin = keycloakLogin; break; //implement login action for other providers default: providerLogin = auth0Login; } await use(providerLogin); }, localStorageManager: async ({ page }, use) => { const localStorageManager = new LocalStorageManager(page); await use(localStorageManager); }, incognitoPage: async ({ browser }, use) => { const context = await browser.newContext({ storageState: undefined }); const incognitoPage = await context.newPage(); await use(incognitoPage); await context.close(); }, incognitoLoginPage: async ({ incognitoPage }, use) => { const incognitoLoginPage = new LoginPage(incognitoPage); await use(incognitoLoginPage); }, incognitoAuth0Page: async ({ incognitoPage }, use) => { const incognitoAuth0Page = new Auth0Page(incognitoPage); await use(incognitoAuth0Page); }, incognitoLocalStorageManager: async ({ incognitoPage }, use) => { const incognitoLocalStorageManager = new LocalStorageManager(incognitoPage); await use(incognitoLocalStorageManager); }, incognitoAuth0Login: async ( { incognitoLoginPage, incognitoAuth0Page, incognitoLocalStorageManager }, use, ) => { const incognitoAuth0Login = new Auth0Login( incognitoLoginPage, incognitoAuth0Page, incognitoLocalStorageManager, ); await use(incognitoAuth0Login); }, incognitoProviderLogin: async ({ incognitoAuth0Login }, use) => { let incognitoProviderLogin; switch (process.env.AUTH_PROVIDER) { case AuthProvider.auth0: incognitoProviderLogin = incognitoAuth0Login; break; //implement login action for other providers default: incognitoProviderLogin = incognitoAuth0Login; } await use(incognitoProviderLogin); }, }); export default test;