/** * testAddMenu * * @return void */ public function testAddMenu() { $menuRepo = $this->menuRepository; $typeHandler = $this->typeHandler; $routeHandler = $this->routeHandler; $cacheHandler = $this->cacheHandler; $menuHandler = new MenuAlterHandler($menuRepo, $typeHandler, $routeHandler, $cacheHandler); $inputs = ['menuTitle' => '기본메뉴', 'menuDescription' => '기본메뉴 입니다.', 'siteKey' => 'default']; $menuRepo->shouldReceive('insertMenu')->andReturn(new MenuEntity(['id' => 'basic', 'title' => $inputs['menuTitle'], 'description' => $inputs['menuDescription'], 'site' => $inputs['siteKey']], new TreeCollection([]))); $menuRepo->shouldReceive('insertHierarchy')->andReturn(true); $menu = $menuHandler->addMenu($inputs); $this->assertEquals('기본메뉴', $menu->title); $this->assertEquals('기본메뉴 입니다.', $menu->description); $this->assertEquals('default', $menu->site); }
/** * store * 새로운 메뉴 생성을 처리하는 메소드 * * @param MenuAlterHandler $menuChanger menu alter handler * @param MenuConfigHandler $configHandler menu config like theme config handler * @param MenuPermissionHandler $permissionHandler menu permission handler * * @return mixed * @throws Exception */ public function store(MenuAlterHandler $menuChanger, MenuConfigHandler $configHandler, MenuPermissionHandler $permissionHandler) { $inputs = Request::all(); $selectedDesktopTheme = Request::get('theme_desktop'); $selectedMobileTheme = Request::get('theme_mobile'); $rules = ['menuTitle' => 'required', 'theme_desktop' => 'required', 'theme_mobile' => 'required']; $validator = Validator::make($inputs, $rules); if ($validator->fails()) { Request::flash(); return Redirect::back()->with('alert', ['type' => 'danger', 'message' => $validator->messages()]); } XeDB::beginTransaction(); try { $menu = $menuChanger->addMenu($inputs); $configHandler->setMenuTheme($menu, $selectedDesktopTheme, $selectedMobileTheme); $defaultMenuPermission = $permissionHandler->getDefaultMenuPermission(); $permissionHandler->registerMenuPermission($menu, $defaultMenuPermission); } 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'); }