Spaces:
Running
Running
| const assert = require("node:assert/strict"); | |
| const fs = require("node:fs"); | |
| const test = require("node:test"); | |
| const vm = require("node:vm"); | |
| const source = fs.readFileSync( | |
| "web_demo/static/shared/measurement-session.js", | |
| "utf8", | |
| ); | |
| function loadHelper() { | |
| const data = new Map(); | |
| let idCounter = 0; | |
| const window = { | |
| crypto: { randomUUID: () => `00000000-0000-4000-8000-${String(++idCounter).padStart(12, "0")}` }, | |
| sessionStorage: { | |
| getItem: (key) => data.has(key) ? data.get(key) : null, | |
| setItem: (key, value) => data.set(key, value), | |
| }, | |
| }; | |
| vm.runInNewContext(source, { window, Date, JSON, Math, Number, String }); | |
| return window.MeasurementSession; | |
| } | |
| test("preserves returned state for an unchanged context", () => { | |
| const helper = loadHelper(); | |
| const context = { | |
| kol_email: "User@Example.com ", ring_model: "gen", mode: "multi", | |
| finger_index: "index", source: "photo", | |
| }; | |
| const first = helper.prepare(context); | |
| const state = { session_id: first.session_id, attempt_count: 1, shots: [] }; | |
| helper.accept(context, { session_state: state }); | |
| assert.deepEqual(helper.prepare(context).session_state, state); | |
| }); | |
| test("rotates the session when measurement context changes", () => { | |
| const helper = loadHelper(); | |
| const base = { | |
| kol_email: "user@example.com", ring_model: "gen", mode: "multi", | |
| finger_index: "index", source: "photo", | |
| }; | |
| const first = helper.prepare(base); | |
| const second = helper.prepare({ ...base, ring_model: "air" }); | |
| assert.notEqual(second.session_id, first.session_id); | |
| assert.equal(second.session_state, null); | |
| }); | |