toBeInstanceOf(PickupTimeSlot::class); }); }); describe('PickupTimeSlot methods', function (): void { it('returns getAt as immutable when passed mutable', function (): void { // GIVEN $at = new \DateTime(); $for = new \DateInterval('PT10M'); $vo = new PickupTimeSlot($at, $for); // WHEN $res = $vo->getAt(); // THEN expect($res)->toBeInstanceOf(\DateTimeImmutable::class); }); it('returns getAt as immutable when passed immutable', function (): void { // GIVEN $at = new \DateTimeImmutable(); $for = new \DateInterval('PT10M'); $vo = new PickupTimeSlot($at, $for); // WHEN $res = $vo->getAt(); // THEN expect($res)->toBeInstanceOf(\DateTimeImmutable::class); }); it('returns getFor', function (): void { // GIVEN $at = new \DateTimeImmutable(); $for = new \DateInterval('PT10M'); $vo = new PickupTimeSlot($at, $for); // WHEN $res = $vo->getFor(); // THEN expect($res->i)->toBe(10); }); it('returns getEndsAt', function (): void { // GIVEN $at = new \DateTimeImmutable('2024-01-01 10:00:00'); $for = new \DateInterval('PT10M'); $vo = new PickupTimeSlot($at, $for); // WHEN $res = $vo->getEndsAt(); // THEN expect($res->format('H:i'))->toBe('10:10'); }); it('can be cast to string', function (): void { // GIVEN $at = new \DateTimeImmutable('2024-01-01 10:00:00', new \DateTimeZone('UTC')); $for = new \DateInterval('PT10M'); $vo = new PickupTimeSlot($at, $for); // WHEN $res = (string) $vo; // THEN expect($res)->toContain('2024-01-01T10:00:00') ->and($res)->toContain('PT10M'); }); });