const test = require("node:test");
const assert = require("node:assert/strict");
const logic = require("../static/card_form_logic.js");
test("remote images require absolute HTTP or HTTPS URLs", function()
{
assert.equal(logic.validRemoteImageUrl("https://example.test/card.png"),
true);
assert.equal(logic.validRemoteImageUrl("http://example.test/card.png"),
true);
assert.equal(logic.validRemoteImageUrl("javascript:alert(1)"), false);
assert.equal(logic.validRemoteImageUrl("/card.png"), false);
});
test("thumbnail decisions use actions and resulting finish", function()
{
assert.equal(logic.foilThumbnailRequired({
mode: "edit",
front_action: "keep",
foil_action: "keep",
has_current_foil: true,
has_replacement_foil: false,
}), false);
assert.equal(logic.foilThumbnailRequired({
mode: "edit",
front_action: "replace",
foil_action: "keep",
has_current_foil: true,
has_replacement_foil: false,
}), true);
assert.equal(logic.foilThumbnailRequired({
mode: "edit",
front_action: "keep",
foil_action: "remove",
has_current_foil: true,
has_replacement_foil: false,
}), false);
});
test("source input state follows mode and replacements", function()
{
assert.deepEqual(logic.sourceInputState({
mode: "create",
source_mode: "files",
front_action: "replace",
foil_action: "replace",
}), {
front_file_enabled: true,
foil_file_enabled: true,
front_url_enabled: false,
foil_url_enabled: false,
front_required: true,
foil_required: false,
});
assert.deepEqual(logic.sourceInputState({
mode: "edit",
source_mode: "urls",
front_action: "keep",
foil_action: "replace",
}), {
front_file_enabled: false,
foil_file_enabled: false,
front_url_enabled: false,
foil_url_enabled: true,
front_required: false,
foil_required: true,
});
});
test("game selection enables only matching controls and series", function()
{
assert.equal(logic.gameControlEnabled("gh", "gh"), true);
assert.equal(logic.gameControlEnabled("gh", "other"), false);
assert.equal(logic.gameControlEnabled("", "gh"), false);
assert.equal(logic.seriesChoiceEnabled("gh", "gh"), true);
assert.equal(logic.seriesChoiceEnabled("gh", "other"), false);
assert.equal(logic.seriesChoiceEnabled("", ""), false);
});