Add Prettier and ESLint tooling (Refs #77)
This commit is contained in:
@@ -8,41 +8,65 @@ beforeEach(async () => {
|
||||
|
||||
delete process.env.RCON_PASSWORD;
|
||||
});
|
||||
afterEach(async () => { await fixture.cleanup(); });
|
||||
afterEach(async () => {
|
||||
await fixture.cleanup();
|
||||
});
|
||||
|
||||
const plugin = {
|
||||
name: 't6-gsc-utils', kind: 'plugin' as const,
|
||||
targetRelPath: 't6-gsc-utils.dll', content: Buffer.from([0, 1, 2, 3])
|
||||
name: 't6-gsc-utils',
|
||||
kind: 'plugin' as const,
|
||||
targetRelPath: 't6-gsc-utils.dll',
|
||||
content: Buffer.from([0, 1, 2, 3])
|
||||
};
|
||||
|
||||
describe('plugin release versions', () => {
|
||||
it('keeps release tags independent of upload order and preserves binary identity', async () => {
|
||||
const { createScript, uploadNewVersion, listVersions, getVersion } = await import('../../src/lib/server/fleet/scripts.js');
|
||||
const { createScript, uploadNewVersion, listVersions } =
|
||||
await import('../../src/lib/server/fleet/scripts.js');
|
||||
const { script, version } = createScript({ ...plugin, releaseVersion: ' v3.1.0 ' });
|
||||
expect(version).toMatchObject({ version: 1, release_version: 'v3.1.0' });
|
||||
const older = uploadNewVersion(script.id, Buffer.from([4, 5]), 'Known good release', 'v3.0.4');
|
||||
const older = uploadNewVersion(
|
||||
script.id,
|
||||
Buffer.from([4, 5]),
|
||||
'Known good release',
|
||||
'v3.0.4'
|
||||
);
|
||||
const rebuild = uploadNewVersion(script.id, Buffer.from([6, 7]), 'Rebuilt', 'v3.0.4');
|
||||
expect(listVersions(script.id).map(v => [v.version, v.release_version])).toEqual([
|
||||
[3, 'v3.0.4'], [2, 'v3.0.4'], [1, 'v3.1.0']
|
||||
expect(listVersions(script.id).map((v) => [v.version, v.release_version])).toEqual([
|
||||
[3, 'v3.0.4'],
|
||||
[2, 'v3.0.4'],
|
||||
[1, 'v3.1.0']
|
||||
]);
|
||||
expect(older.sha256).not.toBe(rebuild.sha256);
|
||||
expect((await import('../../src/lib/server/fleet/scripts.js')).getVersionContent(version.id)).toEqual(plugin.content);
|
||||
expect(
|
||||
(await import('../../src/lib/server/fleet/scripts.js')).getVersionContent(version.id)
|
||||
).toEqual(plugin.content);
|
||||
});
|
||||
|
||||
it('allows unlabeled uploads and non-semver release tags', async () => {
|
||||
const { createScript, uploadNewVersion } = await import('../../src/lib/server/fleet/scripts.js');
|
||||
const { createScript, uploadNewVersion } =
|
||||
await import('../../src/lib/server/fleet/scripts.js');
|
||||
const { script, version } = createScript(plugin);
|
||||
expect(version.release_version).toBeNull();
|
||||
expect(uploadNewVersion(script.id, plugin.content, undefined, ' ').release_version).toBeNull();
|
||||
expect(uploadNewVersion(script.id, plugin.content, undefined, '2026.09-rc1').release_version).toBe('2026.09-rc1');
|
||||
expect(
|
||||
uploadNewVersion(script.id, plugin.content, undefined, ' ').release_version
|
||||
).toBeNull();
|
||||
expect(
|
||||
uploadNewVersion(script.id, plugin.content, undefined, '2026.09-rc1').release_version
|
||||
).toBe('2026.09-rc1');
|
||||
});
|
||||
|
||||
it('rejects invalid labels before storing an artifact or new upload', async () => {
|
||||
const { createScript, uploadNewVersion, listScripts, listVersions } = await import('../../src/lib/server/fleet/scripts.js');
|
||||
expect(() => createScript({ ...plugin, releaseVersion: 'x'.repeat(81) })).toThrow(/release version/);
|
||||
const { createScript, uploadNewVersion, listScripts, listVersions } =
|
||||
await import('../../src/lib/server/fleet/scripts.js');
|
||||
expect(() => createScript({ ...plugin, releaseVersion: 'x'.repeat(81) })).toThrow(
|
||||
/release version/
|
||||
);
|
||||
expect(listScripts()).toHaveLength(0);
|
||||
const { script } = createScript(plugin);
|
||||
expect(() => uploadNewVersion(script.id, plugin.content, undefined, 'v3\n.1')).toThrow(/release version/);
|
||||
expect(() => uploadNewVersion(script.id, plugin.content, undefined, 'v3\n.1')).toThrow(
|
||||
/release version/
|
||||
);
|
||||
expect(listVersions(script.id)).toHaveLength(1);
|
||||
});
|
||||
|
||||
@@ -53,9 +77,14 @@ describe('plugin release versions', () => {
|
||||
db().exec('ALTER TABLE script_versions DROP COLUMN release_version');
|
||||
closeDb();
|
||||
expect(getVersion(version.id)).toMatchObject({
|
||||
id: version.id, version: 1, release_version: null, sha256: version.sha256
|
||||
id: version.id,
|
||||
version: 1,
|
||||
release_version: null,
|
||||
sha256: version.sha256
|
||||
});
|
||||
expect((await import('../../src/lib/server/fleet/scripts.js')).getVersionContent(version.id)).toEqual(plugin.content);
|
||||
expect(
|
||||
(await import('../../src/lib/server/fleet/scripts.js')).getVersionContent(version.id)
|
||||
).toEqual(plugin.content);
|
||||
closeDb();
|
||||
expect(getVersion(version.id)!.release_version).toBeNull();
|
||||
});
|
||||
@@ -69,7 +98,10 @@ describe('plugin release versions', () => {
|
||||
form.set('name', plugin.name);
|
||||
form.set('releaseVersion', 'v3.1.0');
|
||||
form.set('content', new File([plugin.content], plugin.targetRelPath));
|
||||
const created = await plugins.POST({ url, request: new Request(url, { method: 'POST', body: form }) });
|
||||
const created = await plugins.POST({
|
||||
url,
|
||||
request: new Request(url, { method: 'POST', body: form })
|
||||
});
|
||||
expect(created.status).toBe(200);
|
||||
const { script } = await created.json();
|
||||
const listed = await (await plugins.GET({ url })).json();
|
||||
@@ -77,11 +109,20 @@ describe('plugin release versions', () => {
|
||||
const next = new FormData();
|
||||
next.set('releaseVersion', 'v3.1.1');
|
||||
next.set('content', new File([new Uint8Array([4, 5])], plugin.targetRelPath));
|
||||
const uploaded = await uploads.POST({ params: { id: String(script.id) }, request: new Request(url, { method: 'POST', body: next }) });
|
||||
const uploaded = await uploads.POST({
|
||||
params: { id: String(script.id) },
|
||||
request: new Request(url, { method: 'POST', body: next })
|
||||
});
|
||||
expect(uploaded.status).toBe(200);
|
||||
expect((await uploaded.json()).version).toMatchObject({ version: 2, release_version: 'v3.1.1' });
|
||||
expect((await uploaded.json()).version).toMatchObject({
|
||||
version: 2,
|
||||
release_version: 'v3.1.1'
|
||||
});
|
||||
const result = await (await detail.GET({ params: { id: String(script.id) } })).json();
|
||||
expect(result.versions.map((v: { release_version: string }) => v.release_version)).toEqual(['v3.1.1', 'v3.1.0']);
|
||||
expect(result.versions.map((v: { release_version: string }) => v.release_version)).toEqual([
|
||||
'v3.1.1',
|
||||
'v3.1.0'
|
||||
]);
|
||||
expect(result.versions[0]).not.toHaveProperty('content');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user