periods)->toBe($singlePeriods); }); it('creates a valid coupon availability calendar with several periods', function () use ($periods): void { // GIVEN / WHEN $couponAvailabilityCalendar = new CouponAvailabilityCalendar($periods); // THEN expect($couponAvailabilityCalendar->periods)->toBe($periods); }); it('rejects a coupon availability calendar without period', function () use ($emptyPeriods): void { // GIVEN / WHEN / THEN expect(fn (): CouponAvailabilityCalendar => new CouponAvailabilityCalendar($emptyPeriods)) ->toThrow(\DomainException::class); }); it('rejects a coupon availability calendar with a non-period element', function () use ($invalidPeriods): void { // GIVEN / WHEN / THEN expect(fn (): CouponAvailabilityCalendar => new CouponAvailabilityCalendar($invalidPeriods)) ->toThrow(\DomainException::class, 'CouponAvailabilityCalendar periods must be Period instances.'); }); });