From 689e439da97b5e19d8c12c1eb799aba5b543ed7a Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Sat, 28 Mar 2026 17:15:58 +0100 Subject: [PATCH] test: add symmetric Ended meter value tests for start/stop/zero-interval Cover startEndedMeterValues (timer + array init), stopEndedMeterValues (timer clear), and interval=0 edge case (array init without timer). Follows existing Updated test pattern for consistency. --- .../ChargingStation-Transactions.test.ts | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/tests/charging-station/ChargingStation-Transactions.test.ts b/tests/charging-station/ChargingStation-Transactions.test.ts index 826d8e4f..194851f9 100644 --- a/tests/charging-station/ChargingStation-Transactions.test.ts +++ b/tests/charging-station/ChargingStation-Transactions.test.ts @@ -640,5 +640,81 @@ await describe('ChargingStation Transaction Management', async () => { assert.strictEqual(connector1?.transactionUpdatedMeterValuesSetInterval, undefined) }) }) + + await it('should create transaction ended interval when startEndedMeterValues() is called for OCPP 2.0', async t => { + await withMockTimers(t, ['setInterval'], () => { + // Arrange + const result = createMockChargingStation({ + connectorsCount: 2, + ocppVersion: OCPPVersion.VERSION_20, + }) + station = result.station + const connector1 = station.getConnectorStatus(1) + if (connector1 != null) { + connector1.transactionStarted = true + connector1.transactionId = 100 + } + + // Act + OCPP20ServiceUtils.startEndedMeterValues(station, 1, 5000) + + // Assert + if (connector1 != null) { + assert.notStrictEqual(connector1.transactionEndedMeterValuesSetInterval, undefined) + assert.strictEqual(typeof connector1.transactionEndedMeterValuesSetInterval, 'object') + assert.ok(Array.isArray(connector1.transactionEndedMeterValues)) + assert.strictEqual(connector1.transactionEndedMeterValues.length, 0) + } + }) + }) + + await it('should clear transaction ended interval when stopEndedMeterValues() is called', async t => { + await withMockTimers(t, ['setInterval'], () => { + // Arrange + const result = createMockChargingStation({ + connectorsCount: 2, + ocppVersion: OCPPVersion.VERSION_20, + }) + station = result.station + const connector1 = station.getConnectorStatus(1) + if (connector1 != null) { + connector1.transactionStarted = true + connector1.transactionId = 100 + } + OCPP20ServiceUtils.startEndedMeterValues(station, 1, 5000) + + // Act + OCPP20ServiceUtils.stopEndedMeterValues(station, 1) + + // Assert + assert.strictEqual(connector1?.transactionEndedMeterValuesSetInterval, undefined) + }) + }) + + await it('should initialize empty ended meter values array without timer when interval is zero', async t => { + await withMockTimers(t, ['setInterval'], () => { + // Arrange + const result = createMockChargingStation({ + connectorsCount: 2, + ocppVersion: OCPPVersion.VERSION_20, + }) + station = result.station + const connector1 = station.getConnectorStatus(1) + if (connector1 != null) { + connector1.transactionStarted = true + connector1.transactionId = 100 + } + + // Act + OCPP20ServiceUtils.startEndedMeterValues(station, 1, 0) + + // Assert + if (connector1 != null) { + assert.strictEqual(connector1.transactionEndedMeterValuesSetInterval, undefined) + assert.ok(Array.isArray(connector1.transactionEndedMeterValues)) + assert.strictEqual(connector1.transactionEndedMeterValues.length, 0) + } + }) + }) }) }) -- 2.53.0