Ejemplo n.º 1
0
 /**
  * storeItem
  *
  * @param MenuRetrieveHandler   $menuHandler       to get menu has item
  * @param MenuAlterHandler      $menuChanger       store item handler
  * @param MenuConfigHandler     $configHandler     store item config handler
  * @param MenuPermissionHandler $permissionHandler store item permission handler
  * @param string                $menuId            where to store
  *
  * @return $this|RedirectResponse
  * @throws Exception
  */
 public function storeItem(MenuRetrieveHandler $menuHandler, MenuAlterHandler $menuChanger, MenuConfigHandler $configHandler, MenuPermissionHandler $permissionHandler, $menuId)
 {
     XeDB::beginTransaction();
     $menu = $menuHandler->getMenu($menuId);
     try {
         $inputs = Request::except(['_token', 'theme_desktop', 'theme_mobile']);
         $parentThemeMode = Request::get('parentTheme', false);
         if ($parentThemeMode === false) {
             $desktopTheme = Request::get('theme_desktop');
             $mobileTheme = Request::get('theme_mobile');
         } else {
             $desktopTheme = null;
             $mobileTheme = null;
         }
         $item = $menuChanger->addItem($menu, $inputs);
         $configHandler->setMenuItemTheme($item, $desktopTheme, $mobileTheme);
         $permissionHandler->registerItemPermission($item, new Grant());
     } catch (Exception $e) {
         XeDB::rollback();
         Request::flash();
         return Redirect::back()->with('alert', ['type' => 'danger', 'message' => $e->getMessage()]);
     }
     XeDB::commit();
     return Redirect::route('settings.menu.index');
 }
 /**
  * testAddItemFail
  *
  * @return void
  */
 public function testAddItemFail()
 {
     $this->setExpectedException('\\Xpressengine\\Routing\\Exceptions\\UnusableUrlException');
     $menuRepo = $this->menuRepository;
     $typeHandler = $this->typeHandler;
     $routeHandler = $this->routeHandler;
     $cacheHandler = $this->cacheHandler;
     $instanceRouteMock = m::mock('Xpressengine\\Routing\\InstanceRoute');
     $instanceRouteMock->shouldReceive('setUrl')->andReturn();
     $menuRepo->shouldReceive('countMenu')->andReturn(0);
     $menuRepo->shouldReceive('countItem')->andReturn(0);
     $inputs = ['itemId' => 'testId', 'parent' => 'basic', 'itemTitle' => 'Title', 'itemUrl' => 'testUrl', 'itemDescription' => 'testDescription', 'itemTarget' => '_blank', 'selectedType' => 'xpressengine@test', 'itemOrdering' => '1', 'itemActivated' => '1', 'siteKey' => 'default'];
     $menuRepo->shouldReceive('insertItem')->andReturn(new MenuItem(['id' => $inputs['itemId'], 'menuId' => 'basic', 'parentId' => $inputs['parent'], 'title' => $inputs['itemTitle'], 'url' => $inputs['itemUrl'], 'description' => $inputs['itemDescription'], 'target' => $inputs['itemTarget'], 'type' => $inputs['selectedType'], 'ordering' => $inputs['itemOrdering'], 'activated' => $inputs['itemActivated']]));
     $menuRepo->shouldReceive('insertHierarchy')->andReturn(0);
     $dummyMenuEntity = $menu = new MenuEntity(['id' => 'basic', 'title' => 'testTitle', 'description' => 'testDescription'], new TreeCollection(['testMenu' => new MenuItem(['id' => 'testMenu'])]));
     $menuRepo->shouldReceive('findMenu')->andReturn($dummyMenuEntity);
     $menuRepo->shouldReceive('children')->andReturn([]);
     $menuRepo->shouldReceive('updateItem')->andReturn([]);
     $routeHandler->shouldReceive('usableUrl')->andReturn(false);
     $routeHandler->shouldReceive('add')->andReturn();
     $menuHandler = new MenuAlterHandler($menuRepo, $typeHandler, $routeHandler, $cacheHandler);
     $dummyMenuType = m::mock('alias:Theme', 'Xpressengine\\Menu\\MenuType\\MenuTypeInterface', ['isRouteAble' => true, 'getId' => 'dummyId']);
     $dummyMenuType->shouldReceive('storeMenu')->andReturn();
     $typeHandler->shouldReceive('getModuleObject')->andReturn($dummyMenuType);
     $insertedItem = $menuHandler->addItem($dummyMenuEntity, $inputs);
     $this->assertEquals('testId', $insertedItem->id);
     $this->assertEquals('Title', $insertedItem->title);
     $this->assertEquals('testUrl', $insertedItem->url);
     $this->assertEquals('testDescription', $insertedItem->description);
     $this->assertEquals('_blank', $insertedItem->target);
     $this->assertEquals(1, $insertedItem->ordering);
     $this->assertEquals(true, $insertedItem->activated);
 }