mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-12 07:04:52 +09:00
* Refactor UserManager to use Datastore * Rename lib.User to UserDetails also adds to/fromUserDetails * Fix existing tests * Add user class tests * Add tests for finaliseUsers * Move HostDetails to own file with tests * Move InstanceDetails to its own file with tests * Rename HostInfo and add tests * Rename InstanceInfo and add tests - Also changes the names of the host properties related to instances - Also removes the need to specify the location of InstanceInfo * Make json round trip test validate schema * Add InstanceManager * Fix lint errors * Extra tests * Add final test coverage * Add one last test to InstanceManager * Response to comments * Use generator rather than return anonumous generator Co-authored-by: Hornwitser <github@hornwitser.no> * Fix lint issue with generator --------- Co-authored-by: Hornwitser <github@hornwitser.no>
42 lines
1.3 KiB
JavaScript
42 lines
1.3 KiB
JavaScript
"use strict";
|
|
const assert = require("assert").strict;
|
|
const { compile } = require("@clusterio/lib");
|
|
|
|
/**
|
|
* Generate a flat array of tests from a matrix of inputs.
|
|
*
|
|
* @template {any[][]} T
|
|
* @param {T} arrays - A list of arrays representing the different values for each argument
|
|
* @returns {Array<{ [K in keyof T]: T[K][number] }>}
|
|
* An array of tuples, each containing one value from each input array.
|
|
*/
|
|
function testMatrix(...arrays) {
|
|
return arrays.reduce((acc, curr) => acc.flatMap(a => curr.map(b => [...a, b])), [[]]);
|
|
}
|
|
|
|
/**
|
|
* Test that a class is round trip json serialisable across multiple test cases.
|
|
*
|
|
* @template {any[]} T - Constructor arguments
|
|
* @param {{new(...args: T): object}} Class - The class which has toJSON and fromJSON methods.
|
|
* @param {T[]} tests - The tests inputs to pass to the class constructor.
|
|
*/
|
|
function testRoundTripJsonSerialisable(Class, tests) {
|
|
const validate = compile(Class.jsonSchema);
|
|
for (const test of tests) {
|
|
const original = new Class(...test);
|
|
const serialised = JSON.stringify(original);
|
|
const jsonObject = JSON.parse(serialised);
|
|
const reconstructed = Class.fromJSON(jsonObject);
|
|
assert.deepEqual(reconstructed, original, JSON.stringify(test));
|
|
if (!validate(jsonObject)) {
|
|
throw validate.errors;
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
testMatrix,
|
|
testRoundTripJsonSerialisable,
|
|
};
|