mirror of
https://github.com/langgenius/dify.git
synced 2026-04-20 15:00:35 -04:00
86 lines
2.4 KiB
TypeScript
86 lines
2.4 KiB
TypeScript
import type { IWorldOptions } from '@cucumber/cucumber'
|
|
import type { Browser, BrowserContext, ConsoleMessage, Download, Page } from '@playwright/test'
|
|
import type { AuthSessionMetadata } from '../../fixtures/auth'
|
|
import { setWorldConstructor, World } from '@cucumber/cucumber'
|
|
import { authStatePath, readAuthSessionMetadata } from '../../fixtures/auth'
|
|
import { baseURL, defaultLocale } from '../../test-env'
|
|
|
|
export class DifyWorld extends World {
|
|
context: BrowserContext | undefined
|
|
page: Page | undefined
|
|
consoleErrors: string[] = []
|
|
pageErrors: string[] = []
|
|
scenarioStartedAt: number | undefined
|
|
session: AuthSessionMetadata | undefined
|
|
lastCreatedAppName: string | undefined
|
|
createdAppIds: string[] = []
|
|
capturedDownloads: Download[] = []
|
|
|
|
constructor(options: IWorldOptions) {
|
|
super(options)
|
|
this.resetScenarioState()
|
|
}
|
|
|
|
resetScenarioState() {
|
|
this.consoleErrors = []
|
|
this.pageErrors = []
|
|
this.lastCreatedAppName = undefined
|
|
this.createdAppIds = []
|
|
this.capturedDownloads = []
|
|
}
|
|
|
|
async startSession(browser: Browser, authenticated: boolean) {
|
|
this.resetScenarioState()
|
|
this.context = await browser.newContext({
|
|
baseURL,
|
|
locale: defaultLocale,
|
|
...(authenticated ? { storageState: authStatePath } : {}),
|
|
})
|
|
this.context.setDefaultTimeout(30_000)
|
|
this.page = await this.context.newPage()
|
|
this.page.setDefaultTimeout(30_000)
|
|
|
|
this.page.on('console', (message: ConsoleMessage) => {
|
|
if (message.type() === 'error')
|
|
this.consoleErrors.push(message.text())
|
|
})
|
|
this.page.on('pageerror', (error) => {
|
|
this.pageErrors.push(error.message)
|
|
})
|
|
this.page.on('download', (dl) => {
|
|
this.capturedDownloads.push(dl)
|
|
})
|
|
}
|
|
|
|
async startAuthenticatedSession(browser: Browser) {
|
|
await this.startSession(browser, true)
|
|
}
|
|
|
|
async startUnauthenticatedSession(browser: Browser) {
|
|
await this.startSession(browser, false)
|
|
}
|
|
|
|
getPage() {
|
|
if (!this.page)
|
|
throw new Error('Playwright page has not been initialized for this scenario.')
|
|
|
|
return this.page
|
|
}
|
|
|
|
async getAuthSession() {
|
|
this.session ??= await readAuthSessionMetadata()
|
|
return this.session
|
|
}
|
|
|
|
async closeSession() {
|
|
await this.context?.close()
|
|
this.context = undefined
|
|
this.page = undefined
|
|
this.session = undefined
|
|
this.scenarioStartedAt = undefined
|
|
this.resetScenarioState()
|
|
}
|
|
}
|
|
|
|
setWorldConstructor(DifyWorld)
|