import { LeaderboardPeriod } from '../../../src/domain/value-objects/leaderboard-period.vo'; import { LeaderboardType } from '../../../src/domain/value-objects/leaderboard-type.enum'; describe('LeaderboardPeriod', () => { describe('currentDaily', () => { it('应该创建当前日榜周期', () => { const period = LeaderboardPeriod.currentDaily(); expect(period.type).toBe(LeaderboardType.DAILY); expect(period.key).toMatch(/^\d{4}-\d{2}-\d{2}$/); expect(period.startAt.getHours()).toBe(0); expect(period.startAt.getMinutes()).toBe(0); expect(period.endAt.getHours()).toBe(23); expect(period.endAt.getMinutes()).toBe(59); }); }); describe('currentWeekly', () => { it('应该创建当前周榜周期', () => { const period = LeaderboardPeriod.currentWeekly(); expect(period.type).toBe(LeaderboardType.WEEKLY); expect(period.key).toMatch(/^\d{4}-W\d{2}$/); expect(period.startAt.getDay()).toBe(1); // 周一 expect(period.endAt.getDay()).toBe(0); // 周日 }); }); describe('currentMonthly', () => { it('应该创建当前月榜周期', () => { const period = LeaderboardPeriod.currentMonthly(); expect(period.type).toBe(LeaderboardType.MONTHLY); expect(period.key).toMatch(/^\d{4}-\d{2}$/); expect(period.startAt.getDate()).toBe(1); }); }); describe('current', () => { it('应该根据类型创建当前周期', () => { const daily = LeaderboardPeriod.current(LeaderboardType.DAILY); const weekly = LeaderboardPeriod.current(LeaderboardType.WEEKLY); const monthly = LeaderboardPeriod.current(LeaderboardType.MONTHLY); expect(daily.type).toBe(LeaderboardType.DAILY); expect(weekly.type).toBe(LeaderboardType.WEEKLY); expect(monthly.type).toBe(LeaderboardType.MONTHLY); }); }); describe('isCurrentPeriod', () => { it('当前时间应该在当前周期内', () => { const period = LeaderboardPeriod.currentDaily(); expect(period.isCurrentPeriod()).toBe(true); }); }); describe('getPreviousPeriod', () => { it('应该获取上一个日榜周期', () => { const current = LeaderboardPeriod.currentDaily(); const previous = current.getPreviousPeriod(); expect(previous.type).toBe(LeaderboardType.DAILY); expect(previous.endAt.getTime()).toBeLessThan(current.startAt.getTime()); }); it('应该获取上一个周榜周期', () => { const current = LeaderboardPeriod.currentWeekly(); const previous = current.getPreviousPeriod(); expect(previous.type).toBe(LeaderboardType.WEEKLY); }); it('应该获取上一个月榜周期', () => { const current = LeaderboardPeriod.currentMonthly(); const previous = current.getPreviousPeriod(); expect(previous.type).toBe(LeaderboardType.MONTHLY); }); }); describe('equals', () => { it('相同类型和key的周期应该相等', () => { const period1 = LeaderboardPeriod.currentDaily(); const period2 = LeaderboardPeriod.currentDaily(); expect(period1.equals(period2)).toBe(true); }); it('不同类型的周期应该不相等', () => { const daily = LeaderboardPeriod.currentDaily(); const weekly = LeaderboardPeriod.currentWeekly(); expect(daily.equals(weekly)).toBe(false); }); }); });