96 lines
2.8 KiB
TypeScript
96 lines
2.8 KiB
TypeScript
|
import { expect, tap } from '@push.rocks/tapbundle';
|
||
|
import { DestinationLocal } from '../ts_destination_local/index.js';
|
||
|
import * as smartlogInterfaces from '../ts_interfaces/index.js';
|
||
|
|
||
|
let testDestination: DestinationLocal;
|
||
|
|
||
|
// Mock log package
|
||
|
const createMockLogPackage = (level: smartlogInterfaces.TLogLevel, message: string): smartlogInterfaces.ILogPackage => {
|
||
|
return {
|
||
|
timestamp: Date.now(),
|
||
|
type: 'log',
|
||
|
level,
|
||
|
message,
|
||
|
context: {
|
||
|
environment: 'test',
|
||
|
runtime: 'node'
|
||
|
},
|
||
|
correlation: {
|
||
|
id: '123',
|
||
|
type: 'none'
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
// Tests
|
||
|
tap.test('should create a local destination instance', async () => {
|
||
|
testDestination = new DestinationLocal();
|
||
|
expect(testDestination).toBeTruthy();
|
||
|
});
|
||
|
|
||
|
tap.test('should handle logs with different levels', async () => {
|
||
|
// Testing with a spy would be ideal, but since we don't have a mocking framework,
|
||
|
// we'll just verify the method runs without errors for different log levels
|
||
|
|
||
|
// Test info level
|
||
|
const logPackageInfo = createMockLogPackage('info', 'Info message');
|
||
|
await testDestination.handleLog(logPackageInfo);
|
||
|
|
||
|
// Test error level
|
||
|
const logPackageError = createMockLogPackage('error', 'Error message');
|
||
|
await testDestination.handleLog(logPackageError);
|
||
|
|
||
|
// Test warn level
|
||
|
const logPackageWarn = createMockLogPackage('warn', 'Warning message');
|
||
|
await testDestination.handleLog(logPackageWarn);
|
||
|
|
||
|
// Test silly level
|
||
|
const logPackageSilly = createMockLogPackage('silly', 'Silly message');
|
||
|
await testDestination.handleLog(logPackageSilly);
|
||
|
});
|
||
|
|
||
|
tap.test('should handle reduced logging', async () => {
|
||
|
testDestination = new DestinationLocal();
|
||
|
|
||
|
// Note: In a real test environment with a mocking framework,
|
||
|
// we would capture console output and verify it's only written
|
||
|
// according to the expected behavior. Here we just ensure
|
||
|
// the methods execute without errors.
|
||
|
|
||
|
// First call with message
|
||
|
testDestination.logReduced('Test message');
|
||
|
|
||
|
// Same message immediately after
|
||
|
testDestination.logReduced('Test message');
|
||
|
|
||
|
// Different message
|
||
|
testDestination.logReduced('Different message');
|
||
|
});
|
||
|
|
||
|
tap.test('should handle repeated logging with repeatEveryTimesArg', async () => {
|
||
|
testDestination = new DestinationLocal();
|
||
|
|
||
|
// First call with message
|
||
|
testDestination.logReduced('Repeated with count', 3);
|
||
|
|
||
|
// Second call
|
||
|
testDestination.logReduced('Repeated with count', 3);
|
||
|
|
||
|
// Third call
|
||
|
testDestination.logReduced('Repeated with count', 3);
|
||
|
|
||
|
// Fourth call (3rd repetition)
|
||
|
testDestination.logReduced('Repeated with count', 3);
|
||
|
});
|
||
|
|
||
|
tap.test('should create new line(s)', async () => {
|
||
|
testDestination = new DestinationLocal();
|
||
|
|
||
|
// Default 1 line
|
||
|
testDestination.newLine();
|
||
|
|
||
|
// Multiple lines
|
||
|
testDestination.newLine(3);
|
||
|
});
|
||
|
|
||
|
export default tap.start();
|