File size: 1,619 Bytes
9f6a8e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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);
});