From 97d522ef59f7b383cd71643f425dcc64041b90fd Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Fri, 6 Mar 2026 23:32:58 +0100 Subject: [PATCH] refactor(tests): named cosPhi constants, accurate mock call types, remove cast workarounds --- tests/helpers/TestLifecycleHelpers.ts | 19 +++++++++++++------ tests/utils/ElectricUtils.test.ts | 18 ++++++++++-------- tests/utils/ErrorUtils.test.ts | 3 +-- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/tests/helpers/TestLifecycleHelpers.ts b/tests/helpers/TestLifecycleHelpers.ts index c2a6fcbe..0721a629 100644 --- a/tests/helpers/TestLifecycleHelpers.ts +++ b/tests/helpers/TestLifecycleHelpers.ts @@ -35,17 +35,17 @@ import { MockIdTagsCache, MockSharedLRUCache } from '../charging-station/mocks/M * Result type for console mocks */ export interface ConsoleMockResult { - errorMock: { mock: { calls: unknown[][] } } - infoMock: { mock: { calls: unknown[][] } } - warnMock: { mock: { calls: unknown[][] } } + errorMock: { mock: { calls: MockCall[] } } + infoMock: { mock: { calls: MockCall[] } } + warnMock: { mock: { calls: MockCall[] } } } /** * Result type for logger mocks */ export interface LoggerMockResult { - errorMock: { mock: { calls: unknown[][] } } - warnMock: { mock: { calls: unknown[][] } } + errorMock: { mock: { calls: MockCall[] } } + warnMock: { mock: { calls: MockCall[] } } } /** @@ -63,12 +63,19 @@ export interface TimerHelperOptions { apis?: MockableTimerAPI[] } +/** + * Single mock function call record matching Node.js test runner runtime shape + */ +interface MockCall { + arguments: unknown[] +} + /** * Mock context type for Node.js test module */ interface MockContext { mock: { - method: (object: object, methodName: string) => { mock: { calls: unknown[][] } } + method: (object: object, methodName: string) => { mock: { calls: MockCall[] } } } } diff --git a/tests/utils/ElectricUtils.test.ts b/tests/utils/ElectricUtils.test.ts index 3be19c3a..99786162 100644 --- a/tests/utils/ElectricUtils.test.ts +++ b/tests/utils/ElectricUtils.test.ts @@ -8,6 +8,10 @@ import { afterEach, describe, it } from 'node:test' import { ACElectricUtils, DCElectricUtils } from '../../src/utils/ElectricUtils.js' import { standardCleanup } from '../helpers/TestLifecycleHelpers.js' +const COS_PHI_RESIDENTIAL = 0.85 +const COS_PHI_POOR = 0.9 +const COS_PHI_INDUSTRIAL = 0.95 + await describe('ElectricUtils', async () => { afterEach(() => { standardCleanup() @@ -47,7 +51,7 @@ await describe('ElectricUtils', async () => { expect(ACElectricUtils.amperagePerPhaseFromPower(-1, 690, 230)).toBe(0) }) await it('should round AC power per phase with non-unity cosPhi', () => { - expect(ACElectricUtils.powerPerPhase(230, 10, 0.85)).toBe(1955) + expect(ACElectricUtils.powerPerPhase(230, 10, COS_PHI_RESIDENTIAL)).toBe(1955) }) await it('should round DC amperage when power is not evenly divisible by voltage', () => { expect(DCElectricUtils.amperage(100, 3)).toBe(33) @@ -86,12 +90,10 @@ await describe('ElectricUtils', async () => { }) await it('should handle industrial cosPhi values for AC calculations', () => { - // cosPhi = 0.95 (typical industrial) - expect(ACElectricUtils.powerPerPhase(230, 32, 0.95)).toBe(6992) - expect(ACElectricUtils.powerTotal(3, 230, 32, 0.95)).toBe(20976) - expect(ACElectricUtils.amperageTotalFromPower(6992, 230, 0.95)).toBe(32) - // cosPhi = 0.9 - expect(ACElectricUtils.powerPerPhase(230, 32, 0.9)).toBe(6624) - expect(ACElectricUtils.amperageTotalFromPower(6624, 230, 0.9)).toBe(32) + expect(ACElectricUtils.powerPerPhase(230, 32, COS_PHI_INDUSTRIAL)).toBe(6992) + expect(ACElectricUtils.powerTotal(3, 230, 32, COS_PHI_INDUSTRIAL)).toBe(20976) + expect(ACElectricUtils.amperageTotalFromPower(6992, 230, COS_PHI_INDUSTRIAL)).toBe(32) + expect(ACElectricUtils.powerPerPhase(230, 32, COS_PHI_POOR)).toBe(6624) + expect(ACElectricUtils.amperageTotalFromPower(6624, 230, COS_PHI_POOR)).toBe(32) }) }) diff --git a/tests/utils/ErrorUtils.test.ts b/tests/utils/ErrorUtils.test.ts index 83228f59..fc27f004 100644 --- a/tests/utils/ErrorUtils.test.ts +++ b/tests/utils/ErrorUtils.test.ts @@ -114,8 +114,7 @@ await describe('ErrorUtils', async () => { } expect(warnMock.mock.calls.length).toBe(errorCodes.length) for (let i = 0; i < errorCodes.length; i++) { - const call = warnMock.mock.calls[i] as unknown as { arguments: unknown[] } - const logMessage = String(call.arguments[0]).toLowerCase() + const logMessage = String(warnMock.mock.calls[i].arguments[0]).toLowerCase() expect(logMessage.includes(errorCodes[i].expectedSubstring)).toBe(true) } }) -- 2.53.0