db-vendo-client/test/e2e/lib/util.js
Jannis R 339d64e901
convert to ESM 💥📝
2022-11-18 19:20:03 +01:00

56 lines
1.5 KiB
JavaScript

import isRoughlyEqual from 'is-roughly-equal'
import {ok, AssertionError} from 'assert'
import {DateTime} from 'luxon'
import * as a from 'assert'
import {createRequire} from 'module'
const hour = 60 * 60 * 1000
const day = 24 * hour
const week = 7 * day
// next Monday 10 am
const createWhen = (timezone, locale, tMock) => {
ok(Number.isInteger(tMock), 'tMock must be an integer')
const t = process.env.VCR_MODE && !process.env.VCR_OFF
? tMock
: Date.now()
return DateTime.fromMillis(t, {
zone: timezone,
locale,
}).startOf('week').plus({weeks: 1, hours: 10}).toJSDate()
}
const assertValidWhen = (actual, expected, name, delta = day + 6 * hour) => {
const ts = +new Date(actual)
a.ok(!Number.isNaN(ts), name + ' is not parsable by Date')
// the timestamps might be from long-distance trains
if (!isRoughlyEqual(delta, +expected, ts)) {
throw new AssertionError({
message: name + ' is out of range',
actual: ts,
expected: `${expected - delta} - ${+expected + delta}`,
operator: 'isRoughlyEqual',
})
}
}
// HTTP request mocking
if (process.env.VCR_MODE && !process.env.VCR_OFF) {
const require = createRequire(import.meta.url)
const replayer = require('replayer')
replayer.configure({
headerWhitelist: [
// excludes User-Agent & Connection
'Content-Type', 'Accept-Encoding', 'Accept',
],
includeHeaderValues: true,
touchHits: false,
})
replayer.fixtureDir(new URL('../fixtures', import.meta.url).pathname)
}
export {
hour, createWhen, assertValidWhen,
}