41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest';
|
|
|
|
import { resolveNavigationUserInfo } from './navigation-user-info';
|
|
|
|
describe('navigation user info', () => {
|
|
it('uses cached user info without issuing a request', async () => {
|
|
const cachedUserInfo = { id: 1 };
|
|
const fetchUserInfo = vi.fn();
|
|
|
|
await expect(
|
|
resolveNavigationUserInfo({
|
|
cachedUserInfo,
|
|
fetchUserInfo,
|
|
getAccessToken: () => 'token',
|
|
}),
|
|
).resolves.toBe(cachedUserInfo);
|
|
expect(fetchUserInfo).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('returns null after an expired token has been cleared', async () => {
|
|
await expect(
|
|
resolveNavigationUserInfo({
|
|
cachedUserInfo: null,
|
|
fetchUserInfo: () => Promise.reject(new Error('expired')),
|
|
getAccessToken: () => null,
|
|
}),
|
|
).resolves.toBeNull();
|
|
});
|
|
|
|
it('keeps non-authentication failures visible', async () => {
|
|
const error = new Error('network unavailable');
|
|
await expect(
|
|
resolveNavigationUserInfo({
|
|
cachedUserInfo: null,
|
|
fetchUserInfo: () => Promise.reject(error),
|
|
getAccessToken: () => 'token',
|
|
}),
|
|
).rejects.toBe(error);
|
|
});
|
|
});
|