couponMovements)->toBe($couponMovements); }); it('rejects an empty array', function (): void { // GIVEN / WHEN $action = fn (): CouponMovementArray => new CouponMovementArray([]); // THEN expect($action)->toThrow( \DomainException::class, 'CouponMovementArray requires at least one CouponMovement.', ); }); it('rejects a non coupon movement element', function (): void { // GIVEN / WHEN $action = fn (): CouponMovementArray => new CouponMovementArray(['movement']); // THEN expect($action)->toThrow( \DomainException::class, 'Value of CouponMovementArray must be CouponMovement instances.', ); }); it('rejects a non coupon movement element mixed with valid ones', function () use ($couponMovement): void { // GIVEN $couponMovements = [$couponMovement, 'movement']; // WHEN $action = fn (): CouponMovementArray => new CouponMovementArray($couponMovements); // THEN expect($action)->toThrow( \DomainException::class, 'Value of CouponMovementArray must be CouponMovement instances.', ); }); });