export abstract class DateTime {
    abstract now(): Date;
}

export class DateTimeActual implements DateTime {
    now(): Date {
        return new Date();
    }
}

// here we explicitly declare a mock to be used in tests
export class DateTimeMock implements DateTime {
    time: Date = new Date(2019, 1, 1);
    setup(time: Date) {
        this.time = time;
    }

    addSeconds(seconds: number) {
        this.time.setSeconds(this.time.getSeconds() + seconds);
    }

    now() {
        return new Date(this.time.toISOString());
    }
}