完成50%
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
"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);
|
||||
});
|
||||
Reference in New Issue
Block a user