78 lines
2.1 KiB
JavaScript
78 lines
2.1 KiB
JavaScript
import fs from "fs";
|
|
import path from "path";
|
|
import { describe, it, expect } from "vitest";
|
|
import { TotalsServerSide as TotalsServerSideCA } from "../job-totals"; // Canadian version (imex)
|
|
import { TotalsServerSide as TotalsServerSideUS } from "../job-totals-USA";
|
|
import { isFunction } from "lodash"; // US version (rome)
|
|
|
|
/**
|
|
* This function is used to replace the values in the object with their toObject() representation.
|
|
* @param key
|
|
* @param value
|
|
* @returns {*}
|
|
*/
|
|
const dineroReplacer = (key, value) => {
|
|
if (isFunction(value)) {
|
|
return value.toObject();
|
|
}
|
|
return value;
|
|
};
|
|
|
|
/**
|
|
* Normalizes the output of the TotalsServerSide function by converting
|
|
* @param obj
|
|
* @returns {any}
|
|
*/
|
|
const normalizeOutput = (obj) => {
|
|
return JSON.parse(JSON.stringify(obj, dineroReplacer));
|
|
};
|
|
|
|
/**
|
|
* This test suite is designed to validate the functionality of the TotalsServerSide function
|
|
*/
|
|
describe("TotalsServerSide fixture tests", () => {
|
|
const fixturesDir = path.join(__dirname, "fixtures", "job-totals");
|
|
|
|
const fixtureFiles = fs.readdirSync(fixturesDir).filter((f) => f.endsWith(".json"));
|
|
|
|
if (fixtureFiles.length === 0) {
|
|
it.skip("skips when no job total fixtures are present", () => {});
|
|
return;
|
|
}
|
|
|
|
const dummyClient = {
|
|
request: async () => {
|
|
return {};
|
|
}
|
|
};
|
|
|
|
const dummyRes = {
|
|
status: () => ({ send: () => {} })
|
|
};
|
|
|
|
fixtureFiles.forEach((file) => {
|
|
it(`should produce matching output for fixture file ${file}`, async () => {
|
|
const fixturePath = path.join(fixturesDir, file);
|
|
const fixtureData = JSON.parse(fs.readFileSync(fixturePath, "utf8"));
|
|
|
|
const { environment, input, output: expectedOutput } = fixtureData;
|
|
|
|
const req = {
|
|
body: {
|
|
job: input,
|
|
client: dummyClient
|
|
},
|
|
user: {}
|
|
};
|
|
|
|
const computedOutput =
|
|
environment === "us" ? await TotalsServerSideUS(req, dummyRes) : await TotalsServerSideCA(req, dummyRes);
|
|
|
|
const normalizedComputed = normalizeOutput(computedOutput);
|
|
const normalizedExpected = normalizeOutput(expectedOutput);
|
|
|
|
expect(normalizedComputed).toEqual(normalizedExpected);
|
|
});
|
|
});
|
|
});
|