Files
factorio-clusterio/test/messages/host.test.js
T
Hornwitser 5dcaca4d0b Migrate to ECMAScript Modules
Migrate the usage of CommonJS specific code and imports to ESM.  Roughly
summarised this:
- Changes all require() calls to import statement or expressions.
- Changes usage of module.exports to export statements.
- Replaces require.resolve with import.meta.resolve.
- Replaces conditional imports with conditional subpath imports.
- Replaces module === require.main with import.meta.main.
- Adds the full filename with extention to all relative imports.
- Changes all usage of __dirname and __filename to their import.meta
  equivalents.
- Sets "type": "module" in package.json files.
- Removes usage of "use strict".
- Adds .ts an an alias of .js for the webpack build.

Due to differences in how require and import resolves files the plugin
entrypoints will have to include the filename and extension after this
migration in order to work.
2026-09-11 22:43:57 +02:00

170 lines
5.9 KiB
JavaScript

import assert from "node:assert/strict";
import * as lib from "@clusterio/lib";
import { Host } from "@clusterio/host";
import { testMatrix, testRoundTripJsonSerialisable } from "../common.js";
describe("messages/host", function() {
/** @type {Host} */
let host;
beforeEach(function() {
const hostConfig = new lib.HostConfig("host");
const hostConnector = new lib.VirtualConnector(
lib.Address.fromShorthand({ hostId: 1 }),
lib.Address.fromShorthand("controller"),
);
host = new Host(hostConnector, hostConfig, []);
});
describe("HostUpdateRequest", function() {
it("runs", async function() {
host.config.set("host.allow_remote_updates", true);
await host.handleHostUpdateRequest(new lib.HostUpdateRequest());
});
it("rejects if updates are disabled", async function() {
host.config.set("host.allow_remote_updates", false);
await assert.rejects(
host.handleHostUpdateRequest(new lib.HostUpdateRequest()),
/Remote updates are disabled on this machine/
);
});
});
describe("HostConfigGetRequest", function() {
it("runs", async function() {
const config = await host.handleHostConfigGetRequest(new lib.HostConfigGetRequest());
assert.deepEqual(config, host.config.toRemote("control"));
});
});
describe("HostConfigSetFieldRequest", function() {
it("is round trip json serialisable", function() {
testRoundTripJsonSerialisable(lib.HostConfigSetFieldRequest, testMatrix(
["controller.name", "invalid"], // field
["Foo Bar", "true", "5", "{}"], // value
));
});
it("runs", async function() {
await host.handleHostConfigSetFieldRequest(new lib.HostConfigSetFieldRequest("host.name", "Foo Bar"));
assert.equal(host.config.get("host.name"), "Foo Bar");
});
it("rejects if the field does not exist", async function() {
await assert.rejects(
host.handleHostConfigSetFieldRequest(new lib.HostConfigSetFieldRequest("invalid", "Foo Bar")),
/No field named 'invalid'/
);
});
it("rejects if the field is inaccessible", async function() {
await assert.rejects(
host.handleHostConfigSetFieldRequest(new lib.HostConfigSetFieldRequest("host.version", "2.0.0")),
/Field 'host.version' is not accessible from control/
);
});
it("rejects setting 'host.id'", async function() {
await assert.rejects(
host.handleHostConfigSetFieldRequest(new lib.HostConfigSetFieldRequest("host.id", 5)),
/Setting 'host.id' while host is running is not supported/
);
});
});
describe("HostConfigSetPropRequest", function() {
it("is round trip json serialisable", function() {
testRoundTripJsonSerialisable(lib.HostConfigSetPropRequest, testMatrix(
["controller.name", "invalid"], // field
["foo", "bar"], // prop
["Foo Bar", true, 5, {}], // value
));
});
it("runs", async function() {
this.skip(); // No object fields on host
});
it("rejects if the field does not exist", async function() {
await assert.rejects(
host.handleHostConfigSetPropRequest(new lib.HostConfigSetPropRequest("invalid", "foo", "bar")),
/No field named 'invalid'/
);
});
it("rejects if the field is not an object", async function() {
await assert.rejects(
host.handleHostConfigSetPropRequest(new lib.HostConfigSetPropRequest("host.name", "foo", "bar")),
/Cannot set property on non-object field 'host\.name'/
);
});
it("rejects if the field is inaccessible", async function() {
await assert.rejects(
host.handleHostConfigSetPropRequest(new lib.HostConfigSetPropRequest("host.version", "foo", "bar")),
/Field 'host\.version' is not accessible from control/
);
});
});
describe("HostConfigSetRequest", function() {
it("is round trip json serialisable", function() {
testRoundTripJsonSerialisable(lib.HostConfigSetRequest, testMatrix(
[ // fields
{ "foo": "bar", "baz": { "cat": "dog" } },
{ "foo": "5", "baz": { "cat": "5" } },
{ "foo": "true", "baz": { "cat": "true" } },
{ "foo": "{}", "baz": { "cat": "{}" } },
],
));
});
it("runs", async function() {
await host.handleHostConfigSetRequest(new lib.HostConfigSetRequest({
"host.name": "Foo Bar",
"host.factorio_directory": "Bar Baz",
}));
assert.equal(host.config.get("host.name"), "Foo Bar");
assert.equal(host.config.get("host.factorio_directory"), "Bar Baz");
});
it("rejects if the field does not exist", async function() {
await assert.rejects(
host.handleHostConfigSetRequest(new lib.HostConfigSetRequest({
"host.name": "Foo Bar",
"invalid": "Bar Baz",
})),
/No field named 'invalid'/
);
assert.equal(host.config.get("host.name"), "New Host");
});
it("rejects if the field is not an object", async function() {
const prevDir = host.config.get("host.factorio_directory");
await assert.rejects(
host.handleHostConfigSetRequest(new lib.HostConfigSetRequest({
"host.name": "Foo Bar",
"host.factorio_directory": {
"foo": "bar",
},
})),
/Cannot set property on non-object field 'host\.factorio_directory'/
);
assert.equal(host.config.get("host.name"), "New Host");
assert.equal(host.config.get("host.factorio_directory"), prevDir);
});
it("rejects if the field is inaccessible", async function() {
const prevVersion = host.config.get("host.version");
await assert.rejects(
host.handleHostConfigSetRequest(new lib.HostConfigSetRequest({
"host.name": "Foo Bar",
"host.version": "2.0.0",
})),
/Field 'host\.version' is not accessible from control/
);
assert.equal(host.config.get("host.name"), "New Host");
assert.equal(host.config.get("host.version"), prevVersion);
});
it("rejects setting 'host.id'", async function() {
await assert.rejects(
host.handleHostConfigSetRequest(new lib.HostConfigSetRequest({
"host.name": "Foo Bar",
"host.id": 5,
})),
/Setting 'host.id' while host is running is not supported/
);
assert.equal(host.config.get("host.name"), "New Host");
});
});
});