function it_add_violation_if_product_is_simple_and_code_has_been_used_in_other_product_variant(ExecutionContextInterface $context, ProductInterface $product, ProductVariantInterface $existingProductVariant, ProductVariantRepositoryInterface $productVariantRepository, ConstraintViolationBuilderInterface $constraintViolationBuilder)
 {
     $constraint = new UniqueSimpleProductCode(['message' => 'Simple product code has to be unique']);
     $product->isSimple()->willReturn(true);
     $product->getCode()->willReturn('AWESOME_PRODUCT');
     $context->buildViolation('Simple product code has to be unique', Argument::cetera())->willReturn($constraintViolationBuilder);
     $constraintViolationBuilder->atPath('code')->shouldBeCalled()->willReturn($constraintViolationBuilder);
     $constraintViolationBuilder->addViolation()->shouldBeCalled()->willReturn($constraintViolationBuilder);
     $productVariantRepository->findOneBy(['code' => 'AWESOME_PRODUCT'])->willReturn($existingProductVariant);
     $this->validate($product, $constraint);
 }
 /**
  * {@inheritdoc}
  */
 public function validate($value, Constraint $constraint)
 {
     if (!$value instanceof ProductInterface) {
         throw new UnexpectedTypeException($value, ProductInterface::class);
     }
     if (!$value->isSimple()) {
         return;
     }
     if (null !== $this->productVariantRepository->findOneBy(['code' => $value->getCode()])) {
         $this->context->buildViolation($constraint->message)->atPath('code')->addViolation();
     }
 }
示例#3
0
 /**
  * @Transform /^variant with code "([^"]+)"$/
  */
 public function getProductVariantByCode($code)
 {
     $productVariant = $this->productVariantRepository->findOneBy(['code' => $code]);
     Assert::notNull($productVariant, sprintf('Cannot find product variant with code %s', $code));
     return $productVariant;
 }
 /**
  * {@inheritdoc}
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builder->add('variant', 'sylius_product_variant_from_identifier', ['label' => 'sylius.form.promotion_action.add_product_configuration.variant', 'class' => $this->variantRepository->getClassName(), 'constraints' => [new NotBlank(), new Type(['type' => 'numeric'])]])->add('count', 'integer', ['label' => 'sylius.form.promotion_rule.cart_quantity_configuration.count', 'constraints' => [new NotBlank(), new Type(['type' => 'numeric'])]])->add('equal', 'checkbox', ['label' => 'sylius.form.promotion_rule.cart_quantity_configuration.equal', 'constraints' => [new Type(['type' => 'bool'])]])->add('exclude', 'checkbox', ['label' => 'sylius.form.promotion_rule.contains_product_configuration.exclude', 'constraints' => [new Type(['type' => 'bool'])]]);
 }
 /**
  * {@inheritdoc}
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builder->add('variant', 'sylius_product_variant_from_identifier', ['label' => 'sylius.form.promotion_action.add_product_configuration.variant', 'class' => $this->variantRepository->getClassName(), 'constraints' => [new NotBlank(), new Type(['type' => 'numeric'])]])->add('quantity', 'integer', ['label' => 'sylius.form.promotion_action.add_product_configuration.quantity', 'empty_data' => 1, 'constraints' => [new NotBlank(), new Type(['type' => 'numeric'])]])->add('price', 'sylius_money', ['label' => 'sylius.form.promotion_action.add_product_configuration.price', 'empty_data' => 0, 'constraints' => [new NotBlank(), new Type(['type' => 'numeric'])]]);
 }