Files
craftdock/test/services/firstBootService.test.js
Lucas RayanandClaude Sonnet 5.5 640e52c0c9 Initial commit: CraftDock as of 2026-11-01
The previous GitHub history was lost with the account (the local .git was missing
its refs and most objects), so this repository starts from the existing code.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-01 22:44:39 -03:00

50 lines
2.1 KiB
JavaScript

import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
import fsp from 'node:fs/promises';
import os from 'node:os';
import path from 'node:path';
import { ensureFirstBootDefaults, MARKER_FILE } from '../../src/services/firstBootService.js';
let tmp, propertiesService, logger;
beforeEach(async () => {
tmp = await fsp.mkdtemp(path.join(os.tmpdir(), 'cd-fb-'));
propertiesService = { update: vi.fn().mockResolvedValue({}) };
logger = { info: vi.fn(), warn: vi.fn() };
});
afterEach(async () => { await fsp.rm(tmp, { recursive: true, force: true }); });
const run = (edition = 'bedrock') =>
ensureFirstBootDefaults({ config: { mcDataPath: tmp, mcEdition: edition }, propertiesService, logger });
describe('ensureFirstBootDefaults', () => {
it('first boot: forces the whitelist property to false and writes the marker', async () => {
await run('bedrock');
expect(propertiesService.update).toHaveBeenCalledWith({ 'allow-list': 'false' });
const marker = JSON.parse(await fsp.readFile(path.join(tmp, MARKER_FILE), 'utf8'));
expect(marker.initializedAt).toBeTruthy();
});
it('java edition writes white-list', async () => {
await run('java');
expect(propertiesService.update).toHaveBeenCalledWith({ 'white-list': 'false' });
});
it('auto edition writes both keys (each server only reads its own)', async () => {
await run('auto');
expect(propertiesService.update).toHaveBeenCalledWith({ 'allow-list': 'false', 'white-list': 'false' });
});
it('restart (marker present): does not touch properties', async () => {
await fsp.writeFile(path.join(tmp, MARKER_FILE), JSON.stringify({ initializedAt: 'x' }));
await run('bedrock');
expect(propertiesService.update).not.toHaveBeenCalled();
});
it('never throws: a failing properties write is logged, and no marker is left so it retries next boot', async () => {
propertiesService.update.mockRejectedValue(new Error('disk full'));
await expect(run('bedrock')).resolves.toBeUndefined();
expect(logger.warn).toHaveBeenCalled();
await expect(fsp.access(path.join(tmp, MARKER_FILE))).rejects.toThrow();
});
});