Files
privacy.sexy/tests/unit/shared/Stubs/LoggerStub.ts
undergroundwires a721e82a4f Bump TypeScript to 5.3 with verbatimModuleSyntax
This commit upgrades TypeScript to the latest version 5.3 and introduces
`verbatimModuleSyntax` in line with the official Vue guide
recommendatinos (vuejs/docs#2592).

By enforcing `import type` for type-only imports, this commit improves
code clarity and supports tooling optimization, ensuring imports are
only bundled when necessary for runtime.

Changes:

- Bump TypeScript to 5.3.3 across the project.
- Adjust import statements to utilize `import type` where applicable,
  promoting cleaner and more efficient code.
2024-02-27 04:20:22 +01:00

58 lines
1.7 KiB
TypeScript

import type { Logger } from '@/application/Common/Log/Logger';
import { type FunctionKeys, isString } from '@/TypeHelpers';
import { formatAssertionMessage } from '@tests/shared/FormatAssertionMessage';
import { StubWithObservableMethodCalls } from './StubWithObservableMethodCalls';
export class LoggerStub extends StubWithObservableMethodCalls<Logger> implements Logger {
public warn(...params: unknown[]): void {
this.registerMethodCall({
methodName: 'warn',
args: params,
});
}
public error(...params: unknown[]): void {
this.registerMethodCall({
methodName: 'error',
args: params,
});
}
public debug(...params: unknown[]): void {
this.registerMethodCall({
methodName: 'debug',
args: params,
});
}
public info(...params: unknown[]): void {
this.registerMethodCall({
methodName: 'info',
args: params,
});
}
public assertLogsContainMessagePart(
methodName: FunctionKeys<Logger>,
expectedLogMessagePart: string,
) {
const loggedMessages = this.getLoggedMessages(methodName);
expect(
loggedMessages.some((m) => m.includes(expectedLogMessagePart)),
formatAssertionMessage([
`Log function: ${methodName}`,
`Expected log message part: ${expectedLogMessagePart}`,
'Actual log messages:',
loggedMessages.join('\n- '),
]),
);
}
private getLoggedMessages(methodName: FunctionKeys<Logger>): string[] {
const calls = this.callHistory.filter((m) => m.methodName === methodName);
const loggedItems = calls.flatMap((call) => call.args);
const stringLogs = loggedItems.filter((message): message is string => isString(message));
return stringLogs;
}
}