Files
VoCat/web/test/automaticTaskProfiles.test.mjs
T

69 lines
2.1 KiB
JavaScript

import assert from "node:assert/strict";
import { readFile } from "node:fs/promises";
import test from "node:test";
import ts from "typescript";
const source = await readFile(new URL("../src/lib/automaticTaskProfiles.ts", import.meta.url), "utf8");
const compiled = ts.transpileModule(source, {
compilerOptions: {
module: ts.ModuleKind.ES2022,
target: ts.ScriptTarget.ES2022,
},
});
const moduleURL = `data:text/javascript;base64,${Buffer.from(compiled.outputText).toString("base64")}`;
const {
buildAutomaticTaskProfileOptions,
createAutomaticTaskProfileRequestGuard,
selectAutomaticTaskProfileOption,
} = await import(moduleURL);
test("uses the current physical SIM when the device has no eSIM profiles", () => {
const iccid = "89441000400128014257";
assert.deepEqual(buildAutomaticTaskProfileOptions([], iccid, "Current SIM"), [
{
iccid,
aidHex: "",
label: `Current SIM · ${iccid}`,
},
]);
});
test("does not duplicate the current SIM when it is already in the eSIM inventory", () => {
const iccid = "89441000400128014257";
assert.deepEqual(
buildAutomaticTaskProfileOptions(
[{ aidHex: "a0000005591010ffffffff8900000100", profiles: [{ iccid, name: "Travel" }] }],
iccid,
"Current SIM",
),
[
{
iccid,
aidHex: "a0000005591010ffffffff8900000100",
label: `Travel · ${iccid}`,
},
],
);
});
test("does not replace a saved profile when a failed inventory only exposes the current SIM", () => {
const currentICCID = "89441000400128014257";
const savedICCID = "89104100000028106378";
const options = buildAutomaticTaskProfileOptions([], currentICCID, "Current SIM");
assert.equal(selectAutomaticTaskProfileOption(options, savedICCID), undefined);
});
test("accepts state updates only from the latest profile request", () => {
const guard = createAutomaticTaskProfileRequestGuard();
const first = guard.begin();
const second = guard.begin();
assert.equal(guard.isCurrent(first), false);
assert.equal(guard.isCurrent(second), true);
guard.invalidate();
assert.equal(guard.isCurrent(second), false);
});