mirror of
https://github.com/langgenius/dify.git
synced 2026-07-21 18:58:35 +08:00
53 lines
2.0 KiB
TypeScript
53 lines
2.0 KiB
TypeScript
import type { DifyWorld } from '../../support/world'
|
|
import { Given, When } from '@cucumber/cucumber'
|
|
import { expect } from '@playwright/test'
|
|
|
|
const consoleAccessTokenCookieName = /^(?:__Host-)?access_token$/
|
|
const consoleRefreshTokenCookieName = /^(?:__Host-)?refresh_token$/
|
|
|
|
Given('my console session requires token refresh', async function (this: DifyWorld) {
|
|
if (!this.context)
|
|
throw new Error('Playwright browser context has not been initialized for this scenario.')
|
|
|
|
const cookies = await this.context.cookies()
|
|
const hasAccessToken = cookies.some((cookie) => consoleAccessTokenCookieName.test(cookie.name))
|
|
const hasRefreshToken = cookies.some((cookie) => consoleRefreshTokenCookieName.test(cookie.name))
|
|
|
|
expect(
|
|
hasAccessToken,
|
|
'Expected the authenticated E2E session to include a console access token.',
|
|
).toBe(true)
|
|
expect(
|
|
hasRefreshToken,
|
|
'Expected the authenticated E2E session to include a console refresh token.',
|
|
).toBe(true)
|
|
|
|
await this.context.clearCookies({ name: consoleAccessTokenCookieName })
|
|
|
|
const remainingCookies = await this.context.cookies()
|
|
expect(
|
|
remainingCookies.some((cookie) => consoleAccessTokenCookieName.test(cookie.name)),
|
|
'Expected the console access token to be removed before opening the default console entry.',
|
|
).toBe(false)
|
|
expect(
|
|
remainingCookies.some((cookie) => consoleRefreshTokenCookieName.test(cookie.name)),
|
|
'Expected the console refresh token to remain available for server-side refresh.',
|
|
).toBe(true)
|
|
})
|
|
|
|
When(
|
|
'I open the default console entry after the access token expires',
|
|
async function (this: DifyWorld) {
|
|
const page = this.getPage()
|
|
const refreshRequestPromise = page.waitForRequest((request) => {
|
|
const url = new URL(request.url())
|
|
return url.pathname.endsWith('/auth/refresh') && url.searchParams.get('redirect_url') === '/'
|
|
})
|
|
|
|
await page.goto('/')
|
|
|
|
const refreshRequest = await refreshRequestPromise
|
|
this.attach(`Session refresh request: ${refreshRequest.url()}`, 'text/plain')
|
|
},
|
|
)
|