Something went wrong. Try again.
this post sux
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184import test from "node:test";import assert from "node:assert/strict";import { createRequire } from "node:module";import { readFileSync } from "node:fs";import { fileURLToPath } from "node:url";import { dirname, join } from "node:path";
const require = createRequire(import.meta.url);const SH = require("../shared.js");
const here = dirname(fileURLToPath(import.meta.url));const fixture = JSON.parse(readFileSync(join(here, "fixtures", "jev-response.json"), "utf8"));
function st(patch) { const s = SH.normalizeSettings({ enabled: true, apiKey: "test-key", combine: "and", ruleA: { enabled: true, word1: "Cats", word2: "dogs" }, ruleB: { enabled: false, word: "politics", above: true }, }); return Object.assign(s, patch || {});}
function cmp(probabilities) { return { compare: { type: "choice", probabilities } };}function single(noul) { return { single: { type: "noul", noul } };}
test("normalizeSettings cleans words and applies defaults", () => { const d = SH.defaults(); assert.equal(d.enabled, false); assert.equal(d.combine, "and"); assert.equal(d.ruleB.above, true); const s = SH.normalizeSettings({ ruleA: { word1: " Cats ", word2: "DOGS" } }); assert.equal(s.ruleA.word1, "cats"); assert.equal(s.ruleA.word2, "dogs");});
test("rule A needs two distinct, non-reserved words", () => { const good = st(); assert.equal(SH.ruleAValid(good), true); const same = st(); same.ruleA.word2 = "cats"; assert.equal(SH.ruleAValid(same), false); const reserved = st(); reserved.ruleA.word2 = "neither"; assert.equal(SH.ruleAValid(reserved), false); const empty = st(); empty.ruleA.word1 = ""; assert.equal(SH.ruleAValid(empty), false);});
test("rule A boundary: show at exactly 50%, hide below", () => { const s = st(); assert.equal(SH.decideFromAnswers(s, cmp({ cats: 0.5, dogs: 0.4, neither: 0.1 })), "show"); assert.equal(SH.decideFromAnswers(s, cmp({ cats: 0.49, dogs: 0.41, neither: 0.1 })), "hide"); assert.equal(SH.decideFromAnswers(s, cmp({ cats: 0.51, dogs: 0.39, neither: 0.1 })), "show");});
test("rule A with missing probability or malformed answers is null (fail open upstream)", () => { const s = st(); assert.equal(SH.decideFromAnswers(s, cmp({})), null); assert.equal(SH.decideFromAnswers(s, null), null); assert.equal(SH.decideFromAnswers(s, {}), null);});
test("rule B is strict about 50% in both directions", () => { const s = st({ combine: "and" }); s.ruleA.enabled = false; s.ruleB.enabled = true; s.ruleB.above = true; assert.equal(SH.decideFromAnswers(s, single(0.5)), "hide"); assert.equal(SH.decideFromAnswers(s, single(0.51)), "show"); assert.equal(SH.decideFromAnswers(s, single(0.49)), "hide"); s.ruleB.above = false; assert.equal(SH.decideFromAnswers(s, single(0.5)), "hide"); assert.equal(SH.decideFromAnswers(s, single(0.49)), "show"); assert.equal(SH.decideFromAnswers(s, single(0.51)), "hide");});
test("AND requires every enabled rule to pass; OR needs one", () => { const andS = st(); // ruleA on, ruleB on andS.ruleB.enabled = true; const passingA = cmp({ cats: 0.9, dogs: 0.05, neither: 0.05 }); const failingB = single(0.2); // above=true → fail assert.equal(SH.decideFromAnswers(andS, Object.assign({}, passingA, failingB)), "hide"); andS.combine = "or"; assert.equal(SH.decideFromAnswers(andS, Object.assign({}, passingA, failingB)), "show");});
test("isActive reflects master switch and rule validity", () => { assert.equal(SH.isActive(st()), true); const off = st({ enabled: false }); assert.equal(SH.isActive(off), false); const invalid = st(); invalid.ruleA.enabled = true; invalid.ruleA.word2 = ""; assert.equal(SH.isActive(invalid), false); // ruleA invalid, ruleB off invalid.ruleB.enabled = true; assert.equal(SH.isActive(invalid), true); // ruleB carries it});
test("cacheKey changes when rule B direction flips (above vs below)", () => { const s = st(); s.ruleA.enabled = false; s.ruleB.enabled = true; s.ruleB.above = true; const above = SH.cacheKey(s, "hello", ""); s.ruleB.above = false; const below = SH.cacheKey(s, "hello", ""); assert.notEqual(above, below);});
test("cacheKey is deterministic, config-sensitive, and id-independent", () => { const s = st(); const k1 = SH.cacheKey(s, "hello", ""); const k2 = SH.cacheKey(s, "hello", ""); assert.equal(k1, k2); assert.notEqual(SH.cacheKey(s, "hello", ""), SH.cacheKey(s, "hello2", "")); const changed = st(); changed.ruleA.word2 = "birds"; assert.notEqual(k1, SH.cacheKey(changed, "hello", "")); const or = st({ combine: "or" }); assert.notEqual(k1, SH.cacheKey(or, "hello", "")); // repost with identical text/alt shares a key (no id input at all) assert.equal(k1, SH.cacheKey(s, "hello", ""));});
test("buildQuestions includes only enabled rules with skill-shaped payloads", () => { const s = st(); let q = SH.buildQuestions(s); assert.deepEqual(Object.keys(q).sort(), ["compare"]); assert.equal(q.compare.type, "choice"); assert.deepEqual(Object.keys(q.compare.criteria).sort(), ["cats", "dogs", "neither"]); assert.match(q.compare.instructions, /`post`/);
const b = st(); b.ruleA.enabled = false; b.ruleB.enabled = true; q = SH.buildQuestions(b); assert.deepEqual(Object.keys(q), ["single"]); assert.equal(q.single.type, "noul"); assert.ok(q.single.criteria.true && q.single.criteria.false);});
test("buildRequest caps text and targets jev-latest", () => { const s = st(); const req = SH.buildRequest(s, { text: "a".repeat(SH.TEXT_CAP * 2), alt: "" }); assert.equal(req.model, "jev-latest"); assert.equal(req.state.post.text.length, SH.TEXT_CAP); assert.equal(req.questions.compare.type, "choice");});
test("isJudgeable treats blank text+alt as nothing to judge", () => { assert.equal(SH.isJudgeable({ text: " ", alt: "" }), false); assert.equal(SH.isJudgeable({ text: "", alt: "a cat" }), true); assert.equal(SH.isJudgeable({ text: "hi", alt: "" }), true);});
test("answerDetails extracts the scores code acts on", () => { const s = st(); assert.deepEqual(SH.answerDetails(s, fixture.answers), { p: 0.72 }); const b = st(); b.ruleA.enabled = false; b.ruleB.enabled = true; assert.deepEqual(SH.answerDetails(b, fixture.answers), { n: 0.81 }); assert.deepEqual(SH.answerDetails(b, null), {});});
test("fixture response decides correctly for both rules", () => { const s = st(); // ruleA only assert.equal(SH.decideFromAnswers(s, fixture.answers), "show"); // cats 0.72 const b = st(); b.ruleA.enabled = false; b.ruleB.enabled = true; b.ruleB.above = true; assert.equal(SH.decideFromAnswers(b, fixture.answers), "show"); // noul 0.81 b.ruleB.above = false; assert.equal(SH.decideFromAnswers(b, fixture.answers), "hide");});