import { describe, expect, it } from 'vitest';
import { DAY_MINUTES, GameClock, START_MINUTES } from '../Clock';
describe('GameClock', () => {
it('старт: 8:00, night-вход hours = 8', () => {
const c = new GameClock();
expect(c.minutes).toBe(480);
expect(c.hours).toBe(8);
expect(c.label).toBe('8:00');
});
it('advance: dtSec секунды = столько же игровых минут', () => {
const c = new GameClock();
c.advance(60); // 1 реальная минута = 1 игровой час
expect(c.minutes).toBe(540);
expect(c.label).toBe('9:00');
});
it('advance: переход через полночь', () => {
const c = new GameClock();
c.set(23 * 60 + 50);
c.advance(20);
expect(c.minutes).toBe(10);
expect(c.label).toBe('0:10');
});
it('label: минуты с ведущим нулём, часы без', () => {
const c = new GameClock();
c.set(13 * 60 + 5);
expect(c.label).toBe('13:05');
c.set(45);
expect(c.label).toBe('0:45');
});
it('set: mod 1440, отрицательные в диапазон', () => {
const c = new GameClock();
c.set(1500);
expect(c.minutes).toBe(60);
c.set(-60);
expect(c.minutes).toBe(23 * 60);
});
it('reset возвращает к 8:00', () => {
const c = new GameClock();
c.set(0);
c.reset();
expect(c.minutes).toBe(START_MINUTES);
expect(START_MINUTES).toBe(480);
expect(DAY_MINUTES).toBe(1440);
});
it('hours — float для кривой света', () => {
const c = new GameClock();
c.set(19 * 60 + 30);
expect(c.hours).toBeCloseTo(19.5, 10);
});
});