/** * destroyItem * 메뉴 아이템 삭제 처리 메소드 * * @param MenuRetrieveHandler $menuHandler menu handler * @param MenuAlterHandler $menuChanger menu alter handler * @param MenuConfigHandler $configHandler menu config handler * @param MenuPermissionHandler $permissionHandler menu permission handler * @param string $menuId menu id * @param string $itemId item id * * @return RedirectResponse * @throws Exception */ public function destroyItem(MenuRetrieveHandler $menuHandler, MenuAlterHandler $menuChanger, MenuConfigHandler $configHandler, MenuPermissionHandler $permissionHandler, $menuId, $itemId) { XeDB::beginTransaction(); try { $menu = $menuHandler->getMenu($menuId); $item = $menu->getItem($itemId); $menuChanger->removeItem($item); $configHandler->deleteMenuItemTheme($item); $permissionHandler->deleteItemPermission($item); } catch (Exception $e) { XeDB::rollback(); return Redirect::back()->with('alert', ['type' => 'danger', 'message' => $e->getMessage()]); } XeDB::commit(); return Redirect::route('settings.menu.index')->with('alert', ['type' => 'success', 'message' => 'MenuItem deleted']); }
/** * testRemoveItemFail * * @return void */ public function testRemoveItemFail() { $this->setExpectedException('Xpressengine\\Menu\\Exceptions\\CanNotDeleteMenuItemHaveChildException'); $menuRepo = $this->menuRepository; $typeHandler = $this->typeHandler; $routeHandler = $this->routeHandler; $cacheHandler = $this->cacheHandler; $instanceRouteMock = m::mock('Xpressengine\\Routing\\InstanceRoute'); $instanceRouteMock->shouldReceive('setUrl')->andReturn(); $menuRepo->shouldReceive('countItem')->andReturn(1); $menuRepo->shouldReceive('deleteItem')->andReturn(); $menuRepo->shouldReceive('removeHierarchy')->andReturn(); $routeHandler->shouldReceive('remove')->andReturn(); $menuHandler = new MenuAlterHandler($menuRepo, $typeHandler, $routeHandler, $cacheHandler); $dummyMenuType = m::mock('alias:Theme', 'Xpressengine\\Menu\\MenuType\\MenuTypeInterface', ['isRouteAble' => true]); $testItem = new MenuItem(['id' => 'testItem', 'type' => 'testType']); $testChildItem = new MenuItem(['id' => 'testChild', 'parentId' => 'testItem']); $testItem->addChild($testChildItem); $dummyMenuType->shouldReceive('deleteMenu')->andReturn(); $typeHandler->shouldReceive('getModuleObject')->andReturn($dummyMenuType); $typeHandler->shouldReceive('updateMenu')->andReturn(0); $menuHandler->removeItem($testItem); }