From: Jérôme Benoit Date: Sat, 28 Mar 2026 16:15:58 +0000 (+0100) Subject: test: add symmetric Ended meter value tests for start/stop/zero-interval X-Git-Tag: ocpp-server@v4.0.0~6 X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=689e439da97b5e19d8c12c1eb799aba5b543ed7a;p=e-mobility-charging-stations-simulator.git 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. --- 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) + } + }) + }) }) })