value)->toBe($informations); }); it('accepts additional countries next to France', function () use ($franceInformation, $beneluxInformation): void { // GIVEN $informations = [$beneluxInformation, $franceInformation]; // WHEN $array = new CouponValidityInformationArray($informations); // THEN expect($array->value)->toBe($informations); }); it('rejects an empty array', function (): void { // GIVEN / WHEN $action = fn (): CouponValidityInformationArray => new CouponValidityInformationArray([]); // THEN expect($action)->toThrow( \DomainException::class, 'CouponValidityInformations requires at least one CouponValidityInformation.', ); }); it('rejects two legal informations for the same country', function () use ($franceInformation): void { // GIVEN $informations = [ $franceInformation, new CouponValidityInformation('Lorem ipsum dolor sit amet consectetur adipiscing elit.', Country::FRANCE), ]; // WHEN $action = fn (): CouponValidityInformationArray => new CouponValidityInformationArray($informations); // THEN expect($action)->toThrow( \DomainException::class, 'Only one CouponValidityInformation is allowed per country, duplicate for FRANCE.', ); }); it('rejects a non validity information element', function (): void { // GIVEN / WHEN $action = fn (): CouponValidityInformationArray => new CouponValidityInformationArray(['validity']); // THEN expect($action)->toThrow( \DomainException::class, 'Value of CouponValidityInformationArray must be CouponValidityInformation instances.', ); }); it('rejects a non validity information element mixed with valid ones', function () use ($franceInformation): void { // GIVEN $informations = [$franceInformation, 'validity']; // WHEN $action = fn (): CouponValidityInformationArray => new CouponValidityInformationArray($informations); // THEN expect($action)->toThrow( \DomainException::class, 'Value of CouponValidityInformationArray must be CouponValidityInformation instances.', ); }); it('rejects an array without France validity information', function () use ($beneluxInformation): void { // GIVEN $informations = [$beneluxInformation]; // WHEN $action = fn (): CouponValidityInformationArray => new CouponValidityInformationArray($informations); // THEN expect($action)->toThrow( \DomainException::class, 'CouponValidityInformations requires a CouponValidityInformation for France.', ); }); });