// Brand kit and caption checks (offline, temp file). import { test } from "node:test"; import assert from "node:assert/strict"; import fs from "node:fs"; import os from "node:os"; import path from "node:path"; process.env.QUORLA_BRANDKIT_FILE = path.join(fs.mkdtempSync(path.join(os.tmpdir(), "quorla-bk-")), "bk.json"); const bk = await import("../src/brandkit.js"); const { PROJECT_ROOT } = await import("../src/env.js"); const client = fs.readdirSync(path.join(PROJECT_ROOT, "clients")).find((d) => !d.startsWith("_") && !/metatron/i.test(d) && fs.existsSync(path.join(PROJECT_ROOT, "clients", d, "client.json"))); test("brand kit: saves clean hashtag sets and lists; caption checks", { skip: !client && "no client folder" }, () => { const k = bk.save(client, { hashtagSets: [{ name: "Local", tags: "waterloo, #kitchener #KW bad-tag!" }], phrases: "Order online\n\nBook a table", avoid: "cheap\nbest in town" }); assert.deepEqual(k.hashtagSets[0].tags, ["#waterloo", "#kitchener", "#KW"]); assert.deepEqual(k.phrases, ["Order online", "Book a table"]); const w = bk.checkCaption(client, "The best in town, made by Quorla. Unlock flavour! " + "#a ".repeat(12), { platforms: ["threads"] }).map((x) => x.level + ":" + x.text.slice(0, 25)); assert.ok(w.some((x) => x.startsWith("bad:Mentions “quorla”"))); assert.ok(w.some((x) => x.startsWith("warn:Uses “best in town”"))); assert.ok(w.some((x) => x.startsWith("warn:“unlock”"))); assert.ok(w.some((x) => x.startsWith("warn:12 hashtags"))); assert.equal(bk.checkCaption(client, "x".repeat(600), { platforms: ["threads"] })[0].level, "bad"); assert.deepEqual(bk.checkCaption(client, "Fresh focaccia at 8. First 20 people get a free cortado.", { platforms: ["instagram"] }), []); });