Files
factorio-clusterio/test/web_ui/mod_settings.js
T
BastiaanandClaude Opus 5.5 5d1e98dafd Hide unknown mod pack settings and allow removing them (#1179)
Settings stored in a mod pack that no setting prototype in the export
data defines are now listed in a collapsed "Unknown settings" panel
under each scope instead of under an "Unknown Fields" heading. Each one
has a remove link, and a revert link once removed, matching what
`clusterioctl mod-pack edit --remove-setting` already allows. They are
never removed automatically.

Without export data nothing is called unknown and stored settings are
listed as before, without a mod heading.

Fixes #773

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 00:18:32 +00:00

57 lines
2.3 KiB
JavaScript

import assert from "node:assert/strict";
import { modSettingFields } from "../../packages/web_ui/src/util/mod_settings.ts";
describe("web_ui/util/mod_settings", function() {
describe("modSettingFields()", function() {
const stored = new Map([
["kept", { value: true }],
["gone-number", { value: 2 }],
["gone-color", { value: { r: 1, g: 0, b: 0, a: 1 } }],
["gone-string", { value: "x" }],
]);
const prototypes = {
"bool-setting": {
"kept": { type: "bool-setting", name: "kept", mod: "b", setting_type: "startup", default_value: false },
"map": {
type: "bool-setting", name: "map", mod: "a", setting_type: "runtime-global", default_value: false,
},
},
"string-setting": {
"first": {
type: "string-setting", name: "first", mod: "a", setting_type: "startup",
default_value: "x", allowed_values: ["x", "y"],
},
},
"unrelated": { "gone-number": { type: "unrelated", name: "gone-number", setting_type: "startup" } },
};
it("should split stored settings no prototype defines into unknown", function() {
const { known, unknown } = modSettingFields(prototypes, "startup", stored);
assert.deepEqual(known.map(field => field.name), ["first", "kept"]);
assert.deepEqual(known[0].allowed_values, ["x", "y"]);
assert.deepEqual(
unknown.map(field => [field.name, field.type]),
[["gone-color", "color-setting"], ["gone-number", "double-setting"], ["gone-string", "string-setting"]],
);
});
it("should only use prototypes of the given scope", function() {
const kept = new Map([["kept", { value: true }]]);
const { known, unknown } = modSettingFields(prototypes, "runtime-global", kept);
assert.deepEqual(known.map(field => field.name), ["map"]);
assert.deepEqual(unknown.map(field => field.name), ["kept"]);
});
it("should not call settings unknown without export data", function() {
const { known, unknown } = modSettingFields(undefined, "startup", stored);
assert.deepEqual(known.map(field => field.name), [...stored.keys()]);
assert(known.every(field => field.mod === undefined));
assert.deepEqual(unknown, []);
});
it("should treat every stored setting as unknown if the export has no settings", function() {
const { known, unknown } = modSettingFields({}, "startup", stored);
assert.deepEqual(known, []);
assert.equal(unknown.length, stored.size);
});
});
});