self.categories)) def testNewSubCategory(self): self.newSubCategory([self.category]) newSubCategory = self.category.children()[0] self.assertDoUndoRedo(lambda: self.assertEqual([newSubCategory], self.category.children()), lambda: self.assertEqual([self.category], self.categories)) class DragAndDropCategoryCommandTest(CategoryCommandTestCase): def setUp(self): super(DragAndDropCategoryCommandTest, self).setUp() self.parent = category.Category('parent') self.child = category.Category('child') self.grandchild = category.Category('grandchild') self.parent.addChild(self.child) self.child.addChild(self.grandchild) self.categories.extend([self.parent, self.child]) def dragAndDrop(self, dropTarget, categories=None): command.DragAndDropCategoryCommand(self.categories, categories or [], drop=dropTarget).do() def testCannotDropOnParent(self): self.dragAndDrop([self.parent], [self.child]) self.failIf(patterns.CommandHistory().hasHistory()) def testCannotDropOnChild(self): self.dragAndDrop([self.child], [self.parent]) self.failIf(patterns.CommandHistory().hasHistory()) def testCannotDropOnGrandchild(self): self.dragAndDrop([self.grandchild], [self.parent]) self.failIf(patterns.CommandHistory().hasHistory()) def testDropAsRootTask(self): self.dragAndDrop([], [self.grandchild]) self.assertDoUndoRedo(lambda: self.assertEqual(None, self.grandchild.parent()), lambda: self.assertEqual(self.child, self.grandchild.parent())) class CopyAndPasteCommandTest(CategoryCommandTestCase): def setUp(self): super(CopyAndPasteCommandTest, self).setUp() self.original = category.Category('original') self.categories.append(self.original) self.task = task.Task()