/** * @param ProductInterface $product * @param array $optionMap * @param mixed $permutation * * @return ProductVariantInterface */ protected function createVariant(ProductInterface $product, array $optionMap, $permutation) { /** @var ProductVariantInterface $variant */ $variant = $this->productVariantFactory->createForProduct($product); $this->addOptionValue($variant, $optionMap, $permutation); return $variant; }
function it_generates_variants_for_every_possible_permutation_of_an_objects_options_and_option_values(ProductInterface $productVariable, ProductOptionInterface $colorOption, ProductOptionInterface $sizeOption, ProductOptionValueInterface $blackColor, ProductOptionValueInterface $largeSize, ProductOptionValueInterface $mediumSize, ProductOptionValueInterface $redColor, ProductOptionValueInterface $smallSize, ProductOptionValueInterface $whiteColor, ProductVariantFactoryInterface $productVariantFactory, ProductVariantInterface $permutationVariant) { $productVariable->hasOptions()->willReturn(true); $productVariable->getOptions()->willReturn([$colorOption, $sizeOption]); $colorOption->getValues()->willReturn([$blackColor, $whiteColor, $redColor]); $sizeOption->getValues()->willReturn([$smallSize, $mediumSize, $largeSize]); $blackColor->getId()->willReturn('black1'); $whiteColor->getId()->willReturn('white2'); $redColor->getId()->willReturn('red3'); $smallSize->getId()->willReturn('small4'); $mediumSize->getId()->willReturn('medium5'); $largeSize->getId()->willReturn('large6'); $productVariantFactory->createForProduct($productVariable)->willReturn($permutationVariant); $permutationVariant->addOptionValue(Argument::type(ProductOptionValueInterface::class))->shouldBeCalled(); $productVariable->addVariant($permutationVariant)->shouldBeCalled(); $this->generate($productVariable); }