mirror of
https://github.com/langgenius/dify.git
synced 2026-09-05 08:48:10 +08:00
Co-authored-by: zhangx1n <zhangxin@dify.ai> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
108 lines
3.7 KiB
TypeScript
108 lines
3.7 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vite-plus/test'
|
|
const getPublicMock = vi.hoisted(() => vi.fn())
|
|
|
|
vi.mock('./base', () => ({
|
|
getPublic: getPublicMock,
|
|
postPublic: vi.fn(),
|
|
}))
|
|
|
|
const {
|
|
beginWebAppAuthorizationRecovery,
|
|
completeWebAppAuthorizationRecovery,
|
|
getOrCreateWebAppSessionId,
|
|
getWebAppPassport,
|
|
setWebAppPassport,
|
|
webAppLoginStatus,
|
|
} = await import('./webapp-auth')
|
|
|
|
describe('webAppLoginStatus', () => {
|
|
beforeEach(() => {
|
|
getPublicMock.mockReset()
|
|
getPublicMock.mockResolvedValue({ logged_in: true, app_logged_in: true })
|
|
localStorage.clear()
|
|
sessionStorage.clear()
|
|
})
|
|
|
|
it('keeps environment and ordinary passports for the same code separate', () => {
|
|
const environment = { kind: 'environment' as const, code: 'workflow-app' }
|
|
const ordinary = { kind: 'default' as const, code: 'workflow-app' }
|
|
|
|
setWebAppPassport(environment, 'environment-passport')
|
|
setWebAppPassport(ordinary, 'ordinary-passport')
|
|
|
|
expect(getWebAppPassport(environment)).toBe('environment-passport')
|
|
expect(getWebAppPassport(ordinary)).toBe('ordinary-passport')
|
|
})
|
|
|
|
it('keeps the ordinary webapp passport storage key unchanged', () => {
|
|
const address = { kind: 'default' as const, code: 'workflow-app' }
|
|
|
|
setWebAppPassport(address, 'passport')
|
|
|
|
expect(localStorage.getItem('passport-workflow-app')).toBe('passport')
|
|
})
|
|
|
|
it('keeps a stable user id for each environment', () => {
|
|
const firstEnvironment = { kind: 'environment' as const, code: 'environment-1' }
|
|
const secondEnvironment = { kind: 'environment' as const, code: 'environment-2' }
|
|
|
|
const first = getOrCreateWebAppSessionId(firstEnvironment)
|
|
|
|
expect(first).toMatch(/^[0-9a-f-]{36}$/i)
|
|
expect(getOrCreateWebAppSessionId(firstEnvironment)).toBe(first)
|
|
expect(getOrCreateWebAppSessionId(secondEnvironment)).not.toBe(first)
|
|
expect(localStorage.getItem('session_id-environment:environment-1')).toBe(first)
|
|
})
|
|
|
|
it('allows one authorization recovery until an environment request succeeds', () => {
|
|
const address = { kind: 'environment' as const, code: 'environment-1' }
|
|
|
|
expect(beginWebAppAuthorizationRecovery(address)).toBe(true)
|
|
expect(beginWebAppAuthorizationRecovery(address)).toBe(false)
|
|
|
|
setWebAppPassport(address, 'renewed-passport')
|
|
|
|
expect(beginWebAppAuthorizationRecovery(address)).toBe(false)
|
|
|
|
completeWebAppAuthorizationRecovery(address)
|
|
|
|
expect(beginWebAppAuthorizationRecovery(address)).toBe(true)
|
|
})
|
|
|
|
it('does not add an app code query to environment login status', async () => {
|
|
window.history.replaceState({}, '', '/environment/workflow/workflow-app')
|
|
|
|
await webAppLoginStatus('workflow-app', 'user-1')
|
|
|
|
expect(getPublicMock).toHaveBeenCalledWith('/login/status?user_id=user-1')
|
|
})
|
|
|
|
it('uses the authoritative environment login state', async () => {
|
|
window.history.replaceState({}, '', '/environment/workflow/workflow-app')
|
|
getPublicMock.mockResolvedValue({ logged_in: false, app_logged_in: false })
|
|
|
|
await expect(webAppLoginStatus('workflow-app')).resolves.toEqual({
|
|
userLoggedIn: false,
|
|
appLoggedIn: false,
|
|
})
|
|
})
|
|
|
|
it('trusts the remote login state for an sso verified environment', async () => {
|
|
window.history.replaceState({}, '', '/environment/workflow/workflow-app')
|
|
getPublicMock.mockResolvedValue({ logged_in: true, app_logged_in: false })
|
|
|
|
await expect(webAppLoginStatus('workflow-app')).resolves.toEqual({
|
|
userLoggedIn: true,
|
|
appLoggedIn: false,
|
|
})
|
|
})
|
|
|
|
it('keeps the app code for ordinary webapps', async () => {
|
|
window.history.replaceState({}, '', '/workflow/workflow-app')
|
|
|
|
await webAppLoginStatus('workflow-app')
|
|
|
|
expect(getPublicMock).toHaveBeenCalledWith('/login/status?app_code=workflow-app')
|
|
})
|
|
})
|