Source code for sqlalchemy_mptt.tests.cases.edit_node

[docs] class Changes(object):
[docs] def test_update_wo_move(self): """ Update node w/o move initial state of the tree :mod:`sqlalchemy_mptt.tests.add_mptt_tree` .. code:: level Nested sets example 1 1(1)22 _______________|___________________ | | | 2 2(2)5 6(4)11 12(7)21 | ^ ^ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20 | | 4 14(9)15 18(11)19 """ node = self.session.query(self.model)\ .filter(self.model.get_pk_column() == 4).one() node.visible = True self.session.add(node) _level = node.get_default_level() self.assertEqual( [ # id lft rgt lvl parent tree (1, 1, 22, _level + 0, None, 1), (2, 2, 5, _level + 1, 1, 1), (3, 3, 4, _level + 2, 2, 1), (4, 6, 11, _level + 1, 1, 1), (5, 7, 8, _level + 2, 4, 1), (6, 9, 10, _level + 2, 4, 1), (7, 12, 21, _level + 1, 1, 1), (8, 13, 16, _level + 2, 7, 1), (9, 14, 15, _level + 3, 8, 1), (10, 17, 20, _level + 2, 7, 1), (11, 18, 19, _level + 3, 10, 1), (12, 1, 22, _level + 0, None, 2), (13, 2, 5, _level + 1, 12, 2), (14, 3, 4, _level + 2, 13, 2), (15, 6, 11, _level + 1, 12, 2), (16, 7, 8, _level + 2, 15, 2), (17, 9, 10, _level + 2, 15, 2), (18, 12, 21, _level + 1, 12, 2), (19, 13, 16, _level + 2, 18, 2), (20, 14, 15, _level + 3, 19, 2), (21, 17, 20, _level + 2, 18, 2), (22, 18, 19, _level + 3, 21, 2) ], self.result.all()) # flake8: noqa
[docs] def test_update_wo_move_like_sacrud_save(self): """ Just change attr from node w/o move initial state of the tree :mod:`sqlalchemy_mptt.tests.add_mptt_tree` .. code:: level Nested sets example 1 1(1)22 _______________|___________________ | | | 2 2(2)5 6(4)11 12(7)21 | ^ ^ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20 | | 4 14(9)15 18(11)19 """ node = self.session.query(self.model)\ .filter(self.model.get_pk_column() == 4).one() node.parent_id = '1' node.visible = True self.session.add(node) _level = node.get_default_level() # id lft rgt lvl parent tree self.assertEqual([(1, 1, 22, _level + 0, None, 1), (2, 2, 5, _level + 1, 1, 1), (3, 3, 4, _level + 2, 2, 1), (4, 6, 11, _level + 1, 1, 1), (5, 7, 8, _level + 2, 4, 1), (6, 9, 10, _level + 2, 4, 1), (7, 12, 21, _level + 1, 1, 1), (8, 13, 16, _level + 2, 7, 1), (9, 14, 15, _level + 3, 8, 1), (10, 17, 20, _level + 2, 7, 1), (11, 18, 19, _level + 3, 10, 1), (12, 1, 22, _level + 0, None, 2), (13, 2, 5, _level + 1, 12, 2), (14, 3, 4, _level + 2, 13, 2), (15, 6, 11, _level + 1, 12, 2), (16, 7, 8, _level + 2, 15, 2), (17, 9, 10, _level + 2, 15, 2), (18, 12, 21, _level + 1, 12, 2), (19, 13, 16, _level + 2, 18, 2), (20, 14, 15, _level + 3, 19, 2), (21, 17, 20, _level + 2, 18, 2), (22, 18, 19, _level + 3, 21, 2)], self.result.all())
[docs] def test_insert_node(self): """ Insert node with parent==6 initial state of the tree :mod:`sqlalchemy_mptt.tests.add_mptt_tree` .. code:: level Nested sets example 1 1(1)22 _______________|___________________ | | | 2 2(2)5 6(4)11 12(7)21 | ^ ^ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20 | | 4 14(9)15 18(11)19 level Insert node with parent_id == 6 1 1(1)24 _______________|_________________ | | | 2 2(2)5 6(4)13 14(7)23 | ____|____ ___|____ | | | | | 3 3(3)4 7(5)8 9(6)12 15(8)18 19(10)22 | | | 4 10(23)11 16(9)17 20(11)21 """ node = self.model(parent_id=6) self.session.add(node) _level = node.get_default_level() self.assertEqual( [ # id lft rgt lvl parent tree (1, 1, 24, _level + 0, None, 1), (2, 2, 5, _level + 1, 1, 1), (3, 3, 4, _level + 2, 2, 1), (4, 6, 13, _level + 1, 1, 1), (5, 7, 8, _level + 2, 4, 1), (6, 9, 12, _level + 2, 4, 1), (7, 14, 23, _level + 1, 1, 1), (8, 15, 18, _level + 2, 7, 1), (9, 16, 17, _level + 3, 8, 1), (10, 19, 22, _level + 2, 7, 1), (11, 20, 21, _level + 3, 10, 1), (12, 1, 22, _level + 0, None, 2), (13, 2, 5, _level + 1, 12, 2), (14, 3, 4, _level + 2, 13, 2), (15, 6, 11, _level + 1, 12, 2), (16, 7, 8, _level + 2, 15, 2), (17, 9, 10, _level + 2, 15, 2), (18, 12, 21, _level + 1, 12, 2), (19, 13, 16, _level + 2, 18, 2), (20, 14, 15, _level + 3, 19, 2), (21, 17, 20, _level + 2, 18, 2), (22, 18, 19, _level + 3, 21, 2), (23, 10, 11, _level + 3, 6, 1) ], self.result.all())
[docs] def test_insert_node_near_subtree(self): """ Insert node with parent==4 initial state of the tree :mod:`sqlalchemy_mptt.tests.add_mptt_tree` .. code:: level Nested sets example 1 1(1)22 _______________|___________________ | | | 2 2(2)5 6(4)11 12(7)21 | ^ ^ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20 | | 4 14(9)15 18(11)19 level Insert node with parent_id == 4 1 1(1)24 _______________|_____________________ | | | 2 2(2)5 6(4)13 14(7)23 | ______|________ __|______ | | | | | | 3 3(3)4 7(5)8 9(6)10 11(23)12 15(8)18 19(10)22 | | 4 16(9)17 20(11)21 """ node = self.model(parent_id=4) self.session.add(node) _level = node.get_default_level() self.assertEqual( [ # id lft rgt lvl parent tree (1, 1, 24, _level + 0, None, 1), (2, 2, 5, _level + 1, 1, 1), (3, 3, 4, _level + 2, 2, 1), (4, 6, 13, _level + 1, 1, 1), (5, 7, 8, _level + 2, 4, 1), (6, 9, 10, _level + 2, 4, 1), (7, 14, 23, _level + 1, 1, 1), (8, 15, 18, _level + 2, 7, 1), (9, 16, 17, _level + 3, 8, 1), (10, 19, 22, _level + 2, 7, 1), (11, 20, 21, _level + 3, 10, 1), (12, 1, 22, _level + 0, None, 2), (13, 2, 5, _level + 1, 12, 2), (14, 3, 4, _level + 2, 13, 2), (15, 6, 11, _level + 1, 12, 2), (16, 7, 8, _level + 2, 15, 2), (17, 9, 10, _level + 2, 15, 2), (18, 12, 21, _level + 1, 12, 2), (19, 13, 16, _level + 2, 18, 2), (20, 14, 15, _level + 3, 19, 2), (21, 17, 20, _level + 2, 18, 2), (22, 18, 19, _level + 3, 21, 2), (23, 11, 12, _level + 2, 4, 1) ], self.result.all())
[docs] def test_insert_after_node(self): pass
[docs] def test_delete_node(self): """ Delete node(4) initial state of the tree :mod:`sqlalchemy_mptt.tests.add_mptt_tree` .. code:: level Test delete node 1 1(1)22 _______________|___________________ | | | 2 2(2)5 6(4)11 12(7)21 | ^ ^ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20 | | 4 14(9)15 18(11)19 level Delete node == 4 1 1(1)16 _______________|_____ | | 2 2(2)5 6(7)15 | ^ 3 3(3)4 7(8)10 11(10)14 | | 4 8(9)9 12(11)13 """ node = self.session.query(self.model)\ .filter(self.model.get_pk_column() == 4).one() self.session.delete(node) _level = node.get_default_level() self.assertEqual( [ # id lft rgt lvl parent tree (1, 1, 16, _level + 0, None, 1), (2, 2, 5, _level + 1, 1, 1), (3, 3, 4, _level + 2, 2, 1), (7, 6, 15, _level + 1, 1, 1), (8, 7, 10, _level + 2, 7, 1), (9, 8, 9, _level + 3, 8, 1), (10, 11, 14, _level + 2, 7, 1), (11, 12, 13, _level + 3, 10, 1), (12, 1, 22, _level + 0, None, 2), (13, 2, 5, _level + 1, 12, 2), (14, 3, 4, _level + 2, 13, 2), (15, 6, 11, _level + 1, 12, 2), (16, 7, 8, _level + 2, 15, 2), (17, 9, 10, _level + 2, 15, 2), (18, 12, 21, _level + 1, 12, 2), (19, 13, 16, _level + 2, 18, 2), (20, 14, 15, _level + 3, 19, 2), (21, 17, 20, _level + 2, 18, 2), (22, 18, 19, _level + 3, 21, 2) ], self.result.all())
[docs] def test_update_node(self): """ Set parent_id==5 for node(8) initial state of the tree :mod:`sqlalchemy_mptt.tests.add_mptt_tree` .. code:: level Test update node 1 1(1)22 _______________|___________________ | | | 2 2(2)5 6(4)11 12(7)21 | ^ ^ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20 | | 4 14(9)15 18(11)19 level Move 8 - > 5 1 1(1)22 _______________|__________________ | | | 2 2(2)5 6(4)15 16(7)21 | ^ | 3 3(3)4 7(5)12 13(6)14 17(10)20 | | 4 8(8)11 18(11)19 | 5 9(9)10 """ node = self.session.query(self.model)\ .filter(self.model.get_pk_column() == 8).one() node.parent_id = 5 self.session.add(node) _level = node.get_default_level() self.assertEqual( [ # id lft rgt lvl parent tree (1, 1, 22, _level + 0, None, 1), (2, 2, 5, _level + 1, 1, 1), (3, 3, 4, _level + 2, 2, 1), (4, 6, 15, _level + 1, 1, 1), (5, 7, 12, _level + 2, 4, 1), (6, 13, 14, _level + 2, 4, 1), (7, 16, 21, _level + 1, 1, 1), (8, 8, 11, _level + 3, 5, 1), (9, 9, 10, _level + 4, 8, 1), (10, 17, 20, _level + 2, 7, 1), (11, 18, 19, _level + 3, 10, 1), (12, 1, 22, _level + 0, None, 2), (13, 2, 5, _level + 1, 12, 2), (14, 3, 4, _level + 2, 13, 2), (15, 6, 11, _level + 1, 12, 2), (16, 7, 8, _level + 2, 15, 2), (17, 9, 10, _level + 2, 15, 2), (18, 12, 21, _level + 1, 12, 2), (19, 13, 16, _level + 2, 18, 2), (20, 14, 15, _level + 3, 19, 2), (21, 17, 20, _level + 2, 18, 2), (22, 18, 19, _level + 3, 21, 2) ], self.result.all()) """ level Move 8 - > 5 1 1(1)22 _______________|__________________ | | | 2 2(2)5 6(4)15 16(7)21 | ^ | 3 3(3)4 7(5)12 13(6)14 17(10)20 | | 4 8(8)11 18(11)19 | 5 9(9)10 level Move 4 - > 2 1 1(1)22 ________|_____________ | | 2 2(2)15 16(7)21 ____|_____ | | | | 3 3(4)12 13(3)14 17(10)20 ^ | 4 4(5)9 10(6)11 18(11)19 | 5 5(8)8 | 6 6(9)7 """ node = self.session.query(self.model)\ .filter(self.model.get_pk_column() == 4).one() node.parent_id = 2 self.session.add(node) self.assertEqual( [ # id lft rgt lvl parent tree (1, 1, 22, _level + 0, None, 1), (2, 2, 15, _level + 1, 1, 1), (3, 13, 14, _level + 2, 2, 1), (4, 3, 12, _level + 2, 2, 1), (5, 4, 9, _level + 3, 4, 1), (6, 10, 11, _level + 3, 4, 1), (7, 16, 21, _level + 1, 1, 1), (8, 5, 8, _level + 4, 5, 1), (9, 6, 7, _level + 5, 8, 1), (10, 17, 20, _level + 2, 7, 1), (11, 18, 19, _level + 3, 10, 1), (12, 1, 22, _level + 0, None, 2), (13, 2, 5, _level + 1, 12, 2), (14, 3, 4, _level + 2, 13, 2), (15, 6, 11, _level + 1, 12, 2), (16, 7, 8, _level + 2, 15, 2), (17, 9, 10, _level + 2, 15, 2), (18, 12, 21, _level + 1, 12, 2), (19, 13, 16, _level + 2, 18, 2), (20, 14, 15, _level + 3, 19, 2), (21, 17, 20, _level + 2, 18, 2), (22, 18, 19, _level + 3, 21, 2) ], self.result.all()) """ level Move 4 - > 2 1 1(1)22 ________|_____________ | | 2 2(2)15 16(7)21 ____|_____ | | | | 3 3(4)12 13(3)14 17(10)20 ^ | 4 4(5)9 10(6)11 18(11)19 | 5 5(8)8 | 6 6(9)7 level Move 8 - > 10 1 1(1)22 ________|_____________ | | 2 2(2)11 12(7)21 ______|_____ | | | | 3 3(4)8 9(3)10 13(10)20 __|____ _|______ | | | | 4 4(5)5 6(6)7 14(8)17 18(11)19 | 5 15(9)16 """ node = self.session.query(self.model)\ .filter(self.model.get_pk_column() == 8).one() node.parent_id = 10 self.session.add(node) self.assertEqual( [ # id lft rgt lvl parent tree (1, 1, 22, _level + 0, None, 1), (2, 2, 11, _level + 1, 1, 1), (3, 9, 10, _level + 2, 2, 1), (4, 3, 8, _level + 2, 2, 1), (5, 4, 5, _level + 3, 4, 1), (6, 6, 7, _level + 3, 4, 1), (7, 12, 21, _level + 1, 1, 1), (8, 14, 17, _level + 3, 10, 1), (9, 15, 16, _level + 4, 8, 1), (10, 13, 20, _level + 2, 7, 1), (11, 18, 19, _level + 3, 10, 1), (12, 1, 22, _level + 0, None, 2), (13, 2, 5, _level + 1, 12, 2), (14, 3, 4, _level + 2, 13, 2), (15, 6, 11, _level + 1, 12, 2), (16, 7, 8, _level + 2, 15, 2), (17, 9, 10, _level + 2, 15, 2), (18, 12, 21, _level + 1, 12, 2), (19, 13, 16, _level + 2, 18, 2), (20, 14, 15, _level + 3, 19, 2), (21, 17, 20, _level + 2, 18, 2), (22, 18, 19, _level + 3, 21, 2) ], self.result.all())
[docs] def test_rebuild(self): """ Rebuild tree with tree_id==1 .. code:: level Nested sets w/o left & right (or broken left & right) 1 (1) _______________|___________________ | | | 2 (2) (4) (7) | ^ ^ 3 (3) (5) (6) (8) (10) | | 4 (9) (11) level Nested sets after rebuild 1 1(1)22 _______________|___________________ | | | 2 2(2)5 6(4)11 12(7)21 | ^ ^ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20 | | 4 14(9)15 18(11)19 """ self.session.query(self.model).update({ self.model.left: 0, self.model.right: 0, self.model.level: 0 }) self.model.rebuild(self.session, 1) _level = self.model.get_default_level() self.assertEqual( self.result.all(), [ # id lft rgt lvl parent tree (1, 1, 22, _level + 0, None, 1), (2, 2, 5, _level + 1, 1, 1), (3, 3, 4, _level + 2, 2, 1), (4, 6, 11, _level + 1, 1, 1), (5, 7, 8, _level + 2, 4, 1), (6, 9, 10, _level + 2, 4, 1), (7, 12, 21, _level + 1, 1, 1), (8, 13, 16, _level + 2, 7, 1), (9, 14, 15, _level + 3, 8, 1), (10, 17, 20, _level + 2, 7, 1), (11, 18, 19, _level + 3, 10, 1), (12, 0, 0, 0, None, 2), (13, 0, 0, 0, 12, 2), (14, 0, 0, 0, 13, 2), (15, 0, 0, 0, 12, 2), (16, 0, 0, 0, 15, 2), (17, 0, 0, 0, 15, 2), (18, 0, 0, 0, 12, 2), (19, 0, 0, 0, 18, 2), (20, 0, 0, 0, 19, 2), (21, 0, 0, 0, 18, 2), (22, 0, 0, 0, 21, 2) ] ) self.model.rebuild(self.session) self.assertEqual( self.result.all(), [ # id lft rgt lvl parent tree (1, 1, 22, _level + 0, None, 1), (2, 2, 5, _level + 1, 1, 1), (3, 3, 4, _level + 2, 2, 1), (4, 6, 11, _level + 1, 1, 1), (5, 7, 8, _level + 2, 4, 1), (6, 9, 10, _level + 2, 4, 1), (7, 12, 21, _level + 1, 1, 1), (8, 13, 16, _level + 2, 7, 1), (9, 14, 15, _level + 3, 8, 1), (10, 17, 20, _level + 2, 7, 1), (11, 18, 19, _level + 3, 10, 1), (12, 1, 22, _level + 0, None, 2), (13, 2, 5, _level + 1, 12, 2), (14, 3, 4, _level + 2, 13, 2), (15, 6, 11, _level + 1, 12, 2), (16, 7, 8, _level + 2, 15, 2), (17, 9, 10, _level + 2, 15, 2), (18, 12, 21, _level + 1, 12, 2), (19, 13, 16, _level + 2, 18, 2), (20, 14, 15, _level + 3, 19, 2), (21, 17, 20, _level + 2, 18, 2), (22, 18, 19, _level + 3, 21, 2) ] )