AI Implementation feature(857): Authenticated Shell: Header, Quick Tabs and Change Password (#14)

This commit was merged in pull request #14.
This commit is contained in:
2026-07-21 22:26:47 +00:00
parent 8dc8cee769
commit b6dbfcc511
46 changed files with 2705 additions and 211 deletions
+52
View File
@@ -0,0 +1,52 @@
import { EventStatusService } from '../../backend/src/common/services/event-status.service';
describe('EventStatusService.getState', () => {
const settings = { get: jest.fn() } as any;
beforeEach(() => {
settings.get.mockReset();
});
it('returns countdown with positive secondsToStart before start', async () => {
const start = new Date(Date.now() + 60_000).toISOString();
const end = new Date(Date.now() + 120_000).toISOString();
settings.get.mockImplementation(async (k: string) => (k === 'eventStartUtc' ? start : end));
const svc = new EventStatusService(settings);
const s = await svc.getState();
expect(s.state).toBe('countdown');
expect(s.secondsToStart).not.toBeNull();
expect(s.secondsToStart!).toBeGreaterThan(0);
expect(s.secondsToEnd).toBeNull();
});
it('returns running with secondsToEnd inside window', async () => {
const start = new Date(Date.now() - 30_000).toISOString();
const end = new Date(Date.now() + 60_000).toISOString();
settings.get.mockImplementation(async (k: string) => (k === 'eventStartUtc' ? start : end));
const svc = new EventStatusService(settings);
const s = await svc.getState();
expect(s.state).toBe('running');
expect(s.secondsToEnd).not.toBeNull();
expect(s.secondsToStart).toBeNull();
});
it('returns stopped after end', async () => {
const start = new Date(Date.now() - 120_000).toISOString();
const end = new Date(Date.now() - 60_000).toISOString();
settings.get.mockImplementation(async (k: string) => (k === 'eventStartUtc' ? start : end));
const svc = new EventStatusService(settings);
const s = await svc.getState();
expect(s.state).toBe('stopped');
expect(s.secondsToStart).toBeNull();
expect(s.secondsToEnd).toBeNull();
});
it('returns unconfigured when settings are missing', async () => {
settings.get.mockResolvedValue('');
const svc = new EventStatusService(settings);
const s = await svc.getState();
expect(s.state).toBe('unconfigured');
expect(s.secondsToStart).toBeNull();
expect(s.secondsToEnd).toBeNull();
});
});