fix: ensure configuration key visibility test does not alter configuration
[e-mobility-charging-stations-simulator.git] / src / charging-station / ocpp / 1.6 / OCPP16IncomingRequestService.ts
index 94f03ef8b26a4442c34a120212a8775b87866998..e2e8dcba7ed846a4de3ecf8a25bc84bca00e11f4 100644 (file)
@@ -105,8 +105,6 @@ import {
   isEmptyArray,
   isNotEmptyArray,
   isNotEmptyString,
-  isNullOrUndefined,
-  isUndefined,
   logger,
   sleep
 } from '../../../utils/index.js'
@@ -502,30 +500,23 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
     const { key } = commandPayload
     const configurationKey: OCPPConfigurationKey[] = []
     const unknownKey: string[] = []
-    if (isUndefined(key)) {
+    if (key == null) {
       // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-      for (const configuration of chargingStation.ocppConfiguration!.configurationKey!) {
-        if (isUndefined(configuration.visible)) {
-          configuration.visible = true
-        }
-        if (configuration.visible === false) {
+      for (const configKey of chargingStation.ocppConfiguration!.configurationKey!) {
+        if (!OCPP16ServiceUtils.isConfigurationKeyVisible(configKey)) {
           continue
         }
         configurationKey.push({
-          key: configuration.key,
-          readonly: configuration.readonly,
-          value: configuration.value
+          key: configKey.key,
+          readonly: configKey.readonly,
+          value: configKey.value
         })
       }
     } else if (isNotEmptyArray(key)) {
-      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-      for (const k of key!) {
+      for (const k of key) {
         const keyFound = getConfigurationKey(chargingStation, k, true)
         if (keyFound != null) {
-          if (isUndefined(keyFound.visible)) {
-            keyFound.visible = true
-          }
-          if (keyFound.visible === false) {
+          if (!OCPP16ServiceUtils.isConfigurationKeyVisible(keyFound)) {
             continue
           }
           configurationKey.push({
@@ -703,10 +694,8 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
     // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
     const connectorStatus = chargingStation.getConnectorStatus(connectorId)!
     if (
-      isEmptyArray(
-        connectorStatus?.chargingProfiles != null &&
-          isEmptyArray(chargingStation.getConnectorStatus(0)?.chargingProfiles)
-      )
+      isEmptyArray(connectorStatus?.chargingProfiles) &&
+      isEmptyArray(chargingStation.getConnectorStatus(0)?.chargingProfiles)
     ) {
       return OCPP16Constants.OCPP_RESPONSE_REJECTED
     }
@@ -724,7 +713,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
     let compositeSchedule: OCPP16ChargingSchedule | undefined
     for (const chargingProfile of chargingProfiles) {
       if (
-        isNullOrUndefined(chargingProfile.chargingSchedule?.startSchedule) &&
+        chargingProfile.chargingSchedule?.startSchedule == null &&
         connectorStatus?.transactionStarted === true
       ) {
         logger.debug(
@@ -736,7 +725,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
         chargingProfile.chargingSchedule.startSchedule = connectorStatus?.transactionStart
       }
       if (
-        !isNullOrUndefined(chargingProfile.chargingSchedule?.startSchedule) &&
+        chargingProfile.chargingSchedule?.startSchedule != null &&
         !isDate(chargingProfile.chargingSchedule?.startSchedule)
       ) {
         logger.warn(
@@ -750,8 +739,8 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
         )!
       }
       if (
-        !isNullOrUndefined(chargingProfile.chargingSchedule?.startSchedule) &&
-        isNullOrUndefined(chargingProfile.chargingSchedule?.duration)
+        chargingProfile.chargingSchedule?.startSchedule != null &&
+        chargingProfile.chargingSchedule?.duration == null
       ) {
         logger.debug(
           `${chargingStation.logPrefix()} ${moduleName}.handleRequestGetCompositeSchedule: Charging profile id ${
@@ -761,8 +750,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
         // OCPP specifies that if duration is not defined, it should be infinite
         chargingProfile.chargingSchedule.duration = differenceInSeconds(
           maxTime,
-          // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-          chargingProfile.chargingSchedule.startSchedule!
+          chargingProfile.chargingSchedule.startSchedule
         )
       }
       if (
@@ -826,7 +814,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
     }
     // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
     const connectorStatus = chargingStation.getConnectorStatus(connectorId!)
-    if (!isNullOrUndefined(connectorId) && isNotEmptyArray(connectorStatus?.chargingProfiles)) {
+    if (connectorId != null && isNotEmptyArray(connectorStatus?.chargingProfiles)) {
       // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
       connectorStatus!.chargingProfiles = []
       logger.debug(
@@ -834,7 +822,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
       )
       return OCPP16Constants.OCPP_CLEAR_CHARGING_PROFILE_RESPONSE_ACCEPTED
     }
-    if (isNullOrUndefined(connectorId)) {
+    if (connectorId == null) {
       let clearedCP = false
       if (chargingStation.hasEvses) {
         for (const evseStatus of chargingStation.evses.values()) {
@@ -1123,7 +1111,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
     }
     let { retrieveDate } = commandPayload
     if (
-      !isNullOrUndefined(chargingStation.stationInfo.firmwareStatus) &&
+      chargingStation.stationInfo.firmwareStatus != null &&
       chargingStation.stationInfo.firmwareStatus !== OCPP16FirmwareStatus.Installed
     ) {
       logger.warn(
@@ -1473,7 +1461,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
           return OCPP16Constants.OCPP_TRIGGER_MESSAGE_RESPONSE_ACCEPTED
         case OCPP16MessageTrigger.StatusNotification:
           setTimeout(() => {
-            if (!isNullOrUndefined(connectorId)) {
+            if (connectorId != null) {
               chargingStation.ocppRequestService
                 .requestHandler<OCPP16StatusNotificationRequest, OCPP16StatusNotificationResponse>(
                 chargingStation,
@@ -1481,8 +1469,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
                 {
                   connectorId,
                   errorCode: OCPP16ChargePointErrorCode.NO_ERROR,
-                  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-                  status: chargingStation.getConnectorStatus(connectorId!)?.status
+                  status: chargingStation.getConnectorStatus(connectorId)?.status
                 },
                 {
                   triggerMessage: true
@@ -1660,15 +1647,14 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
     try {
       const { reservationId } = commandPayload
       const reservation = chargingStation.getReservationBy('reservationId', reservationId)
-      if (isUndefined(reservation)) {
+      if (reservation == null) {
         logger.debug(
           `${chargingStation.logPrefix()} Reservation with id ${reservationId} does not exist on charging station`
         )
         return OCPP16Constants.OCPP_CANCEL_RESERVATION_RESPONSE_REJECTED
       }
       await chargingStation.removeReservation(
-        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-        reservation!,
+        reservation,
         ReservationTerminationReason.RESERVATION_CANCELED
       )
       return OCPP16Constants.OCPP_CANCEL_RESERVATION_RESPONSE_ACCEPTED