mirror of https://github.com/nodejs/corepack.git
67 lines
1.7 KiB
JavaScript
67 lines
1.7 KiB
JavaScript
/* global expect, beforeEach, afterEach */
|
|
|
|
const crypto = require(`crypto`);
|
|
const fs = require(`fs`);
|
|
const nock = require(`nock`);
|
|
const path = require(`path`);
|
|
const v8 = require(`v8`);
|
|
|
|
const getNockFile = () => path.join(__dirname, `nock/${crypto.createHash(`md5`).update(expect.getState().currentTestName).digest(`hex`)}.dat`);
|
|
const ACCEPTED_HEADERS = new Set([`Content-Type`, `Content-Length`]);
|
|
|
|
function filterHeaders(headers) {
|
|
if (!Array.isArray(headers))
|
|
return headers;
|
|
|
|
const filtered = [];
|
|
for (let t = 0; t < headers.length; t += 2)
|
|
if (ACCEPTED_HEADERS.has(headers[t].toLowerCase()))
|
|
filtered.push(headers[t], headers[t + 1]);
|
|
|
|
return filtered;
|
|
}
|
|
|
|
switch (process.env.NOCK_ENV || ``) {
|
|
case `record`: {
|
|
nock.recorder.rec({
|
|
// eslint-disable-next-line @typescript-eslint/camelcase
|
|
dont_print: true,
|
|
// eslint-disable-next-line @typescript-eslint/camelcase
|
|
output_objects: true,
|
|
});
|
|
|
|
beforeEach(() => {
|
|
nock.recorder.clear();
|
|
});
|
|
|
|
afterEach(() => {
|
|
const nockCallObjects = nock.recorder.play();
|
|
for (const req of nockCallObjects)
|
|
if (typeof req !== `string`)
|
|
req.rawHeaders = filterHeaders(req.rawHeaders);
|
|
|
|
const serialized = v8.serialize(nockCallObjects);
|
|
fs.mkdirSync(path.dirname(getNockFile()), {recursive: true});
|
|
fs.writeFileSync(getNockFile(), serialized);
|
|
});
|
|
} break;
|
|
|
|
case `replay`: {
|
|
nock.disableNetConnect();
|
|
|
|
beforeEach(() => {
|
|
const data = fs.readFileSync(getNockFile());
|
|
const nockCallObjects = v8.deserialize(data);
|
|
nock.define(nockCallObjects);
|
|
});
|
|
} break;
|
|
|
|
case ``: {
|
|
// Nothing
|
|
} break;
|
|
|
|
default: {
|
|
throw new Error(`Invalid NOCK_ENV variable`);
|
|
}
|
|
}
|