/** * update * * @param MenuRetrieveHandler $menuHandler basic handler * @param MenuAlterHandler $menuChanger menu alter handler * @param MenuConfigHandler $configHandler menu config handler * @param string $menuId to update menu entity object id * * @return RedirectResponse * @throws Exception */ public function update(MenuRetrieveHandler $menuHandler, MenuAlterHandler $menuChanger, MenuConfigHandler $configHandler, $menuId) { $menu = $menuHandler->getMenu($menuId); $inputs = Request::all(); $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 { $menuChanger->putMenu($menu, $inputs); $desktopTheme = $inputs['theme_desktop']; $mobileTheme = $inputs['theme_desktop']; $configHandler->updateMenuTheme($menu, $desktopTheme, $mobileTheme); } 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'); }
/** * testPutMenu * * @return void */ public function testPutMenu() { $menuRepo = $this->menuRepository; $typeHandler = $this->typeHandler; $routeHandler = $this->routeHandler; $cacheHandler = $this->cacheHandler; $menuHandler = new MenuAlterHandler($menuRepo, $typeHandler, $routeHandler, $cacheHandler); $menu = new MenuEntity(['id' => 'testMenu', 'title' => 'testTitle', 'description' => 'testDescription'], new TreeCollection([new MenuItem(['id' => 'testMenu'])])); $inputs = ['menuTitle' => 'changedTitle', 'menuDescription' => 'changedDescription']; $menuRepo->shouldReceive('updateMenu')->andReturn(1); $result = $menuHandler->putMenu($menu, $inputs); $this->assertEquals(1, $result); $this->assertEquals('changedTitle', $menu->title); $this->assertEquals('changedDescription', $menu->description); }