def test_move_item_or_clean_ranks(self): menu = Menu(name='menu_move_item_or_clean_ranks') 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) # Corrupt ranks menu_item1.rank = 0 menu_item1.save() menu_item2.rank = 0 menu_item2.save() menu_item3.rank = 0 menu_item3.save() menu_item4.rank = 0 menu_item4.save() move_item_or_clean_ranks(menu_item3, -1) # Move up # 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, 2) self.assertEquals(menu_item3.rank, 1) self.assertEquals(menu_item4.rank, 3) # Corrupt ranks menu_item1.rank = 18 menu_item1.save() menu_item2.rank = -1 menu_item2.save() menu_item3.rank = 6 menu_item3.save() menu_item4.rank = 99 menu_item4.save() move_item_or_clean_ranks(menu_item1, 1) # Try to move down # 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, 3) self.assertEquals(menu_item2.rank, 0) self.assertEquals(menu_item3.rank, 1) self.assertEquals(menu_item4.rank, 2)
def move_up_item(self, request, menu_pk, menu_item_pk): menu = self.get_object_with_change_permissions(request, Menu, menu_pk) menu_item = self.get_object_with_change_permissions(request, MenuItem, menu_item_pk) if menu_item.rank > 0: move_item_or_clean_ranks(menu_item, -1) messages.success(request, _('The menu item "%s" was moved successfully.') % force_unicode(menu_item)) else: messages.error(request, _('The menu item "%s" is not allowed to move up.') % force_unicode(menu_item)) return HttpResponseRedirect("../../../")
def move_down_item(self, request, menu_pk, menu_item_pk): menu = self.get_object_with_change_permissions(request, Menu, menu_pk) menu_item = self.get_object_with_change_permissions(request, MenuItem, menu_item_pk) if menu_item.rank < menu_item.siblings().count(): move_item_or_clean_ranks(menu_item, 1) msg = _('The menu item "%s" was moved successfully.') % force_unicode(menu_item) else: msg = _('The menu item "%s" is not allowed to move down.') % force_unicode(menu_item) request.user.message_set.create(message=msg) return HttpResponseRedirect('../../../')
def move_up_item(self, request, menu_pk, menu_item_pk): menu = self.get_object_with_change_permissions(request, Menu, menu_pk) menu_item = self.get_object_with_change_permissions(request, MenuItem, menu_item_pk) if menu_item.rank > 0: move_item_or_clean_ranks(menu_item, -1) msg = _('The menu item "%s" was moved successfully.') % force_unicode(menu_item) else: msg = _('The menu item "%s" is not allowed to move up.') % force_unicode(menu_item) self.message_user(request, msg) return HttpResponseRedirect('../../../')
def move_up_item(self, request, menu_pk, menu_item_pk): self.get_object_with_change_permissions(request, Menu, menu_pk) menu_item = self.get_object_with_change_permissions(request, MenuItem, menu_item_pk) if menu_item.rank > 0: move_item_or_clean_ranks(menu_item, -1) msg = _('The menu item "%s" was moved successfully.') % force_text(menu_item) else: msg = _('The menu item "%s" is not allowed to move up.') % force_text(menu_item) if django.VERSION >= (1, 4): self.message_user(request, message=msg) else: request.user.message_set.create(message=msg) return HttpResponseRedirect('../../../')