Files
AetherForge/server/web/src/help/fleetGroups.test.ts
AetherForge 689e574f7a
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
Update server config, builder APK logic, frontend fleet/activity metrics, and ignore test APKs
2026-06-13 19:54:24 -07:00

58 lines
1.9 KiB
TypeScript

import { describe, it, expect, beforeEach } from 'vitest';
import {
createFleetGroup,
groupsForAgent,
loadFleetGroups,
normalizeGroupColor,
primaryGroupForAgent,
saveFleetGroups,
} from './fleetGroups';
describe('fleetGroups', () => {
beforeEach(() => {
localStorage.clear();
});
it('normalizeGroupColor accepts hex', () => {
expect(normalizeGroupColor('#abc')).toBe('#aabbcc');
expect(normalizeGroupColor('#aabbcc')).toBe('#aabbcc');
});
it('persists and loads groups', () => {
const g = createFleetGroup('Rack A', '#ff00ff', ['a1', 'a2']);
saveFleetGroups([g]);
const loaded = loadFleetGroups();
expect(loaded).toHaveLength(1);
expect(loaded[0].name).toBe('Rack A');
expect(loaded[0].agentIds).toEqual(['a1', 'a2']);
});
it('groupsForAgent and primaryGroupForAgent', () => {
const groups = [
createFleetGroup('G1', '#00e8f5', ['x']),
createFleetGroup('G2', '#ff0000', ['x', 'y']),
];
expect(groupsForAgent(groups, 'x').map((g) => g.name)).toEqual(['G1', 'G2']);
expect(primaryGroupForAgent(groups, 'x')?.name).toBe('G1');
saveFleetGroups(groups);
expect(loadFleetGroups()).toHaveLength(2);
});
it('generates unique fallback IDs for loaded groups missing an ID', () => {
// Manually saving raw JSON objects without IDs to simulate legacy state
const rawGroups = [
{ name: 'Legacy Group 1', color: '#ff0000', agentIds: [] },
{ name: 'Legacy Group 2', color: '#00ff00', agentIds: [] },
];
localStorage.setItem('aetherforge_fleet_groups', JSON.stringify(rawGroups));
const loaded = loadFleetGroups();
expect(loaded).toHaveLength(2);
expect(loaded[0].id).toBeDefined();
expect(loaded[1].id).toBeDefined();
expect(loaded[0].id).not.toBe(loaded[1].id);
expect(loaded[0].id.startsWith('fg-')).toBe(true);
expect(loaded[1].id.startsWith('fg-')).toBe(true);
});
});