def test_move_orderable(self):
        """If you move an orderable, it is removed from the source
        order manager and added to the target order manager.
        """
        source = self.root.source
        target = self.root.target
        manager_source = IOrderManager(source)
        manager_target = IOrderManager(target)
        self.assertEqual(manager_source.get_position(source.item1), 0)
        self.assertEqual(manager_source.get_position(source.item2), 1)
        self.assertEqual(manager_source.get_position(source.item3), 2)
        self.assertEqual(manager_source.get_position(source.asset1), -1)
        self.assertEqual(len(manager_source), 3)
        self.assertEqual(len(manager_target), 1)

        with assertNotTriggersEvents('ContentOrderChangedEvent'):
            with IContainerManager(target).mover() as mover:
                mover(source.item2)

        item2 = source._getOb('item2', None)
        self.assertEqual(item2, None)
        item2 = target._getOb('item2', None)
        self.assertNotEqual(item2, None)

        self.assertEqual(manager_source.get_position(source.item1), 0)
        self.assertEqual(manager_source.get_position(source.item3), 1)
        self.assertEqual(len(manager_source), 2)
        self.assertEqual(manager_target.get_position(target.base1), 0)
        self.assertEqual(manager_target.get_position(target.item2), 1)
        self.assertEqual(len(manager_target), 2)

        # The order is valid, repair return False.
        self.assertEqual(manager_source.repair(source.objectValues()), False)
        self.assertEqual(manager_target.repair(target.objectValues()), False)
    def test_copy_orderable(self):
        """If we copy a orderable content, the copy is added to the
        order manager, and the other order are not touched.
        """
        source = self.root.source
        manager = IOrderManager(source)
        self.assertEqual(manager.get_position(source.item1), 0)
        self.assertEqual(manager.get_position(source.item2), 1)
        self.assertEqual(manager.get_position(source.item3), 2)
        self.assertEqual(manager.get_position(source.asset1), -1)
        self.assertEqual(len(manager), 3)

        item2 = source.item2
        with assertNotTriggersEvents('ContentOrderChangedEvent'):
            with IContainerManager(source).copier() as copier:
                copier(item2)

        self.assertEqual(manager.get_position(source.item1), 0)
        self.assertEqual(manager.get_position(source.item2), 1)
        self.assertEqual(manager.get_position(source.item3), 2)
        self.assertEqual(manager.get_position(source.copy_of_item2), 3)
        self.assertEqual(len(manager), 4)

        # The order is valid, repair return False.
        self.assertEqual(manager.repair(source.objectValues()), False)
    def test_remove_orderable(self):
        """If we remove an orderable, it is no longer available in the
        order manager, and position of content following this one are
        changed as well.
        """
        source = self.root.source
        manager = IOrderManager(source)
        self.assertEqual(manager.get_position(source.item1), 0)
        self.assertEqual(manager.get_position(source.item2), 1)
        self.assertEqual(manager.get_position(source.item3), 2)
        self.assertEqual(manager.get_position(source.asset1), -1)
        self.assertEqual(len(manager), 3)

        item2 = source.item2
        with assertNotTriggersEvents('ContentOrderChangedEvent'):
            with IContainerManager(source).deleter() as deleter:
                self.assertEqual(deleter(item2), item2)

        self.assertEqual(manager.get_position(source.item1), 0)
        self.assertEqual(manager.get_position(source.item3), 1)
        self.assertEqual(manager.get_position(item2), -1)
        self.assertEqual(len(manager), 2)

        # The order is valid, repair return False.
        self.assertEqual(manager.repair(source.objectValues()), False)
    def test_repair_broken_order(self):
        """We repair a broken order.
        """
        source = self.root.source
        manager = IOrderManager(source)
        # We add invalid ids to the order
        manager.order.insert(1, 'foo')
        manager.order.insert(3, 'bar')
        manager.order.insert(4, manager.order[0])

        # Order is now messed up
        self.assertEqual(manager.get_position(source.item1), 0)
        self.assertEqual(manager.get_position(source.item2), 2)
        self.assertEqual(manager.get_position(source.item3), 5)
        self.assertEqual(manager.get_position(source.asset1), -1)
        self.assertEqual(len(manager), 6)

        # repair return True.
        self.assertEqual(manager.repair(source.objectValues()), True)

        # Invalid ids have been removed
        self.assertEqual(manager.get_position(source.item1), 0)
        self.assertEqual(manager.get_position(source.item2), 1)
        self.assertEqual(manager.get_position(source.item3), 2)
        self.assertEqual(manager.get_position(source.asset1), -1)
        self.assertEqual(len(manager), 3)
Example #5
0
 def __call__(self, form):
     manager = IOrderManager(form.context, None)
     if manager is not None:
         if manager.repair(form.context.objectValues()):
             form.send_message(_("Container order was repaired."),
                               type=u"feedback")
             return silvaforms.SUCCESS
     form.send_message(_("Container order is consistent."), type=u"feedback")
     return silvaforms.SUCCESS
    def test_reorder_orderable(self):
        """You can change the position of an orderable content.
        """
        source = self.root.source
        manager = IOrderManager(source)
        self.assertEqual(manager.get_position(source.item1), 0)
        self.assertEqual(manager.get_position(source.item2), 1)
        self.assertEqual(manager.get_position(source.item3), 2)
        self.assertEqual(manager.get_position(source.asset1), -1)
        self.assertEqual(len(manager), 3)

        self.assertEqual(manager.move(source.item1, 2), True)

        self.assertEqual(manager.get_position(source.item1), 2)
        self.assertEqual(manager.get_position(source.item2), 0)
        self.assertEqual(manager.get_position(source.item3), 1)
        self.assertEqual(manager.get_position(source.asset1), -1)
        self.assertEqual(len(manager), 3)

        self.assertEqual(manager.move(source.item2, 1), True)

        self.assertEqual(manager.get_position(source.item1), 2)
        self.assertEqual(manager.get_position(source.item2), 1)
        self.assertEqual(manager.get_position(source.item3), 0)
        self.assertEqual(manager.get_position(source.asset1), -1)
        self.assertEqual(len(manager), 3)

        # You can't move something out of the scope of movable things.
        self.assertEqual(manager.move(source.item3, -42), False)
        self.assertEqual(manager.move(source.item3, 42), False)
        # Or that doesn't belong here
        self.assertEqual(manager.move(source, 2), False)

        self.assertEqual(manager.get_position(source.item1), 2)
        self.assertEqual(manager.get_position(source.item2), 1)
        self.assertEqual(manager.get_position(source.item3), 0)
        self.assertEqual(manager.get_position(source.asset1), -1)
        self.assertEqual(len(manager), 3)

        # The order is valid, repair return False.
        self.assertEqual(manager.repair(source.objectValues()), False)
    def test_add_orderable(self):
        """We add an orderable in the folder. It is added to the order
        manager.
        """
        manager = IOrderManager(self.root.folder)
        factory = self.root.folder.manage_addProduct['Silva']

        # First item have position 0
        with assertNotTriggersEvents('ContentOrderChangedEvent'):
            factory.manage_addMockupVersionedContent('item1', 'Item 1')
        item1 = self.root.folder._getOb('item1')
        self.assertEqual(manager.get_position(item1), 0)
        self.assertEqual(len(manager), 1)

        # Next item have position 1
        with assertNotTriggersEvents('ContentOrderChangedEvent'):
            factory.manage_addMockupVersionedContent('item2', 'Item 2')
        item2 = self.root.folder._getOb('item2')
        self.assertEqual(manager.get_position(item2), 1)
        self.assertEqual(len(manager), 2)

        # The order is valid, repair return False.
        self.assertEqual(manager.repair(self.root.folder.objectValues()), False)
    def test_rename_orderable(self):
        """If you rename a content, its order must be keept (and not
        changed).
        """
        source = self.root.source
        manager = IOrderManager(source)
        self.assertEqual(manager.get_position(source.item1), 0)
        self.assertEqual(manager.get_position(source.item2), 1)
        self.assertEqual(manager.get_position(source.item3), 2)
        self.assertEqual(manager.get_position(source.asset1), -1)
        self.assertEqual(len(manager), 3)

        with assertNotTriggersEvents('ContentOrderChangedEvent'):
            with IContainerManager(source).renamer() as renamer:
                renamer((source.item2, 'super2', None))

        self.assertEqual(manager.get_position(source.item1), 0)
        self.assertEqual(manager.get_position(source.super2), 1)
        self.assertEqual(manager.get_position(source.item3), 2)
        self.assertEqual(manager.get_position(source.asset1), -1)
        self.assertEqual(len(manager), 3)

        # The order is valid, repair return False.
        self.assertEqual(manager.repair(source.objectValues()), False)