Skip to content

Commit 8f556af

Browse files
committed
test: add test for date parsing
1 parent e351dac commit 8f556af

File tree

2 files changed

+24
-8
lines changed

2 files changed

+24
-8
lines changed

src/certificate-expiration.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,13 @@ function getCertificateExpirationDate(cert: X509Certificate): Date {
2727
return cert.validToDate
2828
}
2929

30-
// validTo is a nonstandard format: %s %2d %02d:%02d:%02d %d%s GMT
31-
// https://github.com/nodejs/node/issues/52931
32-
const [month, day, time, year] = cert.validTo
33-
.split(' ')
34-
.filter((part) => !!part)
30+
return parseNonStandardDateString(cert.validTo)
31+
}
32+
33+
// validTo is a nonstandard format: %s %2d %02d:%02d:%02d %d%s GMT
34+
// https://github.com/nodejs/node/issues/52931
35+
export function parseNonStandardDateString(str: string): Date {
36+
const [month, day, time, year] = str.split(' ').filter((part) => !!part)
3537
// convert string month to number
3638
const monthIndex = MONTHS.indexOf(month) + 1
3739
return new Date(

test/test.spec.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import { beforeEach, describe, test, expect, vi, Mock } from 'vitest'
22
import { X509Certificate } from 'node:crypto'
33
import { createCertificate } from '../src/certificate'
4-
import { isCertificateExpired } from '../src/certificate-expiration'
4+
import {
5+
isCertificateExpired,
6+
parseNonStandardDateString,
7+
} from '../src/certificate-expiration'
58

69
test('create certificate', () => {
710
const content = createCertificate()
@@ -31,7 +34,7 @@ describe('isCertificateExpired', () => {
3134
expect(isExpired).toBe(false)
3235
})
3336

34-
test('returns true', () => {
37+
test('returns true', () => {
3538
validToDateMock.mockReturnValue(new Date(Date.now() - 10000))
3639

3740
const content = createCertificate()
@@ -49,7 +52,7 @@ describe('isCertificateExpired', () => {
4952
const isExpired = isCertificateExpired(content)
5053
expect(isExpired).toBe(false)
5154
})
52-
55+
5356
test('returns true', () => {
5457
validToDateMock.mockReturnValue(undefined)
5558
validToMock.mockReturnValue('Jan 22 08:20:44 2022 GMT')
@@ -60,3 +63,14 @@ describe('isCertificateExpired', () => {
6063
})
6164
})
6265
})
66+
67+
test('parseNonStandardDateString', () => {
68+
const content = createCertificate()
69+
const cert = new X509Certificate(content)
70+
const date = parseNonStandardDateString(cert.validTo)
71+
expect(date).toBeInstanceOf(Date)
72+
expect(date.getTime()).toBeGreaterThan(0)
73+
if (cert.validToDate) {
74+
expect(date.getTime()).toBe(cert.validToDate.getTime())
75+
}
76+
})

0 commit comments

Comments
 (0)