public function it_throws_exception_when_item_is_already_at_the_same_position_in_the_middle_of_subtree(MenuItemInterface $sourceItem, MenuItemInterface $parentItem, MenuItemInterface $afterItem, MenuItemRepositoryInterface $menuItemRepository, ObjectManager $objectManager) { $sourceItem->getPosition()->willReturn(2); $sourceItem->getId()->shouldBeCalled(); $menuItemRepository->findChildByParentAndPosition($parentItem, 2)->shouldNotBeCalled(); $menuItemRepository->persistAsNextSiblingOf($sourceItem, $afterItem)->shouldNotBeCalled(); $objectManager->flush()->shouldNotBeCalled(); $this->shouldThrow(ConflictHttpException::class)->duringMove($sourceItem, $parentItem, 2); }
/** * Transforms an object (menu item) to a string (id). * * @param MenuItemInterface|string $menuItem * * @return string|null * * @throws TransformationFailedException if object (menu item) is of wrong type */ public function transform($menuItem) { if (null === $menuItem) { return; } if (!$menuItem instanceof MenuItemInterface) { throw new UnexpectedTypeException($menuItem, MenuItemInterface::class); } return $menuItem->getId(); }
/** * {@inheritdoc} */ public function findChildByParentAndPosition(MenuItemInterface $parent, int $position) { return $this->createQueryBuilder('m')->where('m.parent = :id')->andWhere('m.position = :position')->setParameters(['id' => $parent->getId(), 'position' => $position])->getQuery()->getOneOrNullResult(); }
private function ensurePositionIsValid(MenuItemInterface $menuItem, int $position) { if ($menuItem->getPosition() === $position) { throw new ConflictHttpException(sprintf('Menu item %d is already placed at position %d.', $menuItem->getId(), $position)); } }