diff --git a/packages/backend/src/core/TimeService.ts b/packages/backend/src/core/TimeService.ts index 7281d04d55..7f46a05e0b 100644 --- a/packages/backend/src/core/TimeService.ts +++ b/packages/backend/src/core/TimeService.ts @@ -17,12 +17,12 @@ export abstract class TimeService implements OnApp protected constructor() {} /** - * Returns Date.now() + * Returns the current time, in milliseconds since the Unix epoch. */ public abstract get now(): number; /** - * Returns a new Date instance. + * Returns a new Date instance representing the current time. */ public get date(): Date { return new Date(this.now); diff --git a/packages/backend/test/misc/GodOfTimeService.ts b/packages/backend/test/misc/GodOfTimeService.ts index 584f4bdefd..1730e9cec0 100644 --- a/packages/backend/test/misc/GodOfTimeService.ts +++ b/packages/backend/test/misc/GodOfTimeService.ts @@ -5,6 +5,7 @@ import { Injectable } from '@nestjs/common'; import { TimeService, Timer } from '@/core/TimeService.js'; +import { addPatch, type DatePatch } from '@/misc/patch-date.js'; /** * Fake implementation of TimeService that allows manual control of time. @@ -52,6 +53,28 @@ export class GodOfTimeService extends TimeService { this._now = value; } + /** + * Get or set the current time, as a JavaScript Date object. + */ + get date(): Date { + return super.date; + } + set date(value: Date) { + this.now = value.getTime(); + } + + /** + * Moves time by a relative "tick" amount. + * Ticks can be a raw number of milliseconds, or an inline object containing time and/or date increments. + */ + public tick(tick: number | DatePatch) { + if (typeof(tick) === 'number') { + this.now += tick; + } else { + this.date = addPatch(this.date, tick); + } + } + /** * Clears all timers and resets to time=0. */