def _edit_category(self, category_tc, is_new = True):
        dbFacade = self.dbFacade();
        new_category_name = request.params.get('name');
        parent_name = request.params.get('parent');

        if dbFacade.balances.categoryDao.find_by_name(new_category_name, h.authenticated_user().uid):
            return { "failure" : Messages.categoryAlreadyExists(name=new_category_name) }
        parent_tc = dbFacade.balances.categoryDao.find_by_name(parent_name, h.authenticated_user().uid)

        if not parent_tc or parent_tc.name == '' or not new_category_name:
            return { "failure" : Messages.invalidArguments() }
        if not hasattr(parent_tc, 'subcats') or not parent_tc.subcats:            
            return { "failure" : Messages.wrongParentCategory(name=parent_name) }

        category_tc.name = new_category_name
        category_tc.parent = parent_tc.key
        category_tc.user_uid = h.authenticated_user().uid
        dbFacade.balances.categoryDao.save(category_tc)

        if not is_new:
            self._change_changes_category(request.params.get('old_name'), new_category_name)

        dbFacade.db.commit()
        return { "id" : category_tc.uid }     
    def test_category_manage(self):

        existing_balance_url = url_for(controller='rest/balance_changes', action='list')
        response = self.app.get(existing_balance_url)
        self.assertEquals(200, response.status)

        signin_form = response.forms.get('login_form')
        self.failUnless(signin_form)
        signin_form.set('username', 'disorder@3sk8tm')
        signin_form.set('password', 'd0n0tch@nge')
        response = signin_form.submit()
        self.assertEquals(200, response.status)

        category_name = 'Test1'        
        
        self.failIf(self.__in_categories(category_name)) 
        
        """ Add new category - Test1 """
        existing_balance_url = url_for(controller='rest/balance_categories', action='add', name=category_name, parent='Dom')
        response = self.app.post(existing_balance_url)
        self.assertEquals(200, response.status)
        self.assertEquals('application/x-javascript', response.header('Content-Type'))
        result = json.loads(response.body)
        self.failIf(result is None)        
        status = result.get('id')
        self.failIf(status is None)


        """ Add category again - Test1 should be failure"""
        existing_balance_url = url_for(controller='rest/balance_categories', action='add', name=category_name, parent='Dom')
        response = self.app.post(existing_balance_url)
        self.assertEquals(200, response.status)
        self.assertEquals('application/x-javascript', response.header('Content-Type'))
        result = json.loads(response.body)
        self.failIf(result is None)
        status = result.get('failure')
        self.assertEquals(status, Messages.categoryAlreadyExists(name=category_name))
        self.assertEquals(self.__in_categories(category_name), True)

        """ Edit category name """
        category_name_edit = 'Test2'
        existing_balance_url = url_for(controller='rest/balance_categories', 
                                       action='edit', name=category_name_edit, 
                                       old_name = category_name,
                                       parent='Dom')
        response = self.app.post(existing_balance_url)
        self.assertEquals(200, response.status)
        self.assertEquals('application/x-javascript', response.header('Content-Type'))
        result = json.loads(response.body)
        self.failIf(result is None)
        
        status = result.get('id')
        self.failIf(status is None)

        """ Edit category name again - should be error"""
        category_name_edit = 'Test2'
        existing_balance_url = url_for(controller='rest/balance_categories', 
                                       action='edit', name=category_name_edit, 
                                       old_name = category_name, 
                                       parent='Dom')
        response = self.app.post(existing_balance_url)
        self.assertEquals(200, response.status)
        self.assertEquals('application/x-javascript', response.header('Content-Type'))
        result = json.loads(response.body)
        self.failIf(result is None)
        
        status = result.get('failure')
        self.assertEquals(status, Messages.elementNotFound(key=category_name))

        """ Delete category Test 2 """        
        existing_balance_url = url_for(controller='rest/balance_categories', 
                                       action='delete', name=category_name_edit, 
                                       )
        response = self.app.post(existing_balance_url)
        self.assertEquals(200, response.status)
        self.assertEquals('application/x-javascript', response.header('Content-Type'))
        result = json.loads(response.body)
        self.failIf(result is None)
        
        status = result.get('failure')
        self.assertEquals(status, None)
        self.failIf(self.__in_categories(category_name_edit))

        """ Delete category Test 1 - Fail """        
        existing_balance_url = url_for(controller='rest/balance_categories', 
                                       action='delete', name=category_name, 
                                       )
        response = self.app.post(existing_balance_url)
        self.assertEquals(200, response.status)
        self.assertEquals('application/x-javascript', response.header('Content-Type'))
        result = json.loads(response.body)
        self.failIf(result is None)
        
        status = result.get('failure')
        self.assertEquals(status, Messages.elementNotFound(key=category_name))
        self.failIf(self.__in_categories(category_name))