68 lines
2.4 KiB
TypeScript
68 lines
2.4 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
const cosmosMock = {
|
|
initializeAllContainers: vi.fn(),
|
|
registerContainers: vi.fn(),
|
|
};
|
|
|
|
vi.mock('@bytelyst/cosmos', () => cosmosMock);
|
|
|
|
describe('initCosmosIfNeeded', () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
vi.unstubAllEnvs();
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.resetModules();
|
|
});
|
|
|
|
it('registers containers and skips init in production by default', async () => {
|
|
vi.stubEnv('COSMOS_ENDPOINT', 'https://example.documents.azure.com:443/');
|
|
vi.stubEnv('COSMOS_KEY', 'key');
|
|
vi.stubEnv('JWT_SECRET', 'secret');
|
|
vi.stubEnv('NODE_ENV', 'production');
|
|
vi.stubEnv('COSMOS_AUTO_INIT', 'false');
|
|
|
|
const { initCosmosIfNeeded } = await import('./cosmos-init.js');
|
|
await initCosmosIfNeeded();
|
|
|
|
expect(cosmosMock.registerContainers).toHaveBeenCalledOnce();
|
|
expect(cosmosMock.initializeAllContainers).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('initializes containers outside production and logs success', async () => {
|
|
vi.stubEnv('COSMOS_ENDPOINT', 'https://example.documents.azure.com:443/');
|
|
vi.stubEnv('COSMOS_KEY', 'key');
|
|
vi.stubEnv('JWT_SECRET', 'secret');
|
|
vi.stubEnv('NODE_ENV', 'test');
|
|
|
|
cosmosMock.initializeAllContainers.mockResolvedValue(undefined);
|
|
const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
|
|
const { initCosmosIfNeeded } = await import('./cosmos-init.js');
|
|
await initCosmosIfNeeded();
|
|
|
|
expect(cosmosMock.registerContainers).toHaveBeenCalledOnce();
|
|
expect(cosmosMock.initializeAllContainers).toHaveBeenCalledOnce();
|
|
expect(writeSpy).toHaveBeenCalledWith('[platform-service] Cosmos containers ensured\n');
|
|
});
|
|
|
|
it('logs warning when initialization fails', async () => {
|
|
vi.stubEnv('COSMOS_ENDPOINT', 'https://example.documents.azure.com:443/');
|
|
vi.stubEnv('COSMOS_KEY', 'key');
|
|
vi.stubEnv('JWT_SECRET', 'secret');
|
|
vi.stubEnv('NODE_ENV', 'test');
|
|
|
|
cosmosMock.initializeAllContainers.mockRejectedValue(new Error('boom'));
|
|
const writeSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
|
|
|
|
const { initCosmosIfNeeded } = await import('./cosmos-init.js');
|
|
await initCosmosIfNeeded();
|
|
|
|
expect(cosmosMock.registerContainers).toHaveBeenCalledOnce();
|
|
expect(cosmosMock.initializeAllContainers).toHaveBeenCalledOnce();
|
|
expect(writeSpy).toHaveBeenCalledWith('[platform-service] Cosmos init failed: boom\n');
|
|
});
|
|
});
|