Cloudflare Workers + Hono + D1 + KV + R2 stack with 4 specialized AI agents (onboarding, troubleshoot, asset, billing), OpenAI function calling with 7 tool definitions, human escalation, pending action approval workflow, feedback collection, audit logging, i18n (ko/en), and Workers AI fallback. 43 source files, 45 tests passing. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
52 lines
1.7 KiB
TypeScript
52 lines
1.7 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { createLogger, Logger, maskUserId } from '../../src/utils/logger';
|
|
|
|
describe('Logger', () => {
|
|
it('createLogger returns a Logger instance', () => {
|
|
const logger = createLogger('test-service');
|
|
expect(logger).toBeInstanceOf(Logger);
|
|
});
|
|
|
|
it('info() does not throw', () => {
|
|
const logger = createLogger('test-service');
|
|
expect(() => logger.info('test message')).not.toThrow();
|
|
expect(() => logger.info('with context', { key: 'value' })).not.toThrow();
|
|
});
|
|
|
|
it('warn() does not throw', () => {
|
|
const logger = createLogger('test-service');
|
|
expect(() => logger.warn('warning message')).not.toThrow();
|
|
expect(() => logger.warn('with context', { count: 42 })).not.toThrow();
|
|
});
|
|
|
|
it('error() does not throw', () => {
|
|
const logger = createLogger('test-service');
|
|
expect(() => logger.error('error message')).not.toThrow();
|
|
expect(() => logger.error('with error', new Error('boom'))).not.toThrow();
|
|
expect(() => logger.error('full', new Error('boom'), { extra: true })).not.toThrow();
|
|
});
|
|
});
|
|
|
|
describe('maskUserId', () => {
|
|
it('masks a normal user ID correctly', () => {
|
|
expect(maskUserId('821596605')).toBe('8215****');
|
|
});
|
|
|
|
it('masks a short ID (<=4 chars) as all asterisks', () => {
|
|
expect(maskUserId('1234')).toBe('****');
|
|
expect(maskUserId('abc')).toBe('****');
|
|
});
|
|
|
|
it('returns "unknown" for undefined', () => {
|
|
expect(maskUserId(undefined)).toBe('unknown');
|
|
});
|
|
|
|
it('returns "unknown" for empty string', () => {
|
|
expect(maskUserId('')).toBe('unknown');
|
|
});
|
|
|
|
it('handles numeric input', () => {
|
|
expect(maskUserId(821596605)).toBe('8215****');
|
|
});
|
|
});
|