github-actions
Deploy e9638c4ddc3ed29a18779b38f43922aa3139b311
611bfd9
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import { apiClient, clearAdminApiKey, getAdminApiKey, setAdminApiKey } from './client';
describe('api client admin key handling', () => {
const fetchMock = vi.fn();
beforeEach(() => {
clearAdminApiKey();
fetchMock.mockReset();
fetchMock.mockResolvedValue({
ok: true,
json: async () => ({ ok: true }),
});
vi.stubGlobal('fetch', fetchMock);
});
afterEach(() => {
clearAdminApiKey();
vi.unstubAllGlobals();
});
it('attaches the in-memory admin key to admin requests only', async () => {
setAdminApiKey(' test-admin-key ');
await apiClient.post('/admin/review-queue');
expect(getAdminApiKey()).toBe('test-admin-key');
expect(fetchMock).toHaveBeenCalledTimes(1);
const [url, init] = fetchMock.mock.calls[0];
expect(url).toContain('/api/pots-shutdown/admin/review-queue');
expect(init?.headers).toMatchObject({
'Content-Type': 'application/json',
'X-Admin-Key': 'test-admin-key',
});
});
it('does not attach the admin key to public requests', async () => {
setAdminApiKey('test-admin-key');
await apiClient.get('/search');
expect(fetchMock).toHaveBeenCalledTimes(1);
const [, init] = fetchMock.mock.calls[0];
expect(init?.headers).toMatchObject({
'Content-Type': 'application/json',
});
expect(init?.headers).not.toHaveProperty('X-Admin-Key');
});
});