84 lines
3.4 KiB
JavaScript
84 lines
3.4 KiB
JavaScript
"use strict";
|
|
|
|
const assert = require("assert");
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
const loadMockModule = async () => {
|
|
const source = fs.readFileSync(path.join(__dirname, "../data/mock.js"), "utf8");
|
|
const contractSource = fs.readFileSync(
|
|
path.join(__dirname, "../utils/genealogy-contracts.js"),
|
|
"utf8",
|
|
);
|
|
const contractUrl = `data:text/javascript;base64,${Buffer.from(contractSource).toString("base64")}`;
|
|
return import(`data:text/javascript;base64,${Buffer.from(source.replace("../utils/genealogy-contracts.js", contractUrl)).toString("base64")}`);
|
|
};
|
|
|
|
const assertScopedOwner = ({ list, find, idField, ids, nestedField = "" }) => {
|
|
assert.deepStrictEqual(list("1001").map((item) => item[idField]), ids);
|
|
assert.deepStrictEqual(list("1002"), []);
|
|
assert.strictEqual(find("1002", ids[0]), null);
|
|
assert.strictEqual(find("1001", "unknown"), null);
|
|
assert.strictEqual(find("", ids[0]), null);
|
|
assert.strictEqual(find("1001", ""), null);
|
|
|
|
const listed = list("1001");
|
|
listed[0].__mutated = true;
|
|
assert.strictEqual(find("1001", ids[0]).__mutated, undefined);
|
|
if (nestedField) {
|
|
listed[0][nestedField][0].__mutated = true;
|
|
assert.strictEqual(find("1001", ids[0])[nestedField][0].__mutated, undefined);
|
|
}
|
|
for (const item of list("1001")) {
|
|
assert.strictEqual(typeof item[idField], "string");
|
|
assert.strictEqual(item.genealogyId, "1001");
|
|
}
|
|
};
|
|
|
|
(async () => {
|
|
const fixtures = await loadMockModule();
|
|
const contracts = [
|
|
["listRelativeRecordFixtures", "findRelativeRecordFixture", "relativeId", ["301", "302"]],
|
|
["listCeremonyFixtures", "findCeremonyFixture", "ceremonyId", ["501", "502", "503"], "invitees"],
|
|
["listGrowthRecordFixtures", "findGrowthRecordFixture", "recordId", ["701", "702"]],
|
|
["listMemoFixtures", "findMemoFixture", "memoId", ["801", "802"]],
|
|
["listMeritRecordFixtures", "findMeritRecordFixture", "meritId", ["901", "902"]],
|
|
];
|
|
for (const [listName, findName, idField, ids, nestedField] of contracts) {
|
|
assert.strictEqual(typeof fixtures[listName], "function", `${listName} missing`);
|
|
assert.strictEqual(typeof fixtures[findName], "function", `${findName} missing`);
|
|
assertScopedOwner({
|
|
list: fixtures[listName],
|
|
find: fixtures[findName],
|
|
idField,
|
|
ids,
|
|
nestedField,
|
|
});
|
|
}
|
|
|
|
const personGrowth = fixtures.listGrowthRecordFixtures("1001", "104");
|
|
assert(personGrowth.length > 0);
|
|
assert(personGrowth.every((record) => record.lineagePersonId === "104"));
|
|
assert.deepStrictEqual(fixtures.listGrowthRecordFixtures("1001", "999"), []);
|
|
|
|
const memberOptions = fixtures.listTreeMemberFixtures("1001");
|
|
const memberAppUserIds = new Set(memberOptions.map((member) => member.appUserId));
|
|
assert.strictEqual(memberAppUserIds.size, memberOptions.length);
|
|
for (const ceremony of fixtures.listCeremonyFixtures("1001")) {
|
|
for (const invitee of ceremony.invitees) {
|
|
assert.deepStrictEqual(
|
|
Object.keys(invitee).sort(),
|
|
["inviteStatus", "inviteeUserId"],
|
|
"ceremony invite fixture must retain only live invitation fields",
|
|
);
|
|
assert(memberAppUserIds.has(invitee.inviteeUserId));
|
|
assert.strictEqual(typeof invitee.inviteStatus, "string");
|
|
}
|
|
}
|
|
|
|
process.stdout.write("RECORDS-FIXTURE-RUNTIME-SMOKE PASS\n");
|
|
})().catch((error) => {
|
|
process.stderr.write(`${error.stack || error.message}\n`);
|
|
process.exit(1);
|
|
});
|