mirror of
https://github.com/navidrome/navidrome.git
synced 2026-11-14 22:28:41 +01:00
47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
|
|
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'
|
||
|
|
import config from './config'
|
||
|
|
import authProvider from './authProvider'
|
||
|
|
|
||
|
|
vi.mock('./config', () => ({ default: {} }))
|
||
|
|
|
||
|
|
describe('authProvider.logout', () => {
|
||
|
|
const logoutURL = 'https://auth.example.com/signout'
|
||
|
|
|
||
|
|
beforeEach(() => {
|
||
|
|
vi.stubGlobal('location', { href: '' })
|
||
|
|
localStorage.setItem('is-authenticated', 'true')
|
||
|
|
localStorage.setItem('token', 'abc')
|
||
|
|
})
|
||
|
|
|
||
|
|
afterEach(() => {
|
||
|
|
vi.unstubAllGlobals()
|
||
|
|
localStorage.clear()
|
||
|
|
delete config.extAuthLogoutURL
|
||
|
|
delete config.auth
|
||
|
|
})
|
||
|
|
|
||
|
|
it('clears the stored session', async () => {
|
||
|
|
await authProvider.logout()
|
||
|
|
expect(localStorage.getItem('is-authenticated')).toBeNull()
|
||
|
|
expect(localStorage.getItem('token')).toBeNull()
|
||
|
|
})
|
||
|
|
|
||
|
|
it('does not redirect when no logout URL is configured', async () => {
|
||
|
|
config.auth = { id: '1' }
|
||
|
|
await expect(authProvider.logout()).resolves.toBeUndefined()
|
||
|
|
expect(window.location.href).toBe('')
|
||
|
|
})
|
||
|
|
|
||
|
|
it('redirects to the logout URL when the page was authenticated by the proxy', async () => {
|
||
|
|
config.extAuthLogoutURL = logoutURL
|
||
|
|
config.auth = { id: '1' }
|
||
|
|
await expect(authProvider.logout()).resolves.toBe(false)
|
||
|
|
expect(window.location.href).toBe(logoutURL)
|
||
|
|
})
|
||
|
|
|
||
|
|
it('does not redirect when the page was not authenticated by the proxy', async () => {
|
||
|
|
config.extAuthLogoutURL = logoutURL
|
||
|
|
await expect(authProvider.logout()).resolves.toBeUndefined()
|
||
|
|
expect(window.location.href).toBe('')
|
||
|
|
})
|
||
|
|
})
|