couponName)->toBe($couponName) ->and($coupon->quantity)->toBe($quantity) ->and($coupon->diffusion)->toBe($diffusion) ->and($coupon->moneyAmount)->toBe($moneyAmount) ->and($coupon->couponPicture)->toBe($couponPicture) ->and($coupon->couponProcessingCodes)->toBe($couponProcessingCodes) ->and($coupon->couponValidityInformations)->toBe($couponValidityInformations) ->and($coupon->couponLegalInformations)->toBe($couponLegalInformations) ->and($coupon->couponProducts)->toBe($couponProducts) ->and($coupon->printRules)->toBe($printRules); }); it('hydrates a requested coupon without products', function () use ( $couponName, $quantity, $diffusion, $moneyAmount, $couponPicture, $couponProcessingCodes, $couponValidityInformations, $couponLegalInformations, $printRules, ): void { // GIVEN / WHEN $coupon = new RequestedCoupon( couponName: $couponName, quantity: $quantity, diffusion: $diffusion, moneyAmount: $moneyAmount, couponPicture: $couponPicture, couponProcessingCodes: $couponProcessingCodes, couponValidityInformations: $couponValidityInformations, couponLegalInformations: $couponLegalInformations, couponProducts: new CouponProductArray(), printRules: $printRules, ); // THEN expect($coupon->couponProducts->value)->toBe([]) ->and($coupon->printRules)->toBe($printRules); }); it('hydrates a requested coupon without print rules', function () use ( $couponName, $quantity, $diffusion, $moneyAmount, $couponPicture, $couponProcessingCodes, $couponValidityInformations, $couponLegalInformations, $couponProducts, ): void { // GIVEN / WHEN $coupon = new RequestedCoupon( couponName: $couponName, quantity: $quantity, diffusion: $diffusion, moneyAmount: $moneyAmount, couponPicture: $couponPicture, couponProcessingCodes: $couponProcessingCodes, couponValidityInformations: $couponValidityInformations, couponLegalInformations: $couponLegalInformations, couponProducts: $couponProducts, ); // THEN expect($coupon->printRules)->toBeNull() ->and($coupon->couponProducts)->toBe($couponProducts); }); it('accepts a france only coupon', function () use ( $couponName, $quantity, $diffusion, $moneyAmount, $couponPicture, $franceProcessingCode, $franceValidityInformation, $franceLegalInformation, $couponProducts, ): void { // GIVEN / WHEN $coupon = new RequestedCoupon( couponName: $couponName, quantity: $quantity, diffusion: $diffusion, moneyAmount: $moneyAmount, couponPicture: $couponPicture, couponProcessingCodes: new ProcessingCodeArray([ $franceProcessingCode, ]), couponValidityInformations: new CouponValidityInformationArray([ $franceValidityInformation, ]), couponLegalInformations: new CouponLegalInformationArray([ $franceLegalInformation, ]), couponProducts: $couponProducts, ); // THEN expect($coupon)->toBeInstanceOf(RequestedCoupon::class); }); it('throws when there is no processing code for france', function () use ( $couponName, $quantity, $diffusion, $moneyAmount, $couponPicture, $beneluxProcessingCode, $couponValidityInformations, $couponLegalInformations, $couponProducts, ): void { // GIVEN / WHEN / THEN expect(fn (): RequestedCoupon => new RequestedCoupon( couponName: $couponName, quantity: $quantity, diffusion: $diffusion, moneyAmount: $moneyAmount, couponPicture: $couponPicture, couponProcessingCodes: new ProcessingCodeArray([ $beneluxProcessingCode, ]), couponValidityInformations: $couponValidityInformations, couponLegalInformations: $couponLegalInformations, couponProducts: $couponProducts, ))->toThrow(\DomainException::class, 'ProcessingCodes requires a ProcessingCode for France.'); }); it('throws when a benelux processing code has no benelux validity information', function () use ( $couponName, $quantity, $diffusion, $moneyAmount, $couponPicture, $couponProcessingCodes, $franceValidityInformation, $couponLegalInformations, $couponProducts, ): void { // GIVEN / WHEN / THEN expect(fn (): RequestedCoupon => new RequestedCoupon( couponName: $couponName, quantity: $quantity, diffusion: $diffusion, moneyAmount: $moneyAmount, couponPicture: $couponPicture, couponProcessingCodes: $couponProcessingCodes, couponValidityInformations: new CouponValidityInformationArray([ $franceValidityInformation, ]), couponLegalInformations: $couponLegalInformations, couponProducts: $couponProducts, ))->toThrow(\DomainException::class, 'A coupon requires validity information for BENELUX.'); }); it('throws when a benelux processing code has no benelux legal information', function () use ( $couponName, $quantity, $diffusion, $moneyAmount, $couponPicture, $couponProcessingCodes, $couponValidityInformations, $franceLegalInformation, $couponProducts, ): void { // GIVEN / WHEN / THEN expect(fn (): RequestedCoupon => new RequestedCoupon( couponName: $couponName, quantity: $quantity, diffusion: $diffusion, moneyAmount: $moneyAmount, couponPicture: $couponPicture, couponProcessingCodes: $couponProcessingCodes, couponValidityInformations: $couponValidityInformations, couponLegalInformations: new CouponLegalInformationArray([ $franceLegalInformation, ]), couponProducts: $couponProducts, ))->toThrow(\DomainException::class, 'A coupon requires legal information for BENELUX.'); }); });