"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); });