function it_removes_groups_field($groupRepository, ProductInterface $product, GroupInterface $packGroup, GroupInterface $crossGroup, GroupTypeInterface $nonVariantType) { $groupRepository->findOneByIdentifier('pack')->willReturn($packGroup); $groupRepository->findOneByIdentifier('cross')->willReturn($crossGroup); $packGroup->getType()->willReturn($nonVariantType); $crossGroup->getType()->willReturn($nonVariantType); $nonVariantType->isVariant()->willReturn(false); $product->removeGroup($packGroup)->shouldBeCalled(); $product->removeGroup($crossGroup)->shouldBeCalled(); $this->removeFieldData($product, 'groups', ['pack', 'cross']); }
function it_sets_variant_group_field($groupRepository, ProductInterface $product, GroupInterface $shirt, GroupInterface $cross, GroupInterface $up, GroupTypeInterface $variantType, GroupTypeInterface $nonVariantType) { $groupRepository->findOneByIdentifier('shirt')->willReturn($shirt); $shirt->getType()->willReturn($variantType); $variantType->isVariant()->willReturn(true); $product->getGroups()->willReturn([$up, $cross]); $up->getType()->willReturn($nonVariantType); $nonVariantType->isVariant()->willReturn(false); $cross->getType()->willReturn($variantType); $variantType->isVariant()->willReturn(true); $product->removeGroup($cross)->shouldBeCalled(); $product->addGroup($shirt)->shouldBeCalled(); $this->setFieldData($product, 'variant_group', 'shirt'); }
/** * {@inheritdoc} * * Expected data input format : ["group_code", "another_group_code"] */ public function removeFieldData(ProductInterface $product, $field, $data, array $options = []) { $this->checkData($field, $data); $groups = []; foreach ($data as $groupCode) { $group = $this->groupRepository->findOneByIdentifier($groupCode); if (null === $group) { throw InvalidArgumentException::expected($field, 'existing group code', 'remover', 'groups', $groupCode); } if ($group->getType()->isVariant()) { throw InvalidArgumentException::expected($field, 'non variant group code', 'remover', 'groups', $groupCode); } $groups[] = $group; } foreach ($groups as $group) { $product->removeGroup($group); } }
/** * {@inheritdoc} * * Expected data input format : ["group_code"] */ public function setFieldData(ProductInterface $product, $field, $data, array $options = []) { $this->checkData($field, $data); $groups = []; foreach ($data as $groupCode) { $group = $this->groupRepository->findOneByIdentifier($groupCode); if (null === $group) { throw InvalidArgumentException::expected($field, 'existing group code', 'setter', 'groups', $groupCode); } else { $groups[] = $group; } } $oldGroups = $product->getGroups(); foreach ($oldGroups as $group) { $product->removeGroup($group); } foreach ($groups as $group) { $product->addGroup($group); } }
/** * {@inheritdoc} * * Expected data input format : "variant_group_code" */ public function setFieldData(ProductInterface $product, $field, $data, array $options = []) { $this->checkData($field, $data); if (null !== $data) { $variantGroup = $this->groupRepository->findOneByIdentifier($data); if (null === $variantGroup) { throw InvalidArgumentException::expected($field, 'existing variant group code', 'setter', 'variant_group', $data); } if (!$variantGroup->getType()->isVariant()) { throw InvalidArgumentException::expected($field, 'variant group code', 'setter', 'variant_group', $data); } } $existingGroups = $product->getGroups(); foreach ($existingGroups as $group) { if ($group->getType()->isVariant()) { $product->removeGroup($group); } } if (null !== $data) { $product->addGroup($variantGroup); } }
/** * Denormalize product groups * * @param string $data * @param string $format * @param array $context * @param ProductInterface $product */ protected function denormalizeGroups($data, $format, array $context, ProductInterface $product) { foreach ($product->getGroups() as $group) { $product->removeGroup($group); } $groupCodes = strlen($data) > 0 ? explode(",", $data) : []; foreach ($groupCodes as $groupCode) { $product->addGroup($this->serializer->denormalize($groupCode, $this->groupClass, $format, $context)); } }