function it_adds_violation_when_validating_group_containing_products_with_non_unique_combination_of_axis_attributes($context, GroupInterface $tShirtVariantGroup, GroupTypeInterface $tShirtGroupType, ProductInterface $redTShirtProduct, ProductInterface $redTShirtProduct2, AttributeInterface $sizeAttribute, AttributeInterface $colorAttribute, ProductValueInterface $sizeProductValue, ProductValueInterface $colorProductValue, UniqueVariantAxis $uniqueVariantAxisConstraint, ConstraintViolationBuilderInterface $violation) { $tShirtGroupType->isVariant()->willReturn(true); $tShirtVariantGroup->getType()->willReturn($tShirtGroupType); $tShirtVariantGroup->getProducts()->willReturn([$redTShirtProduct, $redTShirtProduct2]); $tShirtVariantGroup->getAxisAttributes()->willReturn([$sizeAttribute, $colorAttribute]); $sizeAttribute->getCode()->willReturn('size'); $colorAttribute->getCode()->willReturn('color'); $sizeProductValue->getOption()->willReturn('XL'); $colorProductValue->getOption()->willReturn('Red'); $redTShirtProduct->getValue('size')->willReturn($sizeProductValue); $redTShirtProduct->getValue('color')->willReturn($colorProductValue); $redTShirtProduct2->getValue('size')->willReturn($sizeProductValue); $redTShirtProduct2->getValue('color')->willReturn($colorProductValue); $tShirtVariantGroup->getLabel()->willReturn('Groupe TShirt'); $context->buildViolation('Group "%variant group%" already contains another product with values "%values%"', ['%variant group%' => 'Groupe TShirt', '%values%' => 'size: XL, color: Red'])->shouldBeCalled()->willReturn($violation); $this->validate($tShirtVariantGroup, $uniqueVariantAxisConstraint); }