/* * SPDX-FileCopyrightText: 2020 Stalwart Labs LLC * * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL */ import { describe, it, expect, afterEach, vi } from 'vitest'; const originalHead = document.head.innerHTML; async function loadWithMeta(meta: string) { document.head.innerHTML = meta; vi.resetModules(); const { getOAuthClientId } = await import('./oauthClientId'); return getOAuthClientId; } afterEach(() => { document.head.innerHTML = originalHead; vi.resetModules(); }); describe('getOAuthClientId', () => { it('prefers the client id injected by the server', async () => { const getOAuthClientId = await loadWithMeta(''); expect(getOAuthClientId()).toBe('pocket-id-client'); }); it('trims surrounding whitespace from the injected client id', async () => { const getOAuthClientId = await loadWithMeta(''); expect(getOAuthClientId()).toBe('pocket-id-client'); }); it('falls back to the built-in default when the placeholder is empty', async () => { const getOAuthClientId = await loadWithMeta(''); expect(getOAuthClientId()).toBe('stalwart-webui'); }); it('falls back to the built-in default when the placeholder is only whitespace', async () => { const getOAuthClientId = await loadWithMeta(''); expect(getOAuthClientId()).toBe('stalwart-webui'); }); it('falls back to the built-in default when the placeholder is absent', async () => { const getOAuthClientId = await loadWithMeta(''); expect(getOAuthClientId()).toBe('stalwart-webui'); }); it('is inbuxa-admin when hosted apart from the server', async () => { const getOAuthClientId = await loadWithMeta( '', ); expect(getOAuthClientId()).toBe('inbuxa-admin'); }); it('still prefers an injected client id when hosted apart from the server', async () => { const getOAuthClientId = await loadWithMeta( '', ); expect(getOAuthClientId()).toBe('custom'); }); it('reads the document only once', async () => { const getOAuthClientId = await loadWithMeta(''); expect(getOAuthClientId()).toBe('pocket-id-client'); document.head.innerHTML = ''; expect(getOAuthClientId()).toBe('pocket-id-client'); }); });