Example #1
0
def move_item_or_clean_ranks(menu_item, vector):
    ''' Helper function to move and item up or down in the database.
        If the moving fails, we assume that the ranks were corrupted,
        so we clean them and try the moving again.
    '''
    try:
        move_item(menu_item, vector)
    except MenuItem.DoesNotExist:
        if menu_item.parent:
            clean_ranks(menu_item.parent.children())
            fresh_menu_item = MenuItem.objects.get(pk=menu_item.pk)
            move_item(fresh_menu_item, vector)
Example #2
0
    def test_move_down(self):
        menu = Menu(name='menu_move_down')
        menu.save()
        menu_item1 = MenuItem.objects.create(caption='menu_item1', parent=menu.root_item)
        menu_item2 = MenuItem.objects.create(caption='menu_item2', parent=menu.root_item)
        menu_item3 = MenuItem.objects.create(caption='menu_item3', parent=menu.root_item)
        menu_item4 = MenuItem.objects.create(caption='menu_item4', parent=menu.root_item)
        
        self.assertEquals(menu_item1.rank, 0)
        self.assertEquals(menu_item2.rank, 1)
        self.assertEquals(menu_item3.rank, 2)
        self.assertEquals(menu_item4.rank, 3)

        response = self.client.post('/test_treemenus_admin/treemenus/menu/%s/items/%s/move_down/' % (menu.pk, menu_item3.pk))
        self.assertRedirects(response, '/test_treemenus_admin/treemenus/menu/%s/' % menu.pk)
        
        # Retrieve objects from db
        menu_item1 = MenuItem.objects.get(caption='menu_item1', parent=menu.root_item)
        menu_item2 = MenuItem.objects.get(caption='menu_item2', parent=menu.root_item)
        menu_item3 = MenuItem.objects.get(caption='menu_item3', parent=menu.root_item)
        menu_item4 = MenuItem.objects.get(caption='menu_item4', parent=menu.root_item)
        
        self.assertEquals(menu_item1.rank, 0)
        self.assertEquals(menu_item2.rank, 1)
        self.assertEquals(menu_item3.rank, 3)
        self.assertEquals(menu_item4.rank, 2)
        
        # Test forbidden move up
        self.assertRaises(MenuItem.DoesNotExist, lambda: move_item(menu_item3, 1))