feat: correct handling of vouchers
This commit is contained in:
@@ -8,7 +8,14 @@ use App\BusProNet\Model\Travel;
|
||||
use App\Form\Model\BookingDto;
|
||||
use App\Form\Model\ParticipantDto;
|
||||
use App\Form\Model\ParticipantEditDto;
|
||||
use App\Service\BookingPriceCalculatorService;
|
||||
use App\Service\VoucherValidationService;
|
||||
use App\Validator\Constraints\PromoVoucherValidator;
|
||||
use App\Validator\Constraints\PurchaseVoucherValidator;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Validator\Constraint;
|
||||
use Symfony\Component\Validator\ConstraintValidatorFactoryInterface;
|
||||
use Symfony\Component\Validator\ConstraintValidatorInterface;
|
||||
use Symfony\Component\Validator\Validation;
|
||||
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||
|
||||
@@ -25,8 +32,37 @@ class ParticipantEditDtoTest extends TestCase
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
// Create mock services for validator dependencies
|
||||
$mockVoucherService = $this->createMock(VoucherValidationService::class);
|
||||
$mockPriceCalculatorService = $this->createMock(BookingPriceCalculatorService::class);
|
||||
|
||||
// Create custom validator factory that can inject dependencies
|
||||
$validatorFactory = new class($mockVoucherService, $mockPriceCalculatorService) implements ConstraintValidatorFactoryInterface {
|
||||
public function __construct(
|
||||
private readonly VoucherValidationService $voucherService,
|
||||
private readonly BookingPriceCalculatorService $priceCalculatorService,
|
||||
) {
|
||||
}
|
||||
|
||||
public function getInstance(Constraint $constraint): ConstraintValidatorInterface
|
||||
{
|
||||
$className = $constraint->validatedBy();
|
||||
|
||||
if (PurchaseVoucherValidator::class === $className) {
|
||||
return new PurchaseVoucherValidator($this->voucherService);
|
||||
}
|
||||
|
||||
if (PromoVoucherValidator::class === $className) {
|
||||
return new PromoVoucherValidator($this->voucherService, $this->priceCalculatorService);
|
||||
}
|
||||
|
||||
return new $className();
|
||||
}
|
||||
};
|
||||
|
||||
$this->validator = Validation::createValidatorBuilder()
|
||||
->enableAttributeMapping()
|
||||
->setConstraintValidatorFactory($validatorFactory)
|
||||
->getValidator();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user