From 1ffd9d12b5694ba74d8c820da9fdfc1e78d098a2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Sun, 1 Mar 2026 23:19:09 +0100 Subject: [PATCH] refactor(test): harmonize mockStation naming across all test files --- ...gRequestService-InstallCertificate.test.ts | 30 +- ...mingRequestService-RemoteStartAuth.test.ts | 26 +- ...estService-RequestStartTransaction.test.ts | 39 +- ...uestService-RequestStopTransaction.test.ts | 75 ++-- ...ncomingRequestService-SetVariables.test.ts | 126 +++--- ...CPP20ServiceUtils-TransactionEvent.test.ts | 369 +++++++++--------- .../ocpp/auth/OCPPAuthIntegration.test.ts | 16 +- .../auth/adapters/OCPP16AuthAdapter.test.ts | 14 +- .../auth/adapters/OCPP20AuthAdapter.test.ts | 8 +- .../CertificateAuthStrategy.test.ts | 6 +- 10 files changed, 333 insertions(+), 376 deletions(-) diff --git a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-InstallCertificate.test.ts b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-InstallCertificate.test.ts index 3a2e6ce2..50c6da9b 100644 --- a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-InstallCertificate.test.ts +++ b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-InstallCertificate.test.ts @@ -57,7 +57,7 @@ await describe('I03 - InstallCertificate', async () => { standardCleanup() }) - let mockChargingStation: ChargingStation + let mockStation: ChargingStation let stationWithCertManager: ChargingStationWithCertificateManager let incomingRequestService: OCPP20IncomingRequestService let testableService: ReturnType @@ -74,12 +74,12 @@ await describe('I03 - InstallCertificate', async () => { }, websocketPingInterval: Constants.DEFAULT_WEBSOCKET_PING_INTERVAL, }) - mockChargingStation = initialStation - mockChargingStation = initialStation + mockStation = initialStation + mockStation = initialStation // Use factory function to create station with certificate manager stationWithCertManager = createStationWithCertificateManager( - mockChargingStation, + mockStation, createMockCertificateManager() ) @@ -99,7 +99,7 @@ await describe('I03 - InstallCertificate', async () => { } const response: OCPP20InstallCertificateResponse = - await testableService.handleRequestInstallCertificate(mockChargingStation, request) + await testableService.handleRequestInstallCertificate(mockStation, request) expect(response).toBeDefined() expect(typeof response).toBe('object') @@ -120,7 +120,7 @@ await describe('I03 - InstallCertificate', async () => { } const response: OCPP20InstallCertificateResponse = - await testableService.handleRequestInstallCertificate(mockChargingStation, request) + await testableService.handleRequestInstallCertificate(mockStation, request) expect(response).toBeDefined() expect(response.status).toBe(InstallCertificateStatusEnumType.Accepted) @@ -138,7 +138,7 @@ await describe('I03 - InstallCertificate', async () => { } const response: OCPP20InstallCertificateResponse = - await testableService.handleRequestInstallCertificate(mockChargingStation, request) + await testableService.handleRequestInstallCertificate(mockStation, request) expect(response).toBeDefined() expect(response.status).toBe(InstallCertificateStatusEnumType.Accepted) @@ -156,7 +156,7 @@ await describe('I03 - InstallCertificate', async () => { } const response: OCPP20InstallCertificateResponse = - await testableService.handleRequestInstallCertificate(mockChargingStation, request) + await testableService.handleRequestInstallCertificate(mockStation, request) expect(response).toBeDefined() expect(response.status).toBe(InstallCertificateStatusEnumType.Accepted) @@ -172,7 +172,7 @@ await describe('I03 - InstallCertificate', async () => { } const response: OCPP20InstallCertificateResponse = - await testableService.handleRequestInstallCertificate(mockChargingStation, request) + await testableService.handleRequestInstallCertificate(mockStation, request) expect(response).toBeDefined() expect(response.status).toBe(InstallCertificateStatusEnumType.Rejected) @@ -185,7 +185,7 @@ await describe('I03 - InstallCertificate', async () => { stationWithCertManager.certificateManager = createMockCertificateManager({ storeCertificateResult: false, }) - mockChargingStation.stationInfo.validateCertificateExpiry = true + mockStation.stationInfo.validateCertificateExpiry = true const request: OCPP20InstallCertificateRequest = { certificate: EXPIRED_PEM_CERTIFICATE, @@ -193,14 +193,14 @@ await describe('I03 - InstallCertificate', async () => { } const response: OCPP20InstallCertificateResponse = - await testableService.handleRequestInstallCertificate(mockChargingStation, request) + await testableService.handleRequestInstallCertificate(mockStation, request) expect(response).toBeDefined() expect(response.status).toBe(InstallCertificateStatusEnumType.Rejected) expect(response.statusInfo).toBeDefined() expect(response.statusInfo?.reasonCode).toBeDefined() - delete mockChargingStation.stationInfo.validateCertificateExpiry + delete mockStation.stationInfo.validateCertificateExpiry }) }) @@ -216,7 +216,7 @@ await describe('I03 - InstallCertificate', async () => { } const response: OCPP20InstallCertificateResponse = - await testableService.handleRequestInstallCertificate(mockChargingStation, request) + await testableService.handleRequestInstallCertificate(mockStation, request) expect(response).toBeDefined() expect(response.status).toBe(InstallCertificateStatusEnumType.Failed) @@ -237,7 +237,7 @@ await describe('I03 - InstallCertificate', async () => { } const response: OCPP20InstallCertificateResponse = - await testableService.handleRequestInstallCertificate(mockChargingStation, request) + await testableService.handleRequestInstallCertificate(mockStation, request) expect(response).toBeDefined() expect(typeof response).toBe('object') @@ -270,7 +270,7 @@ await describe('I03 - InstallCertificate', async () => { } const response: OCPP20InstallCertificateResponse = - await testableService.handleRequestInstallCertificate(mockChargingStation, request) + await testableService.handleRequestInstallCertificate(mockStation, request) expect(response.status).toBe(InstallCertificateStatusEnumType.Rejected) expect(response.statusInfo).toBeDefined() diff --git a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-RemoteStartAuth.test.ts b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-RemoteStartAuth.test.ts index cc0420b3..f8c4ba4b 100644 --- a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-RemoteStartAuth.test.ts +++ b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-RemoteStartAuth.test.ts @@ -27,11 +27,11 @@ import { standardCleanup } from '../../../../tests/helpers/TestLifecycleHelpers. await describe('G03 - Remote Start Pre-Authorization', async () => { let service: OCPP20IncomingRequestService | undefined - let mockChargingStation: ChargingStation | undefined + let mockStation: ChargingStation | undefined beforeEach(() => { // Mock charging station with EVSE configuration - mockChargingStation = { + mockStation = { evses: new Map([ [ 1, @@ -62,7 +62,7 @@ await describe('G03 - Remote Start Pre-Authorization', async () => { afterEach(() => { standardCleanup() - mockChargingStation = undefined + mockStation = undefined service = undefined }) @@ -143,7 +143,7 @@ await describe('G03 - Remote Start Pre-Authorization', async () => { await it('should not modify connector status before authorization', () => { // Given: Connector in initial state // Then: Connector status should remain unchanged before processing - const connectorStatus = mockChargingStation.getConnectorStatus(1) + const connectorStatus = mockStation.getConnectorStatus(1) expect(connectorStatus?.transactionStarted).toBe(false) expect(connectorStatus?.status).toBe(ConnectorStatusEnum.Available) }) @@ -234,7 +234,7 @@ await describe('G03 - Remote Start Pre-Authorization', async () => { await describe('G03.FR.03.005 - Remote start on occupied connector', async () => { await it('should detect existing transaction on connector', () => { // Given: Connector with active transaction - mockChargingStation.getConnectorStatus = (): ConnectorStatus => ({ + mockStation.getConnectorStatus = (): ConnectorStatus => ({ availability: OperationalStatusEnumType.Operative, MeterValues: [], status: ConnectorStatusEnum.Occupied, @@ -245,7 +245,7 @@ await describe('G03 - Remote Start Pre-Authorization', async () => { }) // Then: Connector should have active transaction - const connectorStatus = mockChargingStation.getConnectorStatus(1) + const connectorStatus = mockStation.getConnectorStatus(1) expect(connectorStatus?.transactionStarted).toBe(true) expect(connectorStatus?.status).toBe(ConnectorStatusEnum.Occupied) expect(connectorStatus?.transactionId).toBe('existing-tx-123') @@ -256,7 +256,7 @@ await describe('G03 - Remote Start Pre-Authorization', async () => { // Given: Existing transaction details const existingTransactionId = 'existing-tx-456' const existingTokenTag = 'EXISTING_TOKEN_002' - mockChargingStation.getConnectorStatus = (): ConnectorStatus => ({ + mockStation.getConnectorStatus = (): ConnectorStatus => ({ availability: OperationalStatusEnumType.Operative, MeterValues: [], status: ConnectorStatusEnum.Occupied, @@ -267,7 +267,7 @@ await describe('G03 - Remote Start Pre-Authorization', async () => { }) // Then: Existing transaction should be preserved - const connectorStatus = mockChargingStation.getConnectorStatus(1) + const connectorStatus = mockStation.getConnectorStatus(1) expect(connectorStatus?.transactionId).toBe(existingTransactionId) expect(connectorStatus?.transactionIdTag).toBe(existingTokenTag) }) @@ -354,7 +354,7 @@ await describe('G03 - Remote Start Pre-Authorization', async () => { await it('should support OCPP 2.0.1 version', () => { // Given: Station with OCPP 2.0.1 - expect(mockChargingStation.stationInfo?.ocppVersion).toBe(OCPPVersion.VERSION_201) + expect(mockStation.stationInfo?.ocppVersion).toBe(OCPPVersion.VERSION_201) }) await it('should support idToken with additional info', () => { @@ -406,10 +406,10 @@ await describe('G03 - Remote Start Pre-Authorization', async () => { await it('should have valid charging station configuration', () => { // Then: Charging station should have required configuration - expect(mockChargingStation).toBeDefined() - expect(mockChargingStation.evses).toBeDefined() - expect(mockChargingStation.evses.size).toBeGreaterThan(0) - expect(mockChargingStation.stationInfo?.ocppVersion).toBe(OCPPVersion.VERSION_201) + expect(mockStation).toBeDefined() + expect(mockStation.evses).toBeDefined() + expect(mockStation.evses.size).toBeGreaterThan(0) + expect(mockStation.stationInfo?.ocppVersion).toBe(OCPPVersion.VERSION_201) }) }) }) diff --git a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-RequestStartTransaction.test.ts b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-RequestStartTransaction.test.ts index 85db043b..2631febb 100644 --- a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-RequestStartTransaction.test.ts +++ b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-RequestStartTransaction.test.ts @@ -33,7 +33,7 @@ import { } from './OCPP20TestUtils.js' await describe('F01 & F02 - Remote Start Transaction', async () => { - let mockChargingStation: ChargingStation + let mockStation: ChargingStation let incomingRequestService: OCPP20IncomingRequestService let testableService: ReturnType beforeEach(() => { @@ -51,14 +51,14 @@ await describe('F01 & F02 - Remote Start Transaction', async () => { }, websocketPingInterval: Constants.DEFAULT_WEBSOCKET_PING_INTERVAL, }) - mockChargingStation = station + mockStation = station incomingRequestService = new OCPP20IncomingRequestService() testableService = createTestableIncomingRequestService(incomingRequestService) - const stationId = mockChargingStation.stationInfo?.chargingStationId ?? 'unknown' + const stationId = mockStation.stationInfo?.chargingStationId ?? 'unknown' OCPPAuthServiceFactory.setInstanceForTesting(stationId, createMockAuthService()) - resetConnectorTransactionState(mockChargingStation) - resetLimits(mockChargingStation) - resetReportingValueSize(mockChargingStation) + resetConnectorTransactionState(mockStation) + resetLimits(mockStation) + resetReportingValueSize(mockStation) }) afterEach(() => { @@ -77,10 +77,7 @@ await describe('F01 & F02 - Remote Start Transaction', async () => { remoteStartId: 1, } - const response = await testableService.handleRequestStartTransaction( - mockChargingStation, - validRequest - ) + const response = await testableService.handleRequestStartTransaction(mockStation, validRequest) expect(response).toBeDefined() expect(response.status).toBe(RequestStartStopStatusEnumType.Accepted) @@ -152,7 +149,7 @@ await describe('F01 & F02 - Remote Start Transaction', async () => { } const response = await testableService.handleRequestStartTransaction( - mockChargingStation, + mockStation, requestWithGroupToken ) @@ -194,7 +191,7 @@ await describe('F01 & F02 - Remote Start Transaction', async () => { } const response = await testableService.handleRequestStartTransaction( - mockChargingStation, + mockStation, requestWithValidProfile ) @@ -236,7 +233,7 @@ await describe('F01 & F02 - Remote Start Transaction', async () => { } const response = await testableService.handleRequestStartTransaction( - mockChargingStation, + mockStation, requestWithInvalidProfile ) @@ -278,7 +275,7 @@ await describe('F01 & F02 - Remote Start Transaction', async () => { } const response = await testableService.handleRequestStartTransaction( - mockChargingStation, + mockStation, requestWithTransactionIdProfile ) @@ -299,7 +296,7 @@ await describe('F01 & F02 - Remote Start Transaction', async () => { // Should throw OCPPError for invalid evseId await expect( - testableService.handleRequestStartTransaction(mockChargingStation, invalidEvseRequest) + testableService.handleRequestStartTransaction(mockStation, invalidEvseRequest) ).rejects.toThrow('EVSE 999 does not exist on charging station') }) @@ -315,7 +312,7 @@ await describe('F01 & F02 - Remote Start Transaction', async () => { remoteStartId: 100, } - await testableService.handleRequestStartTransaction(mockChargingStation, firstRequest) + await testableService.handleRequestStartTransaction(mockStation, firstRequest) // Now try to start another transaction on the same EVSE const secondRequest: OCPP20RequestStartTransactionRequest = { @@ -327,10 +324,7 @@ await describe('F01 & F02 - Remote Start Transaction', async () => { remoteStartId: 101, } - const response = await testableService.handleRequestStartTransaction( - mockChargingStation, - secondRequest - ) + const response = await testableService.handleRequestStartTransaction(mockStation, secondRequest) expect(response).toBeDefined() expect(response.status).toBe(RequestStartStopStatusEnumType.Rejected) @@ -348,10 +342,7 @@ await describe('F01 & F02 - Remote Start Transaction', async () => { remoteStartId: 200, } - const response = await testableService.handleRequestStartTransaction( - mockChargingStation, - validRequest - ) + const response = await testableService.handleRequestStartTransaction(mockStation, validRequest) // Verify response structure expect(response).toBeDefined() diff --git a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-RequestStopTransaction.test.ts b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-RequestStopTransaction.test.ts index 331f0cf4..2cf6be03 100644 --- a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-RequestStopTransaction.test.ts +++ b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-RequestStopTransaction.test.ts @@ -41,7 +41,7 @@ import { await describe('F03 - Remote Stop Transaction', async () => { let sentTransactionEvents: OCPP20TransactionEventRequest[] = [] - let mockChargingStation: ChargingStation + let mockStation: ChargingStation let incomingRequestService: OCPP20IncomingRequestService let testableService: ReturnType @@ -71,13 +71,13 @@ await describe('F03 - Remote Stop Transaction', async () => { }, websocketPingInterval: Constants.DEFAULT_WEBSOCKET_PING_INTERVAL, }) - mockChargingStation = station + mockStation = station incomingRequestService = new OCPP20IncomingRequestService() testableService = createTestableIncomingRequestService(incomingRequestService) - const stationId = mockChargingStation.stationInfo?.chargingStationId ?? 'unknown' + const stationId = mockStation.stationInfo?.chargingStationId ?? 'unknown' OCPPAuthServiceFactory.setInstanceForTesting(stationId, createMockAuthService()) - resetLimits(mockChargingStation) - resetReportingValueSize(mockChargingStation) + resetLimits(mockStation) + resetReportingValueSize(mockStation) }) afterEach(() => { @@ -99,7 +99,7 @@ await describe('F03 - Remote Stop Transaction', async () => { ): Promise { // Reset all connector states first to ensure clean state (unless skipped for multiple transactions) if (!skipReset) { - resetConnectorTransactionState(mockChargingStation) + resetConnectorTransactionState(mockStation) } const startRequest: OCPP20RequestStartTransactionRequest = { @@ -112,7 +112,7 @@ await describe('F03 - Remote Stop Transaction', async () => { } const startResponse = await testableService.handleRequestStartTransaction( - mockChargingStation, + mockStation, startRequest ) @@ -135,10 +135,7 @@ await describe('F03 - Remote Stop Transaction', async () => { } // Execute stop transaction - const response = await testableService.handleRequestStopTransaction( - mockChargingStation, - stopRequest - ) + const response = await testableService.handleRequestStopTransaction(mockStation, stopRequest) // Verify response expect(response).toBeDefined() @@ -158,7 +155,7 @@ await describe('F03 - Remote Stop Transaction', async () => { // FR: F03.FR.02, F03.FR.03 await it('should handle multiple active transactions correctly', async () => { // Reset once before starting multiple transactions - resetConnectorTransactionState(mockChargingStation) + resetConnectorTransactionState(mockStation) // Start transactions on different EVSEs (skip reset for subsequent transactions) const transactionId1 = await startTransaction(1, 200, true) // Skip reset since we just did it @@ -173,10 +170,7 @@ await describe('F03 - Remote Stop Transaction', async () => { transactionId: transactionId2 as UUIDv4, } - const response = await testableService.handleRequestStopTransaction( - mockChargingStation, - stopRequest - ) + const response = await testableService.handleRequestStopTransaction(mockStation, stopRequest) // Verify response expect(response).toBeDefined() @@ -190,8 +184,8 @@ await describe('F03 - Remote Stop Transaction', async () => { expect(transactionEvent.evse?.id).toBe(2) // Verify other transactions are still active (test implementation dependent) - expect(mockChargingStation.getConnectorIdByTransactionId(transactionId1)).toBe(1) - expect(mockChargingStation.getConnectorIdByTransactionId(transactionId3)).toBe(3) + expect(mockStation.getConnectorIdByTransactionId(transactionId1)).toBe(1) + expect(mockStation.getConnectorIdByTransactionId(transactionId3)).toBe(3) }) // FR: F03.FR.08 @@ -204,10 +198,7 @@ await describe('F03 - Remote Stop Transaction', async () => { transactionId: nonExistentTransactionId as UUIDv4, } - const response = await testableService.handleRequestStopTransaction( - mockChargingStation, - stopRequest - ) + const response = await testableService.handleRequestStopTransaction(mockStation, stopRequest) // Verify rejection expect(response).toBeDefined() @@ -226,10 +217,7 @@ await describe('F03 - Remote Stop Transaction', async () => { transactionId: '' as UUIDv4, } - const response = await testableService.handleRequestStopTransaction( - mockChargingStation, - invalidRequest - ) + const response = await testableService.handleRequestStopTransaction(mockStation, invalidRequest) // Verify rejection expect(response).toBeDefined() @@ -250,10 +238,7 @@ await describe('F03 - Remote Stop Transaction', async () => { transactionId: tooLongTransactionId as UUIDv4, } - const response = await testableService.handleRequestStopTransaction( - mockChargingStation, - invalidRequest - ) + const response = await testableService.handleRequestStopTransaction(mockStation, invalidRequest) // Verify rejection expect(response).toBeDefined() @@ -280,9 +265,9 @@ await describe('F03 - Remote Stop Transaction', async () => { } // Update the connector's transaction ID for testing - const connectorId = mockChargingStation.getConnectorIdByTransactionId(transactionId) + const connectorId = mockStation.getConnectorIdByTransactionId(transactionId) if (connectorId != null) { - const connectorStatus = mockChargingStation.getConnectorStatus(connectorId) + const connectorStatus = mockStation.getConnectorStatus(connectorId) if (connectorStatus) { connectorStatus.transactionId = testTransactionId } @@ -292,10 +277,7 @@ await describe('F03 - Remote Stop Transaction', async () => { transactionId: testTransactionId as UUIDv4, } - const response = await testableService.handleRequestStopTransaction( - mockChargingStation, - stopRequest - ) + const response = await testableService.handleRequestStopTransaction(mockStation, stopRequest) // Verify acceptance (format is valid) expect(response).toBeDefined() @@ -378,10 +360,7 @@ await describe('F03 - Remote Stop Transaction', async () => { transactionId: transactionId as UUIDv4, } - const response = await testableService.handleRequestStopTransaction( - mockChargingStation, - stopRequest - ) + const response = await testableService.handleRequestStopTransaction(mockStation, stopRequest) // Verify response structure expect(response).toBeDefined() @@ -411,7 +390,7 @@ await describe('F03 - Remote Stop Transaction', async () => { } const response = await testableService.handleRequestStopTransaction( - mockChargingStation, + mockStation, stopRequestWithCustomData ) @@ -435,10 +414,7 @@ await describe('F03 - Remote Stop Transaction', async () => { transactionId: transactionId as UUIDv4, } - const response = await testableService.handleRequestStopTransaction( - mockChargingStation, - stopRequest - ) + const response = await testableService.handleRequestStopTransaction(mockStation, stopRequest) expect(response.status).toBe(RequestStartStopStatusEnumType.Accepted) @@ -466,11 +442,11 @@ await describe('F03 - Remote Stop Transaction', async () => { // FR: F03.FR.09 await it('should include final meter values in TransactionEvent(Ended)', async () => { - resetConnectorTransactionState(mockChargingStation) + resetConnectorTransactionState(mockStation) const transactionId = await startTransaction(3, 700) - const connectorStatus = mockChargingStation.getConnectorStatus(3) + const connectorStatus = mockStation.getConnectorStatus(3) expect(connectorStatus).toBeDefined() if (connectorStatus != null) { connectorStatus.transactionEnergyActiveImportRegisterValue = 12345.67 @@ -482,10 +458,7 @@ await describe('F03 - Remote Stop Transaction', async () => { transactionId: transactionId as UUIDv4, } - const response = await testableService.handleRequestStopTransaction( - mockChargingStation, - stopRequest - ) + const response = await testableService.handleRequestStopTransaction(mockStation, stopRequest) expect(response.status).toBe(RequestStartStopStatusEnumType.Accepted) diff --git a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-SetVariables.test.ts b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-SetVariables.test.ts index 4d0da501..cc26b82e 100644 --- a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-SetVariables.test.ts +++ b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-SetVariables.test.ts @@ -43,7 +43,7 @@ import { } from './OCPP20TestUtils.js' await describe('B05 - Set Variables', async () => { - let mockChargingStation: ChargingStation + let mockStation: ChargingStation let incomingRequestService: OCPP20IncomingRequestService let testableService: ReturnType @@ -59,7 +59,7 @@ await describe('B05 - Set Variables', async () => { }, websocketPingInterval: Constants.DEFAULT_WEBSOCKET_PING_INTERVAL, }) - mockChargingStation = station + mockStation = station incomingRequestService = new OCPP20IncomingRequestService() testableService = createTestableIncomingRequestService(incomingRequestService) }) @@ -92,7 +92,7 @@ await describe('B05 - Set Variables', async () => { } const response: { setVariableResult: OCPP20SetVariableResultType[] } = - testableService.handleRequestSetVariables(mockChargingStation, request) + testableService.handleRequestSetVariables(mockStation, request) expect(response).toBeDefined() expect(response.setVariableResult).toBeDefined() @@ -132,7 +132,7 @@ await describe('B05 - Set Variables', async () => { } const response: { setVariableResult: OCPP20SetVariableResultType[] } = - testableService.handleRequestSetVariables(mockChargingStation, request) + testableService.handleRequestSetVariables(mockStation, request) expect(response.setVariableResult).toHaveLength(2) const firstResult = response.setVariableResult[0] @@ -157,7 +157,7 @@ await describe('B05 - Set Variables', async () => { } const response: { setVariableResult: OCPP20SetVariableResultType[] } = - testableService.handleRequestSetVariables(mockChargingStation, request) + testableService.handleRequestSetVariables(mockStation, request) expect(response.setVariableResult).toHaveLength(1) const result = response.setVariableResult[0] @@ -180,7 +180,7 @@ await describe('B05 - Set Variables', async () => { ], } const response: { setVariableResult: OCPP20SetVariableResultType[] } = - testableService.handleRequestSetVariables(mockChargingStation, request) + testableService.handleRequestSetVariables(mockStation, request) expect(response.setVariableResult).toHaveLength(1) const result = response.setVariableResult[0] expect(result.attributeStatus).toBe(SetVariableStatusEnumType.UnknownComponent) @@ -200,7 +200,7 @@ await describe('B05 - Set Variables', async () => { } const response: { setVariableResult: OCPP20SetVariableResultType[] } = - testableService.handleRequestSetVariables(mockChargingStation, request) + testableService.handleRequestSetVariables(mockStation, request) expect(response.setVariableResult).toHaveLength(1) const result = response.setVariableResult[0] @@ -249,7 +249,7 @@ await describe('B05 - Set Variables', async () => { } const response: { setVariableResult: OCPP20SetVariableResultType[] } = - testableService.handleRequestSetVariables(mockChargingStation, request) + testableService.handleRequestSetVariables(mockStation, request) expect(response.setVariableResult).toHaveLength(5) const [accepted, unknownVariable, unsupportedAttrHeartbeat, unsupportedAttrWs, oversize] = @@ -280,7 +280,7 @@ await describe('B05 - Set Variables', async () => { ], } const response: { setVariableResult: OCPP20SetVariableResultType[] } = - testableService.handleRequestSetVariables(mockChargingStation, request) + testableService.handleRequestSetVariables(mockStation, request) expect(response.setVariableResult).toHaveLength(1) const result = response.setVariableResult[0] expect(result.attributeStatus).toBe(SetVariableStatusEnumType.NotSupportedAttributeType) @@ -300,7 +300,7 @@ await describe('B05 - Set Variables', async () => { ], } const response: { setVariableResult: OCPP20SetVariableResultType[] } = - testableService.handleRequestSetVariables(mockChargingStation, request) + testableService.handleRequestSetVariables(mockStation, request) expect(response.setVariableResult).toHaveLength(1) const result = response.setVariableResult[0] expect(result.attributeStatus).toBe(SetVariableStatusEnumType.Rejected) @@ -325,10 +325,10 @@ await describe('B05 - Set Variables', async () => { }, ], } - testableService.handleRequestSetVariables(mockChargingStation, setRequest) + testableService.handleRequestSetVariables(mockStation, setRequest) const getResponse: { getVariableResult: OCPP20GetVariableResultType[] } = - testableService.handleRequestGetVariables(mockChargingStation, { + testableService.handleRequestGetVariables(mockStation, { getVariableData: [ { attributeType: AttributeEnumType.Actual, @@ -363,10 +363,10 @@ await describe('B05 - Set Variables', async () => { }, ], } - testableService.handleRequestSetVariables(mockChargingStation, setRequest) + testableService.handleRequestSetVariables(mockStation, setRequest) const getBefore: { getVariableResult: OCPP20GetVariableResultType[] } = - testableService.handleRequestGetVariables(mockChargingStation, { + testableService.handleRequestGetVariables(mockStation, { getVariableData: [ { attributeType: AttributeEnumType.Actual, @@ -382,7 +382,7 @@ await describe('B05 - Set Variables', async () => { OCPP20VariableManager.getInstance().resetRuntimeOverrides() const getAfter: { getVariableResult: OCPP20GetVariableResultType[] } = - testableService.handleRequestGetVariables(mockChargingStation, { + testableService.handleRequestGetVariables(mockStation, { getVariableData: [ { component: { name: OCPP20ComponentName.SampledDataCtrlr }, @@ -395,7 +395,7 @@ await describe('B05 - Set Variables', async () => { // FR: B07.FR.12 await it('should reject all SetVariables when ItemsPerMessage limit exceeded', () => { - setStrictLimits(mockChargingStation, 1, 10000) + setStrictLimits(mockStation, 1, 10000) const request: OCPP20SetVariablesRequest = { setVariableData: [ { @@ -413,19 +413,19 @@ await describe('B05 - Set Variables', async () => { ], } const response: { setVariableResult: OCPP20SetVariableResultType[] } = - testableService.handleRequestSetVariables(mockChargingStation, request) + testableService.handleRequestSetVariables(mockStation, request) expect(response.setVariableResult).toHaveLength(2) response.setVariableResult.forEach(r => { expect(r.attributeStatus).toBe(SetVariableStatusEnumType.Rejected) expect(r.attributeStatusInfo?.reasonCode).toBe(ReasonCodeEnumType.TooManyElements) expect(r.attributeStatusInfo?.additionalInfo).toMatch(/ItemsPerMessage limit 1 exceeded/) }) - resetLimits(mockChargingStation) + resetLimits(mockStation) }) await it('should reject all SetVariables when BytesPerMessage limit exceeded (pre-calculation)', () => { // Set strict bytes limit low enough for request pre-estimate to exceed - setStrictLimits(mockChargingStation, 100, 10) + setStrictLimits(mockStation, 100, 10) const request: OCPP20SetVariablesRequest = { setVariableData: [ { @@ -441,14 +441,14 @@ await describe('B05 - Set Variables', async () => { ], } const response: { setVariableResult: OCPP20SetVariableResultType[] } = - testableService.handleRequestSetVariables(mockChargingStation, request) + testableService.handleRequestSetVariables(mockStation, request) expect(response.setVariableResult).toHaveLength(2) response.setVariableResult.forEach(r => { expect(r.attributeStatus).toBe(SetVariableStatusEnumType.Rejected) expect(r.attributeStatusInfo?.reasonCode).toBe(ReasonCodeEnumType.TooLargeElement) expect(r.attributeStatusInfo?.additionalInfo).toMatch(/BytesPerMessage limit 10 exceeded/) }) - resetLimits(mockChargingStation) + resetLimits(mockStation) }) await it('should reject all SetVariables when BytesPerMessage limit exceeded (post-calculation)', () => { @@ -495,14 +495,14 @@ await describe('B05 - Set Variables', async () => { const preEstimate = Buffer.byteLength(JSON.stringify(request.setVariableData), 'utf8') const postCalcLimit = preEstimate + 10 upsertConfigurationKey( - mockChargingStation, + mockStation, OCPP20RequiredVariableName.BytesPerMessage, postCalcLimit.toString(), false ) expect(preEstimate).toBeLessThan(postCalcLimit) const response: { setVariableResult: OCPP20SetVariableResultType[] } = - testableService.handleRequestSetVariables(mockChargingStation, request) + testableService.handleRequestSetVariables(mockStation, request) const actualSize = Buffer.byteLength(JSON.stringify(response.setVariableResult), 'utf8') expect(actualSize).toBeGreaterThan(postCalcLimit) expect(response.setVariableResult).toHaveLength(request.setVariableData.length) @@ -513,18 +513,18 @@ await describe('B05 - Set Variables', async () => { new RegExp(`BytesPerMessage limit ${postCalcLimit.toString()} exceeded`) ) }) - resetLimits(mockChargingStation) + resetLimits(mockStation) }) // Effective ConfigurationValueSize / ValueSize propagation tests await it('should enforce ConfigurationValueSize when ValueSize unset (service propagation)', () => { - resetValueSizeLimits(mockChargingStation) - setConfigurationValueSize(mockChargingStation, 100) - upsertConfigurationKey(mockChargingStation, OCPP20RequiredVariableName.ValueSize, '') + resetValueSizeLimits(mockStation) + setConfigurationValueSize(mockStation, 100) + upsertConfigurationKey(mockStation, OCPP20RequiredVariableName.ValueSize, '') const prefix = 'wss://example.com/' const withinLimit = prefix + 'a'.repeat(100 - prefix.length) const overLimit = prefix + 'a'.repeat(100 - prefix.length + 1) - let response = testableService.handleRequestSetVariables(mockChargingStation, { + let response = testableService.handleRequestSetVariables(mockStation, { setVariableData: [ { attributeValue: withinLimit, @@ -534,7 +534,7 @@ await describe('B05 - Set Variables', async () => { ], }) expect(response.setVariableResult[0].attributeStatus).toBe(SetVariableStatusEnumType.Accepted) - response = testableService.handleRequestSetVariables(mockChargingStation, { + response = testableService.handleRequestSetVariables(mockStation, { setVariableData: [ { attributeValue: overLimit, @@ -546,21 +546,17 @@ await describe('B05 - Set Variables', async () => { const res = response.setVariableResult[0] expect(res.attributeStatus).toBe(SetVariableStatusEnumType.Rejected) expect(res.attributeStatusInfo?.reasonCode).toBe(ReasonCodeEnumType.TooLargeElement) - resetValueSizeLimits(mockChargingStation) + resetValueSizeLimits(mockStation) }) await it('should enforce ValueSize when ConfigurationValueSize unset (service propagation)', () => { - resetValueSizeLimits(mockChargingStation) - upsertConfigurationKey( - mockChargingStation, - OCPP20RequiredVariableName.ConfigurationValueSize, - '' - ) - setValueSize(mockChargingStation, 120) + resetValueSizeLimits(mockStation) + upsertConfigurationKey(mockStation, OCPP20RequiredVariableName.ConfigurationValueSize, '') + setValueSize(mockStation, 120) const prefix = 'wss://example.com/' const withinLimit = prefix + 'b'.repeat(120 - prefix.length) const overLimit = prefix + 'b'.repeat(120 - prefix.length + 1) - let response = testableService.handleRequestSetVariables(mockChargingStation, { + let response = testableService.handleRequestSetVariables(mockStation, { setVariableData: [ { attributeValue: withinLimit, @@ -570,7 +566,7 @@ await describe('B05 - Set Variables', async () => { ], }) expect(response.setVariableResult[0].attributeStatus).toBe(SetVariableStatusEnumType.Accepted) - response = testableService.handleRequestSetVariables(mockChargingStation, { + response = testableService.handleRequestSetVariables(mockStation, { setVariableData: [ { attributeValue: overLimit, @@ -582,17 +578,17 @@ await describe('B05 - Set Variables', async () => { const res = response.setVariableResult[0] expect(res.attributeStatus).toBe(SetVariableStatusEnumType.Rejected) expect(res.attributeStatusInfo?.reasonCode).toBe(ReasonCodeEnumType.TooLargeElement) - resetValueSizeLimits(mockChargingStation) + resetValueSizeLimits(mockStation) }) await it('should use smaller ValueSize when ValueSize < ConfigurationValueSize (service propagation)', () => { - resetValueSizeLimits(mockChargingStation) - setConfigurationValueSize(mockChargingStation, 400) - setValueSize(mockChargingStation, 350) + resetValueSizeLimits(mockStation) + setConfigurationValueSize(mockStation, 400) + setValueSize(mockStation, 350) const prefix = 'wss://example.com/' const withinLimit = prefix + 'c'.repeat(350 - prefix.length) const overLimit = prefix + 'c'.repeat(350 - prefix.length + 1) - let response = testableService.handleRequestSetVariables(mockChargingStation, { + let response = testableService.handleRequestSetVariables(mockStation, { setVariableData: [ { attributeValue: withinLimit, @@ -602,7 +598,7 @@ await describe('B05 - Set Variables', async () => { ], }) expect(response.setVariableResult[0].attributeStatus).toBe(SetVariableStatusEnumType.Accepted) - response = testableService.handleRequestSetVariables(mockChargingStation, { + response = testableService.handleRequestSetVariables(mockStation, { setVariableData: [ { attributeValue: overLimit, @@ -614,17 +610,17 @@ await describe('B05 - Set Variables', async () => { const res = response.setVariableResult[0] expect(res.attributeStatus).toBe(SetVariableStatusEnumType.Rejected) expect(res.attributeStatusInfo?.reasonCode).toBe(ReasonCodeEnumType.TooLargeElement) - resetValueSizeLimits(mockChargingStation) + resetValueSizeLimits(mockStation) }) await it('should use smaller ConfigurationValueSize when ConfigurationValueSize < ValueSize (service propagation)', () => { - resetValueSizeLimits(mockChargingStation) - setConfigurationValueSize(mockChargingStation, 260) - setValueSize(mockChargingStation, 500) + resetValueSizeLimits(mockStation) + setConfigurationValueSize(mockStation, 260) + setValueSize(mockStation, 500) const prefix = 'wss://example.com/' const withinLimit = prefix + 'd'.repeat(260 - prefix.length) const overLimit = prefix + 'd'.repeat(260 - prefix.length + 1) - let response = testableService.handleRequestSetVariables(mockChargingStation, { + let response = testableService.handleRequestSetVariables(mockStation, { setVariableData: [ { attributeValue: withinLimit, @@ -634,7 +630,7 @@ await describe('B05 - Set Variables', async () => { ], }) expect(response.setVariableResult[0].attributeStatus).toBe(SetVariableStatusEnumType.Accepted) - response = testableService.handleRequestSetVariables(mockChargingStation, { + response = testableService.handleRequestSetVariables(mockStation, { setVariableData: [ { attributeValue: overLimit, @@ -646,16 +642,16 @@ await describe('B05 - Set Variables', async () => { const res = response.setVariableResult[0] expect(res.attributeStatus).toBe(SetVariableStatusEnumType.Rejected) expect(res.attributeStatusInfo?.reasonCode).toBe(ReasonCodeEnumType.TooLargeElement) - resetValueSizeLimits(mockChargingStation) + resetValueSizeLimits(mockStation) }) await it('should fallback to default absolute max length when both limits invalid/non-positive', () => { - resetValueSizeLimits(mockChargingStation) - setConfigurationValueSize(mockChargingStation, 0) - setValueSize(mockChargingStation, -5) + resetValueSizeLimits(mockStation) + setConfigurationValueSize(mockStation, 0) + setValueSize(mockStation, -5) const prefix = 'wss://example.com/' const validValue = prefix + 'e'.repeat(300 - prefix.length) // 300 < default absolute max length and < ConnectionUrl maxLength - const response = testableService.handleRequestSetVariables(mockChargingStation, { + const response = testableService.handleRequestSetVariables(mockStation, { setVariableData: [ { attributeValue: validValue, @@ -667,12 +663,12 @@ await describe('B05 - Set Variables', async () => { const res = response.setVariableResult[0] expect(res.attributeStatus).toBe(SetVariableStatusEnumType.Accepted) expect(res.attributeStatusInfo).toBeUndefined() - resetValueSizeLimits(mockChargingStation) + resetValueSizeLimits(mockStation) }) // FR: B07.FR.12 (updated behavior: ConnectionUrl now readable after set) await it('should allow ConnectionUrl read-back after setting', () => { - resetLimits(mockChargingStation) + resetLimits(mockStation) const url = 'wss://central.example.com/ocpp' const setRequest: OCPP20SetVariablesRequest = { setVariableData: [ @@ -683,9 +679,9 @@ await describe('B05 - Set Variables', async () => { }, ], } - testableService.handleRequestSetVariables(mockChargingStation, setRequest) + testableService.handleRequestSetVariables(mockStation, setRequest) const getResponse: { getVariableResult: OCPP20GetVariableResultType[] } = - testableService.handleRequestGetVariables(mockChargingStation, { + testableService.handleRequestGetVariables(mockStation, { getVariableData: [ { attributeType: AttributeEnumType.Actual, @@ -699,11 +695,11 @@ await describe('B05 - Set Variables', async () => { expect(result.attributeStatus).toBe(GetVariableStatusEnumType.Accepted) expect(result.attributeValue).toBe(url) expect(result.attributeStatusInfo).toBeUndefined() - resetLimits(mockChargingStation) + resetLimits(mockStation) }) await it('should accept ConnectionUrl with custom mqtt scheme (no scheme restriction)', () => { - resetLimits(mockChargingStation) + resetLimits(mockStation) const url = 'mqtt://broker.internal:1883/ocpp' const setRequest: OCPP20SetVariablesRequest = { setVariableData: [ @@ -715,13 +711,13 @@ await describe('B05 - Set Variables', async () => { ], } const response: { setVariableResult: OCPP20SetVariableResultType[] } = - testableService.handleRequestSetVariables(mockChargingStation, setRequest) + testableService.handleRequestSetVariables(mockStation, setRequest) expect(response.setVariableResult).toHaveLength(1) const setResult = response.setVariableResult[0] expect(setResult.attributeStatus).toBe(SetVariableStatusEnumType.Accepted) expect(setResult.attributeStatusInfo).toBeUndefined() const getResponse: { getVariableResult: OCPP20GetVariableResultType[] } = - testableService.handleRequestGetVariables(mockChargingStation, { + testableService.handleRequestGetVariables(mockStation, { getVariableData: [ { attributeType: AttributeEnumType.Actual, @@ -735,6 +731,6 @@ await describe('B05 - Set Variables', async () => { expect(getResult.attributeStatus).toBe(GetVariableStatusEnumType.Accepted) expect(getResult.attributeValue).toBe(url) expect(getResult.attributeStatusInfo).toBeUndefined() - resetLimits(mockChargingStation) + resetLimits(mockStation) }) }) diff --git a/tests/charging-station/ocpp/2.0/OCPP20ServiceUtils-TransactionEvent.test.ts b/tests/charging-station/ocpp/2.0/OCPP20ServiceUtils-TransactionEvent.test.ts index b7ee4d66..2c224551 100644 --- a/tests/charging-station/ocpp/2.0/OCPP20ServiceUtils-TransactionEvent.test.ts +++ b/tests/charging-station/ocpp/2.0/OCPP20ServiceUtils-TransactionEvent.test.ts @@ -79,7 +79,7 @@ const TRANSACTION_FLOWS = [ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { await describe('E01-E04 - OCPP 2.0.1 TransactionEvent Implementation', async () => { - let mockChargingStation: ChargingStation + let mockStation: ChargingStation beforeEach(() => { const { station } = createMockChargingStation({ @@ -96,8 +96,8 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { }, websocketPingInterval: Constants.DEFAULT_WEBSOCKET_PING_INTERVAL, }) - mockChargingStation = station - resetLimits(mockChargingStation) + mockStation = station + resetLimits(mockStation) }) // Reset singleton state and timers after each test to ensure test isolation @@ -112,10 +112,10 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const triggerReason = OCPP20TriggerReasonEnumType.Authorized // Reset sequence number to simulate new transaction - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) const transactionEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, triggerReason, connectorId, @@ -144,11 +144,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const transactionId = generateUUID() // Reset for new transaction - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // Build first event (Started) const startEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -157,7 +157,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // Build second event (Updated) const updateEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, connectorId, @@ -166,7 +166,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // Build third event (Ended) const endEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Ended, OCPP20TriggerReasonEnumType.StopAuthorized, connectorId, @@ -202,7 +202,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { } const transactionEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.ChargingStateChanged, connectorId, @@ -231,7 +231,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { try { OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -274,11 +274,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ] // Reset sequence number - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) for (const triggerReason of triggerReasons) { const transactionEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, triggerReason, connectorId, @@ -298,7 +298,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const transactionId = generateUUID() const response = await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -354,7 +354,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // First, build a transaction event to set sequence number OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -362,11 +362,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ) // Verify sequence number is set - const connectorStatus = mockChargingStation.getConnectorStatus(connectorId) + const connectorStatus = mockStation.getConnectorStatus(connectorId) expect(connectorStatus?.transactionSeqNo).toBeDefined() // Reset sequence number - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // Verify sequence number is reset expect(connectorStatus?.transactionSeqNo).toBeUndefined() @@ -377,10 +377,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // Should not throw error for non-existent connector expect(() => { - OCPP20ServiceUtils.resetTransactionSequenceNumber( - mockChargingStation, - nonExistentConnectorId - ) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, nonExistentConnectorId) }).not.toThrow() }) }) @@ -391,10 +388,10 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const connectorId = 1 const transactionId = generateUUID() - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) const transactionEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -446,10 +443,10 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const connectorId = 2 const transactionId = generateUUID() - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) const transactionEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -813,10 +810,10 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { source: 'remote_command', } - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) const transactionEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, context, connectorId, @@ -845,7 +842,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { } const transactionEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, context, connectorId, @@ -871,7 +868,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { } const response = await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, context, connectorId, @@ -929,11 +926,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const connectorId = 1 const transactionId = generateUUID() - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // Old method call should still work const oldEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -951,7 +948,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // Old method call should still work const response = await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -992,10 +989,10 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ? { idToken: `${id.toUpperCase()}_TOKEN_001`, type: OCPP20IdTokenEnumType.ISO14443 } : undefined - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) const startedEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, expectedStartTrigger, connectorId, @@ -1024,11 +1021,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { } : undefined - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // Step 1: Started event const startedEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, expectedStartTrigger, connectorId, @@ -1038,7 +1035,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // Step 2: Charging state change const chargingEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.ChargingStateChanged, connectorId, @@ -1048,7 +1045,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // Step 3: Ended event const endedEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Ended, OCPP20TriggerReasonEnumType.StopAuthorized, connectorId, @@ -1072,12 +1069,12 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const transaction1Id = generateUUID() const transaction2Id = generateUUID() - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connector1) - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connector2) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connector1) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connector2) // Start transaction on connector 1 const conn1Event1 = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, expectedStartTrigger, connector1, @@ -1086,7 +1083,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // Start transaction on connector 2 const conn2Event1 = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, expectedStartTrigger, connector2, @@ -1095,7 +1092,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // Update connector 1 const conn1Event2 = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.ChargingStateChanged, connector1, @@ -1104,7 +1101,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // Update connector 2 const conn2Event2 = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.ChargingStateChanged, connector2, @@ -1130,7 +1127,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // ========================================================================== await describe('E02 - Cable-First Transaction', async () => { beforeEach(() => { - resetConnectorTransactionState(mockChargingStation) + resetConnectorTransactionState(mockStation) }) await describe('Cable Plug Event Sequencing', async () => { @@ -1138,11 +1135,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const connectorId = 1 const transactionId = generateUUID() - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // Step 1: Cable plugged in (Started) const cablePluggedEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.CablePluggedIn, connectorId, @@ -1151,7 +1148,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // Step 2: EV detected (Updated) const evDetectedEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.EVDetected, connectorId, @@ -1160,7 +1157,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // Step 3: Charging starts (Updated with ChargingStateChanged) const chargingStartedEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.ChargingStateChanged, connectorId, @@ -1188,11 +1185,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const connectorId = 2 const transactionId = generateUUID() - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // Start transaction with cable plug const startEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.CablePluggedIn, connectorId, @@ -1201,7 +1198,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // End transaction with EV departure (cable removal) const endEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Ended, OCPP20TriggerReasonEnumType.EVDeparted, connectorId, @@ -1222,33 +1219,33 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const connectorId = 1 const transactionId = generateUUID() - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // Build full cable-first flow const events = [ OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.CablePluggedIn, connectorId, transactionId ), OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.EVDetected, connectorId, transactionId ), OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.Authorized, connectorId, transactionId ), OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.ChargingStateChanged, connectorId, @@ -1275,7 +1272,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const connectorId = 1 // Get connector status object - const connectorStatus = mockChargingStation.getConnectorStatus(connectorId) + const connectorStatus = mockStation.getConnectorStatus(connectorId) expect(connectorStatus).toBeDefined() if (connectorStatus == null) { throw new Error('Connector status should be defined') @@ -1306,7 +1303,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const connectorId = 2 const transactionId = generateUUID() - const connectorStatus = mockChargingStation.getConnectorStatus(connectorId) + const connectorStatus = mockStation.getConnectorStatus(connectorId) expect(connectorStatus).toBeDefined() if (connectorStatus == null) { throw new Error('Connector status should be defined') @@ -1337,13 +1334,13 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const connectorId = 3 const transactionId = generateUUID() - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // Cable-first flow with suspended state const events = [ // 1. Cable plugged OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.CablePluggedIn, connectorId, @@ -1351,7 +1348,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ), // 2. Start charging OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.ChargingStateChanged, connectorId, @@ -1360,7 +1357,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ), // 3. Suspended by EV OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.ChargingStateChanged, connectorId, @@ -1369,7 +1366,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ), // 4. Resume charging OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.ChargingStateChanged, connectorId, @@ -1378,7 +1375,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ), // 5. EV departed OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Ended, OCPP20TriggerReasonEnumType.EVDeparted, connectorId, @@ -1433,7 +1430,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // ========================================================================== await describe('E03 - IdToken-First Pre-Authorization', async () => { beforeEach(() => { - resetConnectorTransactionState(mockChargingStation) + resetConnectorTransactionState(mockStation) }) await describe('E03.FR.13 - Trigger Reason Selection', async () => { @@ -1489,11 +1486,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { type: OCPP20IdTokenEnumType.ISO14443, } - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // Build Started event with idToken (E03.FR.01: IdToken must be in first event) const startedEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -1516,11 +1513,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { type: OCPP20IdTokenEnumType.ISO14443, } - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // First event includes idToken const startedEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -1530,7 +1527,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // Second event should NOT include idToken (flag is set after first inclusion) const updatedEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.ChargingStateChanged, connectorId, @@ -1546,7 +1543,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const connectorId = 1 const transactionId = generateUUID() - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // Test ISO14443 (RFID) const rfidToken: OCPP20IdTokenType = { @@ -1555,7 +1552,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { } const rfidEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -1566,8 +1563,8 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { expect(rfidEvent.idToken?.type).toBe(OCPP20IdTokenEnumType.ISO14443) // Reset for eMAID test - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) - const connectorStatus = mockChargingStation.getConnectorStatus(connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) + const connectorStatus = mockStation.getConnectorStatus(connectorId) if (connectorStatus != null) { connectorStatus.transactionIdTokenSent = undefined } @@ -1579,7 +1576,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { } const emaidEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -1601,11 +1598,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { type: OCPP20IdTokenEnumType.ISO14443, } - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // E03 Step 1: IdToken presented and authorized (Started with Authorized trigger) const authorizedEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -1615,7 +1612,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // E03 Step 2: Cable connected (Updated event) const cableConnectedEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.CablePluggedIn, connectorId, @@ -1624,7 +1621,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // E03 Step 3: Charging starts const chargingEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.ChargingStateChanged, connectorId, @@ -1634,7 +1631,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // E03 Step 4: Transaction ends const endedEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Ended, OCPP20TriggerReasonEnumType.StopAuthorized, connectorId, @@ -1675,14 +1672,14 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { } // E03 IdToken-First: Starts with Authorized trigger - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) - const connectorStatus = mockChargingStation.getConnectorStatus(connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) + const connectorStatus = mockStation.getConnectorStatus(connectorId) if (connectorStatus != null) { connectorStatus.transactionIdTokenSent = undefined } const e03Start = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -1691,13 +1688,13 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ) // E02 Cable-First: Starts with CablePluggedIn trigger - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) if (connectorStatus != null) { connectorStatus.transactionIdTokenSent = undefined } const e02Start = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.CablePluggedIn, connectorId, @@ -1723,11 +1720,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { type: OCPP20IdTokenEnumType.ISO14443, } - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // E03.FR.05: User authorizes with IdToken const authorizedEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -1737,7 +1734,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // E03.FR.06: Cable not connected within timeout - transaction ends with Timeout const timeoutEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Ended, OCPP20TriggerReasonEnumType.EVConnectTimeout, connectorId, @@ -1782,11 +1779,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { type: OCPP20IdTokenEnumType.ISO14443, } - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // Transaction started with authorization const startEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -1796,7 +1793,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // Transaction ended due to deauthorization (e.g., token revoked mid-session) const revokedEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Ended, OCPP20TriggerReasonEnumType.Deauthorized, connectorId, @@ -1832,11 +1829,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { type: OCPP20IdTokenEnumType.ISO14443, } - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) const events = [ OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -1844,28 +1841,28 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { { idToken } ), OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.CablePluggedIn, connectorId, transactionId ), OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.ChargingStateChanged, connectorId, transactionId ), OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, connectorId, transactionId ), OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Ended, OCPP20TriggerReasonEnumType.StopAuthorized, connectorId, @@ -1882,7 +1879,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { await it('should use unique transaction ID (E03.FR.08)', () => { const connectorId = 1 - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) const transaction1Id = generateUUID() const transaction2Id = generateUUID() @@ -1891,17 +1888,17 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { expect(transaction1Id).not.toBe(transaction2Id) const event1 = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, transaction1Id ) - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) const event2 = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -1924,20 +1921,20 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { await describe('E02 - OCPP 2.0.1 Offline TransactionEvent Queueing', async () => { let mockTracking: MockStationWithTracking - let mockChargingStation: ChargingStation + let mockStation: ChargingStation let sentRequests: CapturedOCPPRequest[] let setOnline: (online: boolean) => void beforeEach(() => { mockTracking = createMockStationWithRequestTracking() - mockChargingStation = mockTracking.station + mockStation = mockTracking.station sentRequests = mockTracking.sentRequests setOnline = mockTracking.setOnline }) afterEach(() => { for (let connectorId = 1; connectorId <= 3; connectorId++) { - const connector = mockChargingStation.getConnectorStatus(connectorId) + const connector = mockStation.getConnectorStatus(connectorId) if (connector != null) { connector.transactionEventQueue = undefined } @@ -1952,10 +1949,10 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { setOnline(false) - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) const response = await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -1966,7 +1963,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { expect(response.idTokenInfo).toBeUndefined() - const connector = mockChargingStation.getConnectorStatus(connectorId) + const connector = mockStation.getConnectorStatus(connectorId) expect(connector?.transactionEventQueue).toBeDefined() expect(connector.transactionEventQueue.length).toBe(1) expect(connector.transactionEventQueue[0].seqNo).toBe(0) @@ -1978,10 +1975,10 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { setOnline(false) - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -1989,7 +1986,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, connectorId, @@ -1997,14 +1994,14 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Ended, OCPP20TriggerReasonEnumType.StopAuthorized, connectorId, transactionId ) - const connector = mockChargingStation.getConnectorStatus(connectorId) + const connector = mockStation.getConnectorStatus(connectorId) expect(connector?.transactionEventQueue?.length).toBe(3) expect(connector.transactionEventQueue[0].seqNo).toBe(0) @@ -2027,10 +2024,10 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const transactionId = generateUUID() setOnline(true) - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -2043,7 +2040,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { setOnline(false) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, connectorId, @@ -2051,14 +2048,14 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, connectorId, transactionId ) - const connector = mockChargingStation.getConnectorStatus(connectorId) + const connector = mockStation.getConnectorStatus(connectorId) expect(connector?.transactionEventQueue?.length).toBe(2) expect(connector.transactionEventQueue[0].seqNo).toBe(1) expect(connector.transactionEventQueue[1].seqNo).toBe(2) @@ -2069,11 +2066,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const transactionId = generateUUID() setOnline(false) - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) const beforeQueue = new Date() await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -2081,7 +2078,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ) const afterQueue = new Date() - const connector = mockChargingStation.getConnectorStatus(connectorId) + const connector = mockStation.getConnectorStatus(connectorId) expect(connector?.transactionEventQueue?.[0]?.timestamp).toBeInstanceOf(Date) expect(connector.transactionEventQueue[0].timestamp.getTime()).toBeGreaterThanOrEqual( beforeQueue.getTime() @@ -2098,10 +2095,10 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const transactionId = generateUUID() setOnline(false) - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -2109,7 +2106,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, connectorId, @@ -2120,7 +2117,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { setOnline(true) - await OCPP20ServiceUtils.sendQueuedTransactionEvents(mockChargingStation, connectorId) + await OCPP20ServiceUtils.sendQueuedTransactionEvents(mockStation, connectorId) expect(sentRequests.length).toBe(2) expect(sentRequests[0].payload.seqNo).toBe(0) @@ -2132,21 +2129,21 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const transactionId = generateUUID() setOnline(false) - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, transactionId ) - const connector = mockChargingStation.getConnectorStatus(connectorId) + const connector = mockStation.getConnectorStatus(connectorId) expect(connector?.transactionEventQueue?.length).toBe(1) setOnline(true) - await OCPP20ServiceUtils.sendQueuedTransactionEvents(mockChargingStation, connectorId) + await OCPP20ServiceUtils.sendQueuedTransactionEvents(mockStation, connectorId) expect(connector.transactionEventQueue.length).toBe(0) }) @@ -2156,10 +2153,10 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const transactionId = generateUUID() setOnline(false) - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -2167,7 +2164,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.ChargingStateChanged, connectorId, @@ -2175,7 +2172,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Ended, OCPP20TriggerReasonEnumType.StopAuthorized, connectorId, @@ -2183,7 +2180,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ) setOnline(true) - await OCPP20ServiceUtils.sendQueuedTransactionEvents(mockChargingStation, connectorId) + await OCPP20ServiceUtils.sendQueuedTransactionEvents(mockStation, connectorId) expect(sentRequests[0].payload.eventType).toBe(OCPP20TransactionEventEnumType.Started) expect(sentRequests[1].payload.eventType).toBe(OCPP20TransactionEventEnumType.Updated) @@ -2198,7 +2195,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const connectorId = 1 await expect( - OCPP20ServiceUtils.sendQueuedTransactionEvents(mockChargingStation, connectorId) + OCPP20ServiceUtils.sendQueuedTransactionEvents(mockStation, connectorId) ).resolves.toBeUndefined() expect(sentRequests.length).toBe(0) @@ -2206,11 +2203,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { await it('should handle null queue gracefully', async () => { const connectorId = 1 - const connector = mockChargingStation.getConnectorStatus(connectorId) + const connector = mockStation.getConnectorStatus(connectorId) connector.transactionEventQueue = undefined await expect( - OCPP20ServiceUtils.sendQueuedTransactionEvents(mockChargingStation, connectorId) + OCPP20ServiceUtils.sendQueuedTransactionEvents(mockStation, connectorId) ).resolves.toBeUndefined() expect(sentRequests.length).toBe(0) @@ -2223,10 +2220,10 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const transactionId = generateUUID() setOnline(true) - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -2237,7 +2234,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { setOnline(false) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, connectorId, @@ -2245,7 +2242,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, connectorId, @@ -2254,13 +2251,13 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { setOnline(true) - await OCPP20ServiceUtils.sendQueuedTransactionEvents(mockChargingStation, connectorId) + await OCPP20ServiceUtils.sendQueuedTransactionEvents(mockStation, connectorId) expect(sentRequests[1].payload.seqNo).toBe(1) expect(sentRequests[2].payload.seqNo).toBe(2) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Ended, OCPP20TriggerReasonEnumType.StopAuthorized, connectorId, @@ -2281,11 +2278,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const transactionId2 = generateUUID() setOnline(false) - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, 1) - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, 2) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, 1) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, 2) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, 1, @@ -2293,7 +2290,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, 2, @@ -2301,15 +2298,15 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, 1, transactionId1 ) - const connector1 = mockChargingStation.getConnectorStatus(1) - const connector2 = mockChargingStation.getConnectorStatus(2) + const connector1 = mockStation.getConnectorStatus(1) + const connector2 = mockStation.getConnectorStatus(2) expect(connector1?.transactionEventQueue?.length).toBe(2) expect(connector2?.transactionEventQueue?.length).toBe(1) @@ -2327,11 +2324,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const transactionId2 = generateUUID() setOnline(false) - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, 1) - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, 2) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, 1) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, 2) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, 1, @@ -2339,7 +2336,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { ) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, 2, @@ -2348,15 +2345,15 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { setOnline(true) - await OCPP20ServiceUtils.sendQueuedTransactionEvents(mockChargingStation, 1) + await OCPP20ServiceUtils.sendQueuedTransactionEvents(mockStation, 1) expect(sentRequests.length).toBe(1) expect(sentRequests[0].payload.transactionInfo.transactionId).toBe(transactionId1) - const connector2 = mockChargingStation.getConnectorStatus(2) + const connector2 = mockStation.getConnectorStatus(2) expect(connector2?.transactionEventQueue?.length).toBe(1) - await OCPP20ServiceUtils.sendQueuedTransactionEvents(mockChargingStation, 2) + await OCPP20ServiceUtils.sendQueuedTransactionEvents(mockStation, 2) expect(sentRequests.length).toBe(2) expect(sentRequests[1].payload.transactionInfo.transactionId).toBe(transactionId2) @@ -2435,19 +2432,19 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { await describe('E02 - OCPP 2.0.1 Periodic TransactionEvent at TxUpdatedInterval', async () => { let mockTracking: MockStationWithTracking - let mockChargingStation: ChargingStation + let mockStation: ChargingStation let sentRequests: CapturedOCPPRequest[] beforeEach(() => { mockTracking = createMockStationWithRequestTracking() - mockChargingStation = mockTracking.station + mockStation = mockTracking.station sentRequests = mockTracking.sentRequests }) afterEach(() => { // Clean up any running timers for (let connectorId = 1; connectorId <= 3; connectorId++) { - const connector = mockChargingStation.getConnectorStatus(connectorId) + const connector = mockStation.getConnectorStatus(connectorId) if (connector?.transactionTxUpdatedSetInterval != null) { clearInterval(connector.transactionTxUpdatedSetInterval) connector.transactionTxUpdatedSetInterval = undefined @@ -2478,7 +2475,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const connectorId = 1 // Simulate startTxUpdatedInterval with zero interval - const connector = mockChargingStation.getConnectorStatus(connectorId) + const connector = mockStation.getConnectorStatus(connectorId) expect(connector).toBeDefined() // Zero interval should not start timer @@ -2488,7 +2485,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { await it('should not start timer when interval is negative', () => { const connectorId = 1 - const connector = mockChargingStation.getConnectorStatus(connectorId) + const connector = mockStation.getConnectorStatus(connectorId) expect(connector).toBeDefined() // Negative interval should not start timer @@ -2500,11 +2497,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // Should not throw for non-existent connector expect(() => { - mockChargingStation.getConnectorStatus(nonExistentConnectorId) + mockStation.getConnectorStatus(nonExistentConnectorId) }).not.toThrow() // Should return undefined for non-existent connector - expect(mockChargingStation.getConnectorStatus(nonExistentConnectorId)).toBeUndefined() + expect(mockStation.getConnectorStatus(nonExistentConnectorId)).toBeUndefined() }) }) @@ -2514,11 +2511,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const transactionId = generateUUID() // Reset sequence number - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // Simulate sending periodic TransactionEvent (what the timer callback does) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, connectorId, @@ -2539,11 +2536,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const transactionId = generateUUID() // Reset sequence number for new transaction - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // Send initial Started event const startEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -2554,7 +2551,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // Send multiple periodic events (simulating timer ticks) for (let i = 1; i <= 3; i++) { const periodicEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, connectorId, @@ -2564,7 +2561,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { } // Verify sequence numbers are continuous: 0, 1, 2, 3 - const connector = mockChargingStation.getConnectorStatus(connectorId) + const connector = mockStation.getConnectorStatus(connectorId) expect(connector?.transactionSeqNo).toBe(3) }) @@ -2572,11 +2569,11 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const connectorId = 2 const transactionId = generateUUID() - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // Send periodic event await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, connectorId, @@ -2591,10 +2588,10 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const connectorId = 1 const transactionId = generateUUID() - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, connectorId, @@ -2610,10 +2607,10 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const connectorId = 1 const transactionId = generateUUID() - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) await OCPP20ServiceUtils.sendTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, connectorId, @@ -2632,12 +2629,12 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const transactionId = generateUUID() // Reset for new transaction - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, connectorId) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, connectorId) // Simulate full transaction lifecycle with periodic updates // 1. Started event (seqNo: 0) const startEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, connectorId, @@ -2648,7 +2645,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // 2. Multiple periodic updates (seqNo: 1, 2, 3) for (let i = 1; i <= 3; i++) { const updateEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, connectorId, @@ -2659,7 +2656,7 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // 3. Ended event (seqNo: 4) const endEvent = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Ended, OCPP20TriggerReasonEnumType.StopAuthorized, connectorId, @@ -2673,19 +2670,19 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { const transactionId2 = generateUUID() // Reset sequence numbers for both connectors - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, 1) - OCPP20ServiceUtils.resetTransactionSequenceNumber(mockChargingStation, 2) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, 1) + OCPP20ServiceUtils.resetTransactionSequenceNumber(mockStation, 2) // Build events for connector 1 const event1Start = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, 1, transactionId1 ) const event1Update = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, 1, @@ -2694,14 +2691,14 @@ await describe('OCPP20 TransactionEvent ServiceUtils', async () => { // Build events for connector 2 const event2Start = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Started, OCPP20TriggerReasonEnumType.Authorized, 2, transactionId2 ) const event2Update = OCPP20ServiceUtils.buildTransactionEvent( - mockChargingStation, + mockStation, OCPP20TransactionEventEnumType.Updated, OCPP20TriggerReasonEnumType.MeterValuePeriodic, 2, diff --git a/tests/charging-station/ocpp/auth/OCPPAuthIntegration.test.ts b/tests/charging-station/ocpp/auth/OCPPAuthIntegration.test.ts index ac717a90..7d6246e3 100644 --- a/tests/charging-station/ocpp/auth/OCPPAuthIntegration.test.ts +++ b/tests/charging-station/ocpp/auth/OCPPAuthIntegration.test.ts @@ -20,8 +20,8 @@ import { createMockChargingStation } from '../../ChargingStationTestUtils.js' import { createMockAuthRequest, createMockIdentifier } from './helpers/MockFactories.js' await describe('OCPP Authentication', async () => { - let mockChargingStation16: ChargingStation - let mockChargingStation20: ChargingStation + let mockStation16: ChargingStation + let mockStation20: ChargingStation beforeEach(() => { // Create mock charging station with OCPP 1.6 configuration @@ -34,7 +34,7 @@ await describe('OCPP Authentication', async () => { templateName: 'test-auth-template', }, }) - mockChargingStation16 = result16.station + mockStation16 = result16.station // Create mock charging station with OCPP 2.0 configuration const result20 = createMockChargingStation({ @@ -46,7 +46,7 @@ await describe('OCPP Authentication', async () => { templateName: 'test-auth-template', }, }) - mockChargingStation20 = result20.station + mockStation20 = result20.station }) afterEach(() => { @@ -57,7 +57,7 @@ await describe('OCPP Authentication', async () => { let authService16: OCPPAuthServiceImpl beforeEach(() => { - authService16 = new OCPPAuthServiceImpl(mockChargingStation16) + authService16 = new OCPPAuthServiceImpl(mockStation16) }) await it('should authenticate with valid identifier', async () => { @@ -113,7 +113,7 @@ await describe('OCPP Authentication', async () => { let authService20: OCPPAuthServiceImpl beforeEach(() => { - authService20 = new OCPPAuthServiceImpl(mockChargingStation20) + authService20 = new OCPPAuthServiceImpl(mockStation20) }) await it('should authenticate with valid identifier', async () => { @@ -157,7 +157,7 @@ await describe('OCPP Authentication', async () => { let authServiceError: OCPPAuthServiceImpl beforeEach(() => { - authServiceError = new OCPPAuthServiceImpl(mockChargingStation16) + authServiceError = new OCPPAuthServiceImpl(mockStation16) }) await it('should handle invalid identifier gracefully during auth flow', async () => { @@ -183,7 +183,7 @@ await describe('OCPP Authentication', async () => { let authServiceConcurrent: OCPPAuthServiceImpl beforeEach(() => { - authServiceConcurrent = new OCPPAuthServiceImpl(mockChargingStation16) + authServiceConcurrent = new OCPPAuthServiceImpl(mockStation16) }) await it('should handle concurrent authentication requests with mixed contexts', async () => { diff --git a/tests/charging-station/ocpp/auth/adapters/OCPP16AuthAdapter.test.ts b/tests/charging-station/ocpp/auth/adapters/OCPP16AuthAdapter.test.ts index a5a586b8..94ac175a 100644 --- a/tests/charging-station/ocpp/auth/adapters/OCPP16AuthAdapter.test.ts +++ b/tests/charging-station/ocpp/auth/adapters/OCPP16AuthAdapter.test.ts @@ -23,11 +23,11 @@ import { createMockAuthorizationResult, createMockIdentifier } from '../helpers/ await describe('OCPP16AuthAdapter', async () => { let adapter: OCPP16AuthAdapter - let mockChargingStation: ChargingStation + let mockStation: ChargingStation beforeEach(() => { // Create mock charging station - mockChargingStation = { + mockStation = { getConnectorStatus: (connectorId: number) => ({ authorizeIdTag: undefined, }), @@ -51,7 +51,7 @@ await describe('OCPP16AuthAdapter', async () => { }, } as unknown as ChargingStation - adapter = new OCPP16AuthAdapter(mockChargingStation) + adapter = new OCPP16AuthAdapter(mockStation) }) afterEach(() => { @@ -169,7 +169,7 @@ await describe('OCPP16AuthAdapter', async () => { await it('should handle authorization failure gracefully', async () => { // Override mock to simulate failure - mockChargingStation.ocppRequestService.requestHandler = (): Promise => { + mockStation.ocppRequestService.requestHandler = (): Promise => { return Promise.reject(new Error('Network error')) } @@ -189,15 +189,15 @@ await describe('OCPP16AuthAdapter', async () => { }) await it('should return false when station is offline', async () => { - mockChargingStation.inAcceptedState = () => false + mockStation.inAcceptedState = () => false const isAvailable = await adapter.isRemoteAvailable() expect(isAvailable).toBe(false) }) await it('should return false when remote authorization is disabled', async () => { - if (mockChargingStation.stationInfo) { - mockChargingStation.stationInfo.remoteAuthorization = false + if (mockStation.stationInfo) { + mockStation.stationInfo.remoteAuthorization = false } const isAvailable = await adapter.isRemoteAvailable() diff --git a/tests/charging-station/ocpp/auth/adapters/OCPP20AuthAdapter.test.ts b/tests/charging-station/ocpp/auth/adapters/OCPP20AuthAdapter.test.ts index 73ee696a..2337205e 100644 --- a/tests/charging-station/ocpp/auth/adapters/OCPP20AuthAdapter.test.ts +++ b/tests/charging-station/ocpp/auth/adapters/OCPP20AuthAdapter.test.ts @@ -27,10 +27,10 @@ import { createMockAuthorizationResult, createMockIdentifier } from '../helpers/ await describe('OCPP20AuthAdapter', async () => { let adapter: OCPP20AuthAdapter - let mockChargingStation: ChargingStation + let mockStation: ChargingStation beforeEach(() => { - mockChargingStation = { + mockStation = { inAcceptedState: () => true, logPrefix: () => '[TEST-STATION-20]', stationInfo: { @@ -38,7 +38,7 @@ await describe('OCPP20AuthAdapter', async () => { }, } as unknown as ChargingStation - adapter = new OCPP20AuthAdapter(mockChargingStation) + adapter = new OCPP20AuthAdapter(mockStation) }) afterEach(() => { @@ -269,7 +269,7 @@ await describe('OCPP20AuthAdapter', async () => { }) await it('should return false when station is offline', async t => { - mockChargingStation.inAcceptedState = () => false + mockStation.inAcceptedState = () => false t.mock.method( adapter as unknown as { getVariableValue: () => Promise }, 'getVariableValue', diff --git a/tests/charging-station/ocpp/auth/strategies/CertificateAuthStrategy.test.ts b/tests/charging-station/ocpp/auth/strategies/CertificateAuthStrategy.test.ts index 6fef9114..13df673b 100644 --- a/tests/charging-station/ocpp/auth/strategies/CertificateAuthStrategy.test.ts +++ b/tests/charging-station/ocpp/auth/strategies/CertificateAuthStrategy.test.ts @@ -25,11 +25,11 @@ import { await describe('CertificateAuthStrategy', async () => { let strategy: CertificateAuthStrategy - let mockChargingStation: ChargingStation + let mockStation: ChargingStation let mockOCPP20Adapter: OCPPAuthAdapter beforeEach(() => { - mockChargingStation = { + mockStation = { logPrefix: () => '[TEST-CS-001]', stationInfo: { chargingStationId: 'TEST-CS-001', @@ -54,7 +54,7 @@ await describe('CertificateAuthStrategy', async () => { const adapters = new Map() adapters.set(OCPPVersion.VERSION_20, mockOCPP20Adapter) - strategy = new CertificateAuthStrategy(mockChargingStation, adapters) + strategy = new CertificateAuthStrategy(mockStation, adapters) }) afterEach(() => { -- 2.43.0