@accounter/server
Version:
Accounter GraphQL server
62 lines • 2.53 kB
JavaScript
import { beforeEach, describe, expect, it, vi } from 'vitest';
import { AdminContextProvider } from '../providers/admin-context.provider.js';
describe('AdminContextProvider', () => {
let provider;
let dbProvider;
let context;
beforeEach(() => {
dbProvider = {
pool: {
query: vi.fn(),
},
healthCheck: vi.fn(),
query: vi.fn(),
};
context = {
currentUser: { userId: 'test-owner-id' },
};
// Inject mocks: context (for ownerId) and dbProvider
provider = new AdminContextProvider(context, dbProvider);
});
it('should fetch admin context for the current user', async () => {
dbProvider.query.mockResolvedValue({
rows: [{ owner_id: 'test-owner-id', default_local_currency: 'USD' }],
rowCount: 1,
});
const result = await provider.getAdminContext();
expect(result).toBeDefined();
expect(result?.default_local_currency).toBe('USD');
expect(dbProvider.query).toHaveBeenCalled();
});
it('should cache the result', async () => {
dbProvider.query.mockResolvedValue({
rows: [{ owner_id: 'test-owner-id' }],
rowCount: 1,
});
await provider.getAdminContext();
await provider.getAdminContext();
expect(dbProvider.query).toHaveBeenCalledTimes(1);
});
it('should invalidate cache on update', async () => {
dbProvider.query.mockResolvedValueOnce({
rows: [{ owner_id: 'test-owner-id', default_local_currency: 'USD' }],
rowCount: 1,
}); // get
await provider.getAdminContext();
expect(dbProvider.query).toHaveBeenCalledTimes(1);
dbProvider.query.mockResolvedValueOnce({
rows: [{ owner_id: 'test-owner-id', default_local_currency: 'EUR' }],
rowCount: 1
}); // update
await provider.updateAdminContext({ defaultLocalCurrency: 'EUR' });
expect(dbProvider.query).toHaveBeenCalledTimes(2); // +1 for update
dbProvider.query.mockResolvedValueOnce({
rows: [{ owner_id: 'test-owner-id', default_local_currency: 'EUR' }],
rowCount: 1
}); // get again
const result = await provider.getAdminContext();
expect(result?.default_local_currency).toBe('EUR');
expect(dbProvider.query).toHaveBeenCalledTimes(3); // +1 for refetch
});
});
//# sourceMappingURL=admin-context.provider.test.js.map