periods)->toBe($periods); }); it('creates a valid coupon diffusion with several periods', function (): void { // GIVEN $periods = [ new Period(new DateTime('2026-01-01'), new DateTime('2026-02-01')), new Period(new DateTime('2026-03-01'), new DateTime('2026-04-01')), ]; // WHEN $couponDiffusion = new CouponDiffusion($periods); // THEN expect($couponDiffusion->periods)->toBe($periods); }); it('rejects a coupon diffusion without period', function (): void { // GIVEN $periods = []; // GIVEN / THEN expect(fn (): CouponDiffusion => new CouponDiffusion($periods))->toThrow(\DomainException::class); }); it('rejects a coupon diffusion with a non-period element', function (): void { // GIVEN $periods = ['2026-08-25', '2026-10-31']; // WHEN / THEN expect(fn (): CouponDiffusion => new CouponDiffusion($periods)) ->toThrow(\DomainException::class, 'CouponDiffusion periods must be Period instances.'); }); });