From 0375fa40335d25d42646fff1dc9c7bf7677e9e22 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Sun, 29 Mar 2026 00:18:42 +0100 Subject: [PATCH] refactor: harmonize connector iteration to use iterateConnectors() across prod and tests Unify all connector/EVSE iteration patterns behind the iterateConnectors() generator API, eliminating duplicated if(hasEvses)/else branching in both production and test code. Production: - Refactor getNumberOfConnectors(), hasConnector(), getNumberOfReservationsOnConnectorZero() to use iterateConnectors() Tests: - Harmonize 10 mock methods in StationHelpers.ts to match production patterns - Collapse OCPP20TestUtils resetConnectorTransactionState from dual-path to single iterateConnectors() loop - Replace direct evseStatus.connectors map access with getConnectorStatus() and getConnectorIdByEvseId() helpers across 4 test files - Remove redundant EVSE cleanup loops in standardCleanup and fullResetStation - Align getReservationBy mock signature to production types (ReservationKey) - Fix alphabetical ordering of mock methods --- src/charging-station/ChargingStation.ts | 56 ++---- .../ChargingStationWorkerBroadcastChannel.ts | 100 +++++------ .../ocpp/2.0/OCPP20IncomingRequestService.ts | 2 +- tests/charging-station/Helpers.test.ts | 10 +- .../helpers/StationHelpers.ts | 164 +++--------------- ...OCPP20IncomingRequestService-Reset.test.ts | 37 ++-- ...mingRequestService-UnlockConnector.test.ts | 6 +- ...omingRequestService-UpdateFirmware.test.ts | 25 +-- .../ocpp/2.0/OCPP20TestUtils.ts | 36 ++-- 9 files changed, 131 insertions(+), 305 deletions(-) diff --git a/src/charging-station/ChargingStation.ts b/src/charging-station/ChargingStation.ts index c5da8219..a1b145a8 100644 --- a/src/charging-station/ChargingStation.ts +++ b/src/charging-station/ChargingStation.ts @@ -456,6 +456,15 @@ export class ChargingStation extends EventEmitter { return Constants.DEFAULT_EV_CONNECTION_TIMEOUT } + /** + * Resolves the first connector ID for a given EVSE ID. + * @param evseId - The EVSE ID + * @returns The connector ID or undefined if not found + */ + public getConnectorIdByEvseId (evseId: number): number | undefined { + return this.iterateConnectors().find(({ evseId: id }) => id === evseId)?.connectorId + } + /** * Resolves the connector ID for a given transaction ID. * @param transactionId - The transaction ID to resolve @@ -524,15 +533,8 @@ export class ChargingStation extends EventEmitter { } public getConnectorStatus (connectorId: number): ConnectorStatus | undefined { - if (this.hasEvses) { - for (const evseStatus of this.evses.values()) { - if (evseStatus.connectors.has(connectorId)) { - return evseStatus.connectors.get(connectorId) - } - } - return undefined - } - return this.connectors.get(connectorId) + return this.iterateConnectors().find(({ connectorId: id }) => id === connectorId) + ?.connectorStatus } /** @@ -568,15 +570,7 @@ export class ChargingStation extends EventEmitter { * @returns The EVSE ID or undefined if not found */ public getEvseIdByConnectorId (connectorId: number): number | undefined { - if (!this.hasEvses) { - return undefined - } - for (const [evseId, evseStatus] of this.evses) { - if (evseStatus.connectors.has(connectorId)) { - return evseId - } - } - return undefined + return this.iterateConnectors().find(({ connectorId: id }) => id === connectorId)?.evseId } /** @@ -627,16 +621,7 @@ export class ChargingStation extends EventEmitter { } public getNumberOfConnectors (): number { - if (this.hasEvses) { - let numberOfConnectors = 0 - for (const [evseId, evseStatus] of this.evses) { - if (evseId > 0) { - numberOfConnectors += evseStatus.connectors.size - } - } - return numberOfConnectors - } - return this.connectors.has(0) ? this.connectors.size - 1 : this.connectors.size + return this.iterateConnectors(true).reduce(count => count + 1, 0) } public getNumberOfEvses (): number { @@ -716,15 +701,7 @@ export class ChargingStation extends EventEmitter { } public hasConnector (connectorId: number): boolean { - if (this.hasEvses) { - for (const evseStatus of this.evses.values()) { - if (evseStatus.connectors.has(connectorId)) { - return true - } - } - return false - } - return this.connectors.has(connectorId) + return this.iterateConnectors().some(({ connectorId: id }) => id === connectorId) } public hasEvse (evseId: number): boolean { @@ -1460,10 +1437,7 @@ export class ChargingStation extends EventEmitter { } private getNumberOfReservationsOnConnectorZero (): number { - if ( - (this.hasEvses && this.evses.get(0)?.connectors.get(0)?.reservation != null) || - (!this.hasEvses && this.connectors.get(0)?.reservation != null) - ) { + if (this.getConnectorStatus(0)?.reservation != null) { return 1 } return 0 diff --git a/src/charging-station/broadcast-channel/ChargingStationWorkerBroadcastChannel.ts b/src/charging-station/broadcast-channel/ChargingStationWorkerBroadcastChannel.ts index 990afba4..902cbedb 100644 --- a/src/charging-station/broadcast-channel/ChargingStationWorkerBroadcastChannel.ts +++ b/src/charging-station/broadcast-channel/ChargingStationWorkerBroadcastChannel.ts @@ -395,71 +395,49 @@ export class ChargingStationWorkerBroadcastChannel extends WorkerBroadcastChanne private async handleMeterValues ( requestPayload?: BroadcastChannelRequestPayload ): Promise { - const connectorId = requestPayload?.connectorId + const payloadEvseId = (requestPayload as undefined | { evseId?: number })?.evseId + const connectorId = + requestPayload?.connectorId ?? + (payloadEvseId != null + ? this.chargingStation.getConnectorIdByEvseId(payloadEvseId) + : undefined) if (connectorId == null) { throw new BaseError( - `${this.chargingStation.logPrefix()} ${moduleName}.handleMeterValues: Missing connectorId in request payload` + `${this.chargingStation.logPrefix()} ${moduleName}.handleMeterValues: Missing connectorId or evseId in request payload` ) } - switch (this.chargingStation.stationInfo?.ocppVersion) { - case OCPPVersion.VERSION_16: { - const configuredMeterValueSampleInterval = getConfigurationKey( - this.chargingStation, - StandardParametersKey.MeterValueSampleInterval - ) - const transactionId = this.chargingStation.getConnectorStatus(connectorId)?.transactionId - return await this.chargingStation.ocppRequestService.requestHandler< - MeterValuesRequest, - MeterValuesResponse - >( - this.chargingStation, - RequestCommand.METER_VALUES, - { - meterValue: [ - buildMeterValue( - this.chargingStation, - convertToInt(transactionId), - configuredMeterValueSampleInterval != null - ? secondsToMilliseconds(convertToInt(configuredMeterValueSampleInterval.value)) - : Constants.DEFAULT_METER_VALUES_INTERVAL - ), - ], - ...requestPayload, - } as MeterValuesRequest, - this.requestParams - ) - } - case OCPPVersion.VERSION_20: - case OCPPVersion.VERSION_201: { - const alignedDataInterval = OCPP20ServiceUtils.getAlignedDataInterval(this.chargingStation) - const evseId = this.chargingStation.getEvseIdByConnectorId(connectorId) - const transactionId = this.chargingStation.getConnectorStatus(connectorId)?.transactionId - return await this.chargingStation.ocppRequestService.requestHandler< - MeterValuesRequest, - MeterValuesResponse - >( - this.chargingStation, - RequestCommand.METER_VALUES, - { - evseId, - meterValue: [ - buildMeterValue( - this.chargingStation, - - transactionId, - alignedDataInterval - ), - ], - ...requestPayload, - } as MeterValuesRequest, - this.requestParams - ) - } - default: - throw new BaseError( - `${this.chargingStation.logPrefix()} ${moduleName}.handleMeterValues: Unsupported OCPP version for MeterValues` - ) - } + const transactionId = this.chargingStation.getConnectorStatus(connectorId)?.transactionId + const isOcpp2 = + this.chargingStation.stationInfo?.ocppVersion === OCPPVersion.VERSION_20 || + this.chargingStation.stationInfo?.ocppVersion === OCPPVersion.VERSION_201 + const interval = isOcpp2 + ? OCPP20ServiceUtils.getAlignedDataInterval(this.chargingStation) + : (() => { + const key = getConfigurationKey( + this.chargingStation, + StandardParametersKey.MeterValueSampleInterval + ) + return key != null + ? secondsToMilliseconds(convertToInt(key.value)) + : Constants.DEFAULT_METER_VALUES_INTERVAL + })() + return await this.chargingStation.ocppRequestService.requestHandler< + MeterValuesRequest, + MeterValuesResponse + >( + this.chargingStation, + RequestCommand.METER_VALUES, + { + ...(isOcpp2 + ? { + evseId: payloadEvseId ?? this.chargingStation.getEvseIdByConnectorId(connectorId), + } + : { connectorId }), + meterValue: [buildMeterValue(this.chargingStation, transactionId, interval)], + ...requestPayload, + } as MeterValuesRequest, + this.requestParams + ) } private async handleStopTransaction ( diff --git a/src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts b/src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts index ecf553d5..90fa1331 100644 --- a/src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts +++ b/src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts @@ -2256,7 +2256,7 @@ export class OCPP20IncomingRequestService extends OCPPIncomingRequestService { commandPayload ) } - const connectorId: number | undefined = evse.connectors.keys().next().value + const connectorId = chargingStation.getConnectorIdByEvseId(resolvedEvseId) const connectorStatus = connectorId != null ? chargingStation.getConnectorStatus(connectorId) : null diff --git a/tests/charging-station/Helpers.test.ts b/tests/charging-station/Helpers.test.ts index bd3ede27..9ea30724 100644 --- a/tests/charging-station/Helpers.test.ts +++ b/tests/charging-station/Helpers.test.ts @@ -752,8 +752,9 @@ await describe('Helpers', async () => { connectorsCount: 2, stationInfo: { ocppVersion: OCPPVersion.VERSION_201 }, }) - const firstEvse = chargingStation.getEvseStatus(1) - const firstConnector = firstEvse?.connectors.values().next().value + const firstConnectorId = chargingStation.getConnectorIdByEvseId(1) + const firstConnector = + firstConnectorId != null ? chargingStation.getConnectorStatus(firstConnectorId) : undefined if (firstConnector != null) { firstConnector.reservation = createTestReservation(false) } @@ -769,8 +770,9 @@ await describe('Helpers', async () => { connectorsCount: 2, stationInfo: { ocppVersion: OCPPVersion.VERSION_201 }, }) - const firstEvse = chargingStation.getEvseStatus(1) - const firstConnector = firstEvse?.connectors.values().next().value + const firstConnectorId = chargingStation.getConnectorIdByEvseId(1) + const firstConnector = + firstConnectorId != null ? chargingStation.getConnectorStatus(firstConnectorId) : undefined if (firstConnector != null) { firstConnector.reservation = createTestReservation(true) } diff --git a/tests/charging-station/helpers/StationHelpers.ts b/tests/charging-station/helpers/StationHelpers.ts index c0d5813a..1b9d084d 100644 --- a/tests/charging-station/helpers/StationHelpers.ts +++ b/tests/charging-station/helpers/StationHelpers.ts @@ -14,6 +14,7 @@ import type { EvseEntry, EvseStatus, Reservation, + ReservationKey, StopTransactionReason, } from '../../../src/types/index.js' @@ -230,20 +231,6 @@ export function cleanupChargingStation (station: ChargingStation): void { } } - // Clear EVSE connector transaction state and timers - for (const { evseStatus } of station.iterateEvses()) { - for (const connectorStatus of evseStatus.connectors.values()) { - if (connectorStatus.transactionUpdatedMeterValuesSetInterval != null) { - clearInterval(connectorStatus.transactionUpdatedMeterValuesSetInterval) - connectorStatus.transactionUpdatedMeterValuesSetInterval = undefined - } - if (connectorStatus.transactionEndedMeterValuesSetInterval != null) { - clearInterval(connectorStatus.transactionEndedMeterValuesSetInterval) - connectorStatus.transactionEndedMeterValuesSetInterval = undefined - } - } - } - // Clear requests map station.requests.clear() @@ -468,40 +455,23 @@ export function createMockChargingStation ( getConnectionTimeout (): number { return connectionTimeout }, + getConnectorIdByEvseId (evseId: number): number | undefined { + return this.iterateConnectors().find(({ evseId: id }) => id === evseId)?.connectorId + }, getConnectorIdByTransactionId (transactionId: number | string | undefined): number | undefined { if (transactionId == null) { return undefined - } else if (useEvses) { - for (const evseStatus of evses.values()) { - for (const [connectorId, connectorStatus] of evseStatus.connectors) { - if (connectorStatus.transactionId === transactionId) { - return connectorId - } - } - } - } else { - for (const connectorId of connectors.keys()) { - if (this.getConnectorStatus(connectorId)?.transactionId === transactionId) { - return connectorId - } - } } - return undefined + return this.iterateConnectors().find( + ({ connectorStatus }) => connectorStatus.transactionId === transactionId + )?.connectorId }, getConnectorMaximumAvailablePower (_connectorId: number): number { return stationInfoOverrides?.maximumPower ?? 22000 }, - // Methods getConnectorStatus (connectorId: number): ConnectorStatus | undefined { - if (useEvses) { - for (const evseStatus of evses.values()) { - if (evseStatus.connectors.has(connectorId)) { - return evseStatus.connectors.get(connectorId) - } - } - return undefined - } - return connectors.get(connectorId) + return this.iterateConnectors().find(({ connectorId: id }) => id === connectorId) + ?.connectorStatus }, getEnergyActiveImportRegisterByConnectorId (connectorId: number, rounded = false): number { const connectorStatus = this.getConnectorStatus(connectorId) @@ -522,29 +492,15 @@ export function createMockChargingStation ( return this.getEnergyActiveImportRegisterByConnectorId(connectorId, rounded) }, getEvseIdByConnectorId (connectorId: number): number | undefined { - if (!useEvses) { - return undefined - } - for (const [evseId, evseStatus] of evses) { - if (evseStatus.connectors.has(connectorId)) { - return evseId - } - } - return undefined + return this.iterateConnectors().find(({ connectorId: id }) => id === connectorId)?.evseId }, getEvseIdByTransactionId (transactionId: number | string | undefined): number | undefined { if (transactionId == null) { return undefined - } else if (useEvses) { - for (const [evseId, evseStatus] of evses) { - for (const connectorStatus of evseStatus.connectors.values()) { - if (connectorStatus.transactionId === transactionId) { - return evseId - } - } - } } - return undefined + return this.iterateConnectors().find( + ({ connectorStatus }) => connectorStatus.transactionId === transactionId + )?.evseId }, getEvseStatus (evseId: number): EvseStatus | undefined { return evses.get(evseId) @@ -556,94 +512,33 @@ export function createMockChargingStation ( return false // Default to false in mock }, getNumberOfConnectors (): number { - if (useEvses) { - let numberOfConnectors = 0 - for (const [evseId, evseStatus] of evses) { - if (evseId > 0) { - numberOfConnectors += evseStatus.connectors.size - } - } - return numberOfConnectors - } - return connectors.has(0) ? connectors.size - 1 : connectors.size + return this.iterateConnectors(true).reduce(count => count + 1, 0) }, getNumberOfEvses (): number { return evses.has(0) ? evses.size - 1 : evses.size }, getNumberOfRunningTransactions (): number { - let numberOfRunningTransactions = 0 - if (useEvses) { - for (const [evseId, evseStatus] of evses) { - if (evseId === 0) { - continue - } - for (const connectorStatus of evseStatus.connectors.values()) { - if (connectorStatus.transactionStarted === true) { - ++numberOfRunningTransactions - } - } - } - } else { - for (const connectorId of connectors.keys()) { - if ( - connectorId > 0 && - this.getConnectorStatus(connectorId)?.transactionStarted === true - ) { - ++numberOfRunningTransactions - } - } - } - return numberOfRunningTransactions + return this.iterateConnectors(true).reduce( + (count, { connectorStatus }) => + connectorStatus.transactionStarted === true ? count + 1 : count, + 0 + ) }, - getReservationBy (filterKey: string, value: unknown): Record | undefined { - if (useEvses) { - for (const evseStatus of evses.values()) { - for (const connectorStatus of evseStatus.connectors.values()) { - if (connectorStatus.reservation?.[filterKey] === value) { - return connectorStatus.reservation - } - } - } - } else { - for (const connectorStatus of connectors.values()) { - if (connectorStatus.reservation?.[filterKey] === value) { - return connectorStatus.reservation - } - } - } - return undefined + getReservationBy (filterKey: ReservationKey, value: number | string): Reservation | undefined { + return this.iterateConnectors().find( + ({ connectorStatus }) => connectorStatus.reservation?.[filterKey] === value + )?.connectorStatus.reservation }, getTransactionIdTag (transactionId: number): string | undefined { - if (useEvses) { - for (const evseStatus of evses.values()) { - for (const connectorStatus of evseStatus.connectors.values()) { - if (connectorStatus.transactionId === transactionId) { - return connectorStatus.transactionIdTag - } - } - } - } else { - for (const connectorId of connectors.keys()) { - if (this.getConnectorStatus(connectorId)?.transactionId === transactionId) { - return this.getConnectorStatus(connectorId)?.transactionIdTag - } - } - } - return undefined + return this.iterateConnectors().find( + ({ connectorStatus }) => connectorStatus.transactionId === transactionId + )?.connectorStatus.transactionIdTag }, getWebSocketPingInterval (): number { return websocketPingInterval }, hasConnector (connectorId: number): boolean { - if (useEvses) { - for (const evseStatus of evses.values()) { - if (evseStatus.connectors.has(connectorId)) { - return true - } - } - return false - } - return connectors.has(connectorId) + return this.iterateConnectors().some(({ connectorId: id }) => id === connectorId) }, hasEvse (evseId: number): boolean { @@ -957,12 +852,9 @@ export function resetChargingStationState (station: ChargingStation): void { resetConnectorStatus(connectorStatus, connectorId === 0) } - // Reset EVSE connector statuses + // Reset EVSE availability for (const { evseStatus } of station.iterateEvses()) { evseStatus.availability = AvailabilityType.Operative - for (const connectorStatus of evseStatus.connectors.values()) { - resetConnectorStatus(connectorStatus, false) - } } // Clear requests diff --git a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-Reset.test.ts b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-Reset.test.ts index 0bfd679c..20d918fb 100644 --- a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-Reset.test.ts +++ b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-Reset.test.ts @@ -7,7 +7,6 @@ import assert from 'node:assert/strict' import { afterEach, beforeEach, describe, it, mock } from 'node:test' import type { - EvseStatus, OCPP20ResetRequest, OCPP20ResetResponse, Reservation, @@ -436,13 +435,11 @@ await describe('B11 & B12 - Reset', async () => { } // Assign reservation to first connector - const evse: EvseStatus | undefined = station.getEvseStatus(1) - if (evse) { - const connectorId = [...evse.connectors.keys()][0] - const connectorStatus = evse.connectors.get(connectorId) - if (connectorStatus) { - connectorStatus.reservation = mockReservation as Reservation - } + const connectorId = station.getConnectorIdByEvseId(1) + const connectorStatus = + connectorId != null ? station.getConnectorStatus(connectorId) : undefined + if (connectorStatus != null) { + connectorStatus.reservation = mockReservation as Reservation } const resetRequest: OCPP20ResetRequest = { @@ -469,13 +466,11 @@ await describe('B11 & B12 - Reset', async () => { } // Assign expired reservation to first connector - const evse: EvseStatus | undefined = station.getEvseStatus(1) - if (evse) { - const connectorId = [...evse.connectors.keys()][0] - const connectorStatus = evse.connectors.get(connectorId) - if (connectorStatus) { - connectorStatus.reservation = mockReservation as Reservation - } + const connectorId = station.getConnectorIdByEvseId(1) + const connectorStatus = + connectorId != null ? station.getConnectorStatus(connectorId) : undefined + if (connectorStatus != null) { + connectorStatus.reservation = mockReservation as Reservation } const resetRequest: OCPP20ResetRequest = { @@ -550,13 +545,11 @@ await describe('B11 & B12 - Reset', async () => { id: 1, idTag: 'test-tag', } - const evse: EvseStatus | undefined = station.getEvseStatus(1) - if (evse) { - const connectorId = [...evse.connectors.keys()][0] - const connectorStatus = evse.connectors.get(connectorId) - if (connectorStatus) { - connectorStatus.reservation = mockReservation as Reservation - } + const connectorId = station.getConnectorIdByEvseId(1) + const connectorStatus = + connectorId != null ? station.getConnectorStatus(connectorId) : undefined + if (connectorStatus != null) { + connectorStatus.reservation = mockReservation as Reservation } const resetRequest: OCPP20ResetRequest = { diff --git a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-UnlockConnector.test.ts b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-UnlockConnector.test.ts index 8a5f851e..f4d3b3e9 100644 --- a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-UnlockConnector.test.ts +++ b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-UnlockConnector.test.ts @@ -137,8 +137,7 @@ await describe('F05 - UnlockConnector', async () => { await it('should return OngoingAuthorizedTransaction when specified connector has active transaction', async () => { const { mockStation } = createUnlockConnectorStation() - const evseStatus = mockStation.getEvseStatus(1) - const connectorStatus = evseStatus?.connectors.get(1) + const connectorStatus = mockStation.getConnectorStatus(1) if (connectorStatus != null) { connectorStatus.transactionId = 'tx-001' } @@ -175,8 +174,7 @@ await describe('F05 - UnlockConnector', async () => { }) const multiConnectorStation = station as MockChargingStation - const evseStatus = multiConnectorStation.getEvseStatus(1) - const connector2 = evseStatus?.connectors.get(2) + const connector2 = multiConnectorStation.getConnectorStatus(2) if (connector2 != null) { connector2.transactionId = 'tx-other' } diff --git a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-UpdateFirmware.test.ts b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-UpdateFirmware.test.ts index f3f83a5b..239dedce 100644 --- a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-UpdateFirmware.test.ts +++ b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-UpdateFirmware.test.ts @@ -174,12 +174,11 @@ await describe('L01/L02 - UpdateFirmware', async () => { }) // Set an active transaction on EVSE 1's connector - const evse1 = evseStation.getEvseStatus(1) - if (evse1 != null) { - const firstConnector = evse1.connectors.values().next().value - if (firstConnector != null) { - firstConnector.transactionId = 'tx-active-001' - } + const evse1ConnectorId = evseStation.getConnectorIdByEvseId(1) + const firstConnector = + evse1ConnectorId != null ? evseStation.getConnectorStatus(evse1ConnectorId) : undefined + if (firstConnector != null) { + firstConnector.transactionId = 'tx-active-001' } const request: OCPP20UpdateFirmwareRequest = { @@ -561,10 +560,16 @@ await describe('L01/L02 - UpdateFirmware', async () => { ]) // Set active transactions on EVSE 1 and EVSE 2 - const evse1 = trackingStation.getEvseStatus(1) - const evse2 = trackingStation.getEvseStatus(2) - const evse1Connector = evse1?.connectors.values().next().value - const evse2Connector = evse2?.connectors.values().next().value + const evse1ConnectorId = trackingStation.getConnectorIdByEvseId(1) + const evse2ConnectorId = trackingStation.getConnectorIdByEvseId(2) + const evse1Connector = + evse1ConnectorId != null + ? trackingStation.getConnectorStatus(evse1ConnectorId) + : undefined + const evse2Connector = + evse2ConnectorId != null + ? trackingStation.getConnectorStatus(evse2ConnectorId) + : undefined if (evse1Connector != null) evse1Connector.transactionId = 'tx-fw-001' if (evse2Connector != null) evse2Connector.transactionId = 'tx-fw-002' diff --git a/tests/charging-station/ocpp/2.0/OCPP20TestUtils.ts b/tests/charging-station/ocpp/2.0/OCPP20TestUtils.ts index 3ceed9d9..09e91504 100644 --- a/tests/charging-station/ocpp/2.0/OCPP20TestUtils.ts +++ b/tests/charging-station/ocpp/2.0/OCPP20TestUtils.ts @@ -224,32 +224,16 @@ export function createTestableOCPP20RequestService ( * @param chargingStation Charging station instance whose connector state should be reset. */ export function resetConnectorTransactionState (chargingStation: ChargingStation): void { - if (chargingStation.hasEvses) { - for (const { evseStatus } of chargingStation.iterateEvses()) { - for (const connectorStatus of evseStatus.connectors.values()) { - connectorStatus.transactionStarted = false - connectorStatus.transactionId = undefined - connectorStatus.transactionIdTag = undefined - connectorStatus.transactionGroupIdToken = undefined - connectorStatus.transactionStart = undefined - connectorStatus.transactionEnergyActiveImportRegisterValue = 0 - connectorStatus.remoteStartId = undefined - connectorStatus.status = ConnectorStatusEnum.Available - connectorStatus.chargingProfiles = [] - } - } - } else { - for (const { connectorStatus } of chargingStation.iterateConnectors(true)) { - connectorStatus.transactionStarted = false - connectorStatus.transactionId = undefined - connectorStatus.transactionIdTag = undefined - connectorStatus.transactionGroupIdToken = undefined - connectorStatus.transactionStart = undefined - connectorStatus.transactionEnergyActiveImportRegisterValue = 0 - connectorStatus.remoteStartId = undefined - connectorStatus.status = ConnectorStatusEnum.Available - connectorStatus.chargingProfiles = [] - } + for (const { connectorStatus } of chargingStation.iterateConnectors(true)) { + connectorStatus.transactionStarted = false + connectorStatus.transactionId = undefined + connectorStatus.transactionIdTag = undefined + connectorStatus.transactionGroupIdToken = undefined + connectorStatus.transactionStart = undefined + connectorStatus.transactionEnergyActiveImportRegisterValue = 0 + connectorStatus.remoteStartId = undefined + connectorStatus.status = ConnectorStatusEnum.Available + connectorStatus.chargingProfiles = [] } } -- 2.43.0