]> Piment Noir Git Repositories - e-mobility-charging-stations-simulator.git/commitdiff
refactor(test): consolidate certificate constants and factory functions
authorJérôme Benoit <jerome.benoit@sap.com>
Sun, 1 Mar 2026 22:40:35 +0000 (23:40 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Sun, 1 Mar 2026 22:40:35 +0000 (23:40 +0100)
- Create OCPP20CertificateTestData.ts with shared certificate constants
- Add createMockCertificateHashData, createMockCertificateHashDataChain,
  createMockOCSPRequestData factory functions to OCPP20TestUtils.ts
- Migrate 5 test files to use consolidated imports
- Remove duplicate local certificate definitions and factory functions

tests/charging-station/ocpp/2.0/OCPP20CertificateManager.test.ts
tests/charging-station/ocpp/2.0/OCPP20CertificateTestData.ts [new file with mode: 0644]
tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-CertificateSigned.test.ts
tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-GetInstalledCertificateIds.test.ts
tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-InstallCertificate.test.ts
tests/charging-station/ocpp/2.0/OCPP20RequestService-ISO15118.test.ts
tests/charging-station/ocpp/2.0/OCPP20TestUtils.ts

index 483e16567958b78c850baff7e4d801ac1d6083ef..9b6fbc27a90c2b3d4034d3c390dfddecfafff9d9 100644 (file)
@@ -14,32 +14,22 @@ import {
   InstallCertificateUseEnumType,
 } from '../../../../src/types/index.js'
 import { standardCleanup } from '../../../helpers/TestLifecycleHelpers.js'
-
+import {
+  EMPTY_PEM_CERTIFICATE,
+  INVALID_PEM_WRONG_MARKERS,
+  VALID_PEM_CERTIFICATE_EXTENDED,
+} from './OCPP20CertificateTestData.js'
 const TEST_STATION_HASH_ID = 'test-station-hash-12345'
 const TEST_CERT_TYPE = InstallCertificateUseEnumType.CSMSRootCertificate
 
-const VALID_PEM_CERTIFICATE = `-----BEGIN CERTIFICATE-----
-MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiUMA0GCSqGSIb3Qq8teleNzMHjvLuHvVsY
-a5uYmO6K8pzuYmOvfLNNMC5leGFtcGxlLmNvbTAeFw0xNzAxMTIyMTI3NDBaFw0y
-NzAxMTAyMTI3NDBaMC4xLDAqBgNVBAMTI2V4YW1wbGUuY29tIFNlbGYgU2lnbmVk
-IENlcnRpZmljYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqGxm
-mO6K8pzuYmOvfLNNMC5leGFtcGxlLmNvbTAeFw0xNzAxMTIyMTI3NDBaFw0yNzAx
-MTAyMTI3NDBaMC4xLDAqBgNVBAMTI2V4YW1wbGUuY29tIFNlbGYgU2lnbmVkIENl
-cnRpZmljYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqGxmmO6K
-8pzuYmOvfLNNMBQLq2K8pzuY0BAQEFAAOCAQ8AMIIBCgKCAQEAqGxmmO6K8pzuYq
------END CERTIFICATE-----`
+// Use VALID_PEM_CERTIFICATE_EXTENDED as the main valid certificate for these tests
+const VALID_PEM_CERTIFICATE = VALID_PEM_CERTIFICATE_EXTENDED
 
+// Alias for consistency with existing test expectations
 const INVALID_PEM_NO_MARKERS = `
 MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiUMA0GCSqGSIb3Qq8teleNzMHjvLuHvVsY
 a5uYmO6K8pzuYmOvfLNNMC5leGFtcGxlLmNvbTAeFw0xNzAxMTIyMTI3NDBaFw0y
 `
-
-const INVALID_PEM_WRONG_MARKERS = `-----BEGIN PRIVATE KEY-----
-MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiUMA0GCSqGSIb3Qq8teleNzMHjvLuHvVsY
------END PRIVATE KEY-----`
-
-const EMPTY_PEM_CERTIFICATE = ''
-
 // eslint-disable-next-line @typescript-eslint/no-unused-vars -- kept for future assertions
 const _EXPECTED_HASH_DATA: CertificateHashDataType = {
   hashAlgorithm: HashAlgorithmEnumType.SHA256,
diff --git a/tests/charging-station/ocpp/2.0/OCPP20CertificateTestData.ts b/tests/charging-station/ocpp/2.0/OCPP20CertificateTestData.ts
new file mode 100644 (file)
index 0000000..7ebb92b
--- /dev/null
@@ -0,0 +1,98 @@
+/**
+ * @file Consolidated certificate test data for OCPP 2.0 tests
+ * @description Centralized PEM certificate constants used across certificate-related test files
+ */
+
+// ============================================================================
+// Valid Certificates
+// ============================================================================
+
+/**
+ * Valid PEM certificate (short format) for basic certificate tests.
+ * Used in InstallCertificate and CertificateSigned tests.
+ */
+export const VALID_PEM_CERTIFICATE = `-----BEGIN CERTIFICATE-----
+MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl
+c3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBAMM
+BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz
+p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR
+AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME
+GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
+SIb3DQEBCwUAA0EAYw7K5EKcJGj8TH7NpP3L3hRPZF8qU5QfT0zQBqBm4U5JtDnS
+nFUewM7PNhYJsWjJRpLdAL1kC6x8bW1kQ5FVUQ==
+-----END CERTIFICATE-----`
+
+/**
+ * Valid PEM certificate (extended format) for CertificateManager tests.
+ * This is a longer certificate used for more complex validation scenarios.
+ */
+export const VALID_PEM_CERTIFICATE_EXTENDED = `-----BEGIN CERTIFICATE-----
+MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiUMA0GCSqGSIb3Qq8teleNzMHjvLuHvVsY
+a5uYmO6K8pzuYmOvfLNNMC5leGFtcGxlLmNvbTAeFw0xNzAxMTIyMTI3NDBaFw0y
+NzAxMTAyMTI3NDBaMC4xLDAqBgNVBAMTI2V4YW1wbGUuY29tIFNlbGYgU2lnbmVk
+IENlcnRpZmljYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqGxm
+mO6K8pzuYmOvfLNNMC5leGFtcGxlLmNvbTAeFw0xNzAxMTIyMTI3NDBaFw0yNzAx
+MTAyMTI3NDBaMC4xLDAqBgNVBAMTI2V4YW1wbGUuY29tIFNlbGYgU2lnbmVkIENl
+cnRpZmljYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqGxmmO6K
+8pzuYmOvfLNNMBQLq2K8pzuY0BAQEFAAOCAQ8AMIIBCgKCAQEAqGxmmO6K8pzuYq
+-----END CERTIFICATE-----`
+
+/**
+ * Valid certificate chain with two certificates for chain validation tests.
+ */
+export const VALID_CERTIFICATE_CHAIN = `-----BEGIN CERTIFICATE-----
+MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl
+c3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBAMM
+BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz
+p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR
+AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME
+GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
+SIb3DQEBCwUAA0EAYw7K5EKcJGj8TH7NpP3L3hRPZF8qU5QfT0zQBqBm4U5JtDnS
+nFUewM7PNhYJsWjJRpLdAL1kC6x8bW1kQ5FVUQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIBkTCB+wIJAKHBfpvPA0GYMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl
+c3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBAMM
+BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz
+p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR
+AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME
+GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
+SIb3DQEBCwUAA0EAYw7K5EKcJGj8TH7NpP3L3hRPZF8qU5QfT0zQBqBm4U5JtDnS
+nFUewM7PNhYJsWjJRpLdAL1kC6x8bW1kQ5FVUQ==
+-----END CERTIFICATE-----`
+
+// ============================================================================
+// Invalid Certificates
+// ============================================================================
+
+/**
+ * Invalid PEM certificate missing BEGIN/END markers.
+ */
+export const INVALID_PEM_CERTIFICATE_MISSING_MARKERS = `MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBn
+Rlc3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBA
+MMBnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjx`
+
+/**
+ * Invalid PEM certificate with wrong markers (PRIVATE KEY instead of CERTIFICATE).
+ */
+export const INVALID_PEM_WRONG_MARKERS = `-----BEGIN PRIVATE KEY-----
+MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiUMA0GCSqGSIb3Qq8teleNzMHjvLuHvVsY
+-----END PRIVATE KEY-----`
+
+/**
+ * Expired PEM certificate (validity period: 2020-01-01 to 2021-01-01).
+ */
+export const EXPIRED_PEM_CERTIFICATE = `-----BEGIN CERTIFICATE-----
+MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl
+c3RDQTAeFw0yMDAxMDEwMDAwMDBaFw0yMTAxMDEwMDAwMDBaMBExDzANBgNVBAMM
+BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz
+p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR
+AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME
+GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
+SIb3DQEBCwUAA0EAexpired==
+-----END CERTIFICATE-----`
+
+/**
+ * Empty PEM certificate for edge case testing.
+ */
+export const EMPTY_PEM_CERTIFICATE = ''
index b9f94c39b0401f9c847dbe3bc078f2cc042415d3..4416d5b51d137e203e32ccadd0f0fb7062869ecd 100644 (file)
@@ -21,44 +21,13 @@ import { Constants } from '../../../../src/utils/index.js'
 import { standardCleanup } from '../../../helpers/TestLifecycleHelpers.js'
 import { TEST_CHARGING_STATION_BASE_NAME } from '../../ChargingStationTestConstants.js'
 import { createMockChargingStation } from '../../ChargingStationTestUtils.js'
+import {
+  INVALID_PEM_CERTIFICATE_MISSING_MARKERS,
+  VALID_CERTIFICATE_CHAIN,
+  VALID_PEM_CERTIFICATE,
+} from './OCPP20CertificateTestData.js'
 import { createMockCertificateManager } from './OCPP20TestUtils.js'
 
-const VALID_PEM_CERTIFICATE = `-----BEGIN CERTIFICATE-----
-MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl
-c3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBAMM
-BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz
-p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR
-AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME
-GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
-SIb3DQEBCwUAA0EAYw7K5EKcJGj8TH7NpP3L3hRPZF8qU5QfT0zQBqBm4U5JtDnS
-nFUewM7PNhYJsWjJRpLdAL1kC6x8bW1kQ5FVUQ==
------END CERTIFICATE-----`
-
-const VALID_CERTIFICATE_CHAIN = `-----BEGIN CERTIFICATE-----
-MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl
-c3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBAMM
-BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz
-p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR
-AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME
-GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
-SIb3DQEBCwUAA0EAYw7K5EKcJGj8TH7NpP3L3hRPZF8qU5QfT0zQBqBm4U5JtDnS
-nFUewM7PNhYJsWjJRpLdAL1kC6x8bW1kQ5FVUQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIBkTCB+wIJAKHBfpvPA0GYMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl
-c3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBAMM
-BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz
-p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR
-AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME
-GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
-SIb3DQEBCwUAA0EAYw7K5EKcJGj8TH7NpP3L3hRPZF8qU5QfT0zQBqBm4U5JtDnS
-nFUewM7PNhYJsWjJRpLdAL1kC6x8bW1kQ5FVUQ==
------END CERTIFICATE-----`
-
-const INVALID_PEM_CERTIFICATE_MISSING_MARKERS = `MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBn
-Rlc3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBA
-MMBnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjx`
-
 await describe('I04 - CertificateSigned', async () => {
   let station: ChargingStation
   let incomingRequestService: OCPP20IncomingRequestService
index 4bd9651fc791746b09a0a901aa601b099deb523e..8c8a819824ad33ae98a0c056529ff48101e6e08f 100644 (file)
@@ -13,10 +13,8 @@ import { createTestableIncomingRequestService } from '../../../../src/charging-s
 import { OCPP20IncomingRequestService } from '../../../../src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.js'
 import {
   type CertificateHashDataChainType,
-  type CertificateHashDataType,
   GetCertificateIdUseEnumType,
   GetInstalledCertificateStatusEnumType,
-  HashAlgorithmEnumType,
   type OCPP20GetInstalledCertificateIdsRequest,
   type OCPP20GetInstalledCertificateIdsResponse,
   OCPPVersion,
@@ -26,25 +24,11 @@ import { standardCleanup } from '../../../helpers/TestLifecycleHelpers.js'
 import { TEST_CHARGING_STATION_BASE_NAME } from '../../ChargingStationTestConstants.js'
 import { createMockChargingStation } from '../../ChargingStationTestUtils.js'
 import {
+  createMockCertificateHashDataChain,
   createMockCertificateManager,
   createStationWithCertificateManager,
 } from './OCPP20TestUtils.js'
 
-const createMockCertificateHashData = (serialNumber = '123456789'): CertificateHashDataType => ({
-  hashAlgorithm: HashAlgorithmEnumType.SHA256,
-  issuerKeyHash: 'abc123def456',
-  issuerNameHash: 'xyz789uvw012',
-  serialNumber,
-})
-
-const createMockCertificateHashDataChain = (
-  certificateType: GetCertificateIdUseEnumType,
-  serialNumber = '123456789'
-): CertificateHashDataChainType => ({
-  certificateHashData: createMockCertificateHashData(serialNumber),
-  certificateType,
-})
-
 await describe('I04 - GetInstalledCertificateIds', async () => {
   let station: ChargingStation
   let stationWithCertManager: ChargingStationWithCertificateManager
index 50c6da9b3733de838ff86659badcaf79e73ace03..ff1ae48beecf6ddc7b58762aa15b042409f4f858 100644 (file)
@@ -22,36 +22,16 @@ import { Constants } from '../../../../src/utils/index.js'
 import { standardCleanup } from '../../../helpers/TestLifecycleHelpers.js'
 import { TEST_CHARGING_STATION_BASE_NAME } from '../../ChargingStationTestConstants.js'
 import { createMockChargingStation } from '../../ChargingStationTestUtils.js'
+import {
+  EXPIRED_PEM_CERTIFICATE,
+  INVALID_PEM_CERTIFICATE_MISSING_MARKERS,
+  VALID_PEM_CERTIFICATE,
+} from './OCPP20CertificateTestData.js'
 import {
   createMockCertificateManager,
   createStationWithCertificateManager,
 } from './OCPP20TestUtils.js'
 
-const VALID_PEM_CERTIFICATE = `-----BEGIN CERTIFICATE-----
-MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl
-c3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBAMM
-BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz
-p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR
-AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME
-GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
-SIb3DQEBCwUAA0EAYw7K5EKcJGj8TH7NpP3L3hRPZF8qU5QfT0zQBqBm4U5JtDnS
-nFUewM7PNhYJsWjJRpLdAL1kC6x8bW1kQ5FVUQ==
------END CERTIFICATE-----`
-
-const INVALID_PEM_CERTIFICATE_MISSING_MARKERS = `MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBn
-Rlc3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBA
-MMBnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjx`
-
-const EXPIRED_PEM_CERTIFICATE = `-----BEGIN CERTIFICATE-----
-MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl
-c3RDQTAeFw0yMDAxMDEwMDAwMDBaFw0yMTAxMDEwMDAwMDBaMBExDzANBgNVBAMM
-BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz
-p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR
-AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME
-GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
-SIb3DQEBCwUAA0EAexpired==
------END CERTIFICATE-----`
-
 await describe('I03 - InstallCertificate', async () => {
   afterEach(() => {
     standardCleanup()
@@ -75,7 +55,6 @@ await describe('I03 - InstallCertificate', async () => {
       websocketPingInterval: Constants.DEFAULT_WEBSOCKET_PING_INTERVAL,
     })
     mockStation = initialStation
-    mockStation = initialStation
 
     // Use factory function to create station with certificate manager
     stationWithCertManager = createStationWithCertificateManager(
index 164fe0467bfba4e3af7ef7c8aa579fdbeeaafa7b..912d2a83c2c7c010489a7f80fed1dd7b39b4240e 100644 (file)
@@ -19,29 +19,19 @@ import {
   type OCPP20GetCertificateStatusResponse,
   OCPP20RequestCommand,
   OCPPVersion,
-  type OCSPRequestDataType,
   ReasonCodeEnumType,
 } from '../../../../src/types/index.js'
 import { Constants } from '../../../../src/utils/index.js'
 import { standardCleanup } from '../../../helpers/TestLifecycleHelpers.js'
 import { TEST_CHARGING_STATION_BASE_NAME } from '../../ChargingStationTestConstants.js'
 import { createMockChargingStation } from '../../ChargingStationTestUtils.js'
-
+import { createMockOCSPRequestData } from './OCPP20TestUtils.js'
 // Sample Base64 EXI request (mock - represents CertificateInstallationReq)
 const MOCK_EXI_REQUEST = 'SGVsbG8gV29ybGQgRVhJIFJlcXVlc3Q='
 const MOCK_EXI_RESPONSE = 'SGVsbG8gV29ybGQgRVhJIFJlc3BvbnNl'
 const MOCK_ISO15118_SCHEMA_VERSION = 'urn:iso:std:iso:15118:-20:AC'
 const MOCK_OCSP_RESULT = 'TW9jayBPQ1NQIFJlc3VsdCBCYXNlNjQ='
 
-// Mock OCSP request data for GetCertificateStatus tests
-const createMockOCSPRequestData = (): OCSPRequestDataType => ({
-  hashAlgorithm: HashAlgorithmEnumType.SHA256,
-  issuerKeyHash: 'abc123def456issuerkeyhash',
-  issuerNameHash: 'abc123def456issuernamehash',
-  responderURL: 'http://ocsp.example.com',
-  serialNumber: '1234567890',
-})
-
 await describe('OCPP20 ISO15118 Request Service', async () => {
   await describe('M02 - Get15118EVCertificate Request', async () => {
     let station: ReturnType<typeof createMockChargingStation>
index 8cec1db6fd865de17f8ad80dcd5909d208dcb74f..87a728535cc459d89493bf445ee581497fd43dae 100644 (file)
@@ -5,7 +5,14 @@ import type { ChargingStationWithCertificateManager } from '../../../../src/char
 import type { OCPP20RequestService } from '../../../../src/charging-station/ocpp/2.0/OCPP20RequestService.js'
 import type { ConfigurationKey } from '../../../../src/types/ChargingStationOcppConfiguration.js'
 import type { EmptyObject } from '../../../../src/types/EmptyObject.js'
-import type { JsonType, OCPP20RequestCommand } from '../../../../src/types/index.js'
+import type {
+  CertificateHashDataChainType,
+  CertificateHashDataType,
+  GetCertificateIdUseEnumType,
+  JsonType,
+  OCPP20RequestCommand,
+  OCSPRequestDataType,
+} from '../../../../src/types/index.js'
 import type {
   OCPP20IdTokenType,
   OCPP20TransactionContext,
@@ -13,6 +20,7 @@ import type {
 
 import {
   ConnectorStatusEnum,
+  HashAlgorithmEnumType,
   OCPP20RequiredVariableName,
   OCPPVersion,
 } from '../../../../src/types/index.js'
@@ -689,6 +697,40 @@ export interface MockCertificateManagerOptions {
 // Certificate Manager Mock Factory
 // ============================================================================
 
+/**
+ * Create mock certificate hash data for testing.
+ * @param serialNumber - Optional serial number (default: '123456789')
+ * @returns CertificateHashDataType object
+ */
+export function createMockCertificateHashData (serialNumber = '123456789'): CertificateHashDataType {
+  return {
+    hashAlgorithm: HashAlgorithmEnumType.SHA256,
+    issuerKeyHash: 'abc123def456',
+    issuerNameHash: 'xyz789uvw012',
+    serialNumber,
+  }
+}
+
+/**
+ * Create mock certificate hash data chain for testing.
+ * @param certificateType - The certificate type
+ * @param serialNumber - Optional serial number (default: '123456789')
+ * @returns CertificateHashDataChainType object
+ */
+export function createMockCertificateHashDataChain (
+  certificateType: GetCertificateIdUseEnumType,
+  serialNumber = '123456789'
+): CertificateHashDataChainType {
+  return {
+    certificateHashData: createMockCertificateHashData(serialNumber),
+    certificateType,
+  }
+}
+
+// ============================================================================
+// Certificate Test Data Factory Functions
+// ============================================================================
+
 /**
  * Create a mock certificate manager for OCPP 2.0 certificate operation testing.
  *
@@ -747,6 +789,20 @@ export function createMockCertificateManager (options: MockCertificateManagerOpt
   }
 }
 
+/**
+ * Create mock OCSP request data for GetCertificateStatus tests.
+ * @returns OCSPRequestDataType object with default test values
+ */
+export function createMockOCSPRequestData (): OCSPRequestDataType {
+  return {
+    hashAlgorithm: HashAlgorithmEnumType.SHA256,
+    issuerKeyHash: 'abc123def456issuerkeyhash',
+    issuerNameHash: 'abc123def456issuernamehash',
+    responderURL: 'http://ocsp.example.com',
+    serialNumber: '1234567890',
+  }
+}
+
 /**
  * Create a mock ChargingStation with certificate manager for testing.
  * This encapsulates the type casting pattern for ChargingStationWithCertificateManager.