@@ -130,6 +130,7 @@ def test_repository_excel_analyser_os_test_branch_and_leaf_creation(self):
130130 self .assertDictEqual (
131131 {'is_valid' : True ,
132132 'leaf_node_violated' : False ,
133+ 'merge_into' : None ,
133134 'new_item' : OperationItem (1 , u"F\xfc hrung und Koordination" , "" ),
134135 'new_number' : None ,
135136 'new_parent_position' : None ,
@@ -147,6 +148,7 @@ def test_repository_excel_analyser_os_test_branch_and_leaf_creation(self):
147148 self .assertDictEqual (
148149 {'is_valid' : True ,
149150 'leaf_node_violated' : False ,
151+ 'merge_into' : None ,
150152 'new_item' : OperationItem (0 , u'Allgemeines und \xdc bergreifendes' ),
151153 'new_number' : '0' ,
152154 'new_parent_position' : None ,
@@ -167,6 +169,7 @@ def test_repository_excel_analyser_os_test_branch_and_leaf_creation(self):
167169 self .assertDictEqual (
168170 {'is_valid' : True ,
169171 'leaf_node_violated' : False ,
172+ 'merge_into' : None ,
170173 'new_item' : OperationItem (4 , 'Created branch' , 'comment 1' ),
171174 'new_number' : None ,
172175 'new_parent_position' : None ,
@@ -192,6 +195,7 @@ def test_repository_excel_analyser_os_test_branch_and_leaf_creation(self):
192195 self .assertDictEqual (
193196 {'is_valid' : True ,
194197 'leaf_node_violated' : False ,
198+ 'merge_into' : None ,
195199 'new_item' : OperationItem (41 , 'created leaf' , 'comment 2' ),
196200 'new_number' : None ,
197201 'new_parent_position' : None ,
@@ -218,6 +222,7 @@ def test_repository_excel_analyser_os_test_branch_and_leaf_creation(self):
218222 self .assertDictEqual (
219223 {'is_valid' : True ,
220224 'leaf_node_violated' : False ,
225+ 'merge_into' : None ,
221226 'new_item' : OperationItem (42 , 'Moved leaf' , 'comment for moved one' ),
222227 'new_number' : '2' ,
223228 'new_parent_position' : '4' ,
@@ -244,6 +249,7 @@ def test_repository_excel_analyser_os_test_migration(self):
244249 self .assertDictEqual (
245250 {'is_valid' : True ,
246251 'leaf_node_violated' : False ,
252+ 'merge_into' : None ,
247253 'new_item' : OperationItem (1 , u"F\xfc hrung und Koordination" , "" ),
248254 'new_number' : None ,
249255 'new_parent_position' : None ,
@@ -261,6 +267,7 @@ def test_repository_excel_analyser_os_test_migration(self):
261267 self .assertDictEqual (
262268 {'is_valid' : True ,
263269 'leaf_node_violated' : False ,
270+ 'merge_into' : None ,
264271 'new_item' : OperationItem (0 , u'Branch with new number' , '' ),
265272 'new_number' : '0' ,
266273 'new_parent_position' : None ,
@@ -280,6 +287,7 @@ def test_repository_excel_analyser_os_test_migration(self):
280287 self .assertDictEqual (
281288 {'is_valid' : True ,
282289 'leaf_node_violated' : False ,
290+ 'merge_into' : None ,
283291 'new_item' : OperationItem ('01' , 'created leaf in branch with new number' , 'comment 1' ),
284292 'new_number' : None ,
285293 'new_parent_position' : None ,
@@ -305,6 +313,7 @@ def test_repository_excel_analyser_os_test_migration(self):
305313 self .assertDictEqual (
306314 {'is_valid' : True ,
307315 'leaf_node_violated' : False ,
316+ 'merge_into' : None ,
308317 'new_item' : OperationItem (12 , 'created leaf in existing branch' , 'comment 2' ),
309318 'new_number' : None ,
310319 'new_parent_position' : None ,
@@ -328,6 +337,7 @@ def test_repository_excel_analyser_os_test_migration(self):
328337 self .assertDictEqual (
329338 {'is_valid' : True ,
330339 'leaf_node_violated' : False ,
340+ 'merge_into' : None ,
331341 'new_item' : OperationItem ('02' , 'Moved leaf in branch with new number' , 'comment for moved one' ),
332342 'new_number' : '2' ,
333343 'new_parent_position' : '0' ,
@@ -360,6 +370,7 @@ def test_repository_excel_analyser_os_test_invalid(self):
360370 self .assertEqual (
361371 {'is_valid' : False ,
362372 'leaf_node_violated' : True ,
373+ 'merge_into' : None ,
363374 'new_item' : OperationItem ('111' , u"Rechnungspr\xfc fungskommission" , None ),
364375 'new_number' : '1' ,
365376 'new_parent_position' : '11' ,
@@ -378,6 +389,7 @@ def test_repository_excel_analyser_os_test_invalid(self):
378389 self .assertEqual (
379390 {'is_valid' : False ,
380391 'leaf_node_violated' : False ,
392+ 'merge_into' : None ,
381393 'new_item' : OperationItem ('41' , u"Spinn\xe4 nnetzregistrar" , None ),
382394 'new_number' : '1' ,
383395 'new_parent_position' : '4' ,
@@ -399,6 +411,7 @@ def test_repository_excel_analyser_os_test_invalid(self):
399411 self .assertEqual (
400412 {'is_valid' : False ,
401413 'leaf_node_violated' : False ,
414+ 'merge_into' : None ,
402415 'new_item' : OperationItem ('51' , 'New leaf' , None ),
403416 'new_number' : None ,
404417 'new_parent_position' : None ,
@@ -426,6 +439,7 @@ def test_repository_excel_analyser_os_test_invalid(self):
426439 self .assertEqual (
427440 {'is_valid' : False ,
428441 'leaf_node_violated' : True ,
442+ 'merge_into' : None ,
429443 'new_item' : OperationItem ('112' , 'Second new leaf' , None ),
430444 'new_number' : None ,
431445 'new_parent_position' : None ,
@@ -452,6 +466,7 @@ def test_repository_excel_analyser_os_test_invalid(self):
452466 self .assertEqual (
453467 {'is_valid' : False ,
454468 'leaf_node_violated' : False ,
469+ 'merge_into' : None ,
455470 'new_item' : OperationItem ('1211' , 'fourth level' , None ),
456471 'new_number' : None ,
457472 'new_parent_position' : None ,
@@ -599,6 +614,7 @@ def test_repository_migrator_change_description(self):
599614 self .assertEqual (
600615 {'is_valid' : True ,
601616 'leaf_node_violated' : False ,
617+ 'merge_into' : None ,
602618 'new_item' : OperationItem (1 , u"F\xfc hrung" , "New description" ),
603619 'new_number' : None ,
604620 'new_parent_position' : None ,
@@ -632,6 +648,7 @@ def test_repository_migrator_change_refnum(self):
632648 self .assertEqual (
633649 {'is_valid' : True ,
634650 'leaf_node_violated' : False ,
651+ 'merge_into' : None ,
635652 'new_item' : OperationItem (0 , u"F\xfc hrung" , u"Alles zum Thema F\xfc hrung." ),
636653 'new_number' : '0' ,
637654 'new_parent_position' : None ,
@@ -648,6 +665,7 @@ def test_repository_migrator_change_refnum(self):
648665 self .assertEqual (
649666 {'is_valid' : True ,
650667 'leaf_node_violated' : False ,
668+ 'merge_into' : None ,
651669 'new_item' : OperationItem ('01' , u'Vertr\xe4 ge und Vereinbarungen' , None ),
652670 'new_number' : None ,
653671 'new_parent_position' : None ,
@@ -693,6 +711,7 @@ def test_repository_migrator_change_title(self):
693711 self .assertEqual (
694712 {'is_valid' : True ,
695713 'leaf_node_violated' : False ,
714+ 'merge_into' : None ,
696715 'new_item' : OperationItem (1 , "New title" , u"Alles zum Thema F\xfc hrung." ),
697716 'new_number' : None ,
698717 'new_parent_position' : None ,
@@ -744,6 +763,7 @@ def test_repository_migrator_move(self):
744763 self .assertEqual (
745764 {'is_valid' : True ,
746765 'leaf_node_violated' : False ,
766+ 'merge_into' : None ,
747767 'new_item' : OperationItem (21 , u'Vertr\xe4 ge und Vereinbarungen' , None ),
748768 'new_number' : '1' ,
749769 'new_parent_position' : '2' ,
@@ -799,6 +819,7 @@ def test_repository_migrator_create_leaf(self):
799819 self .assertEqual (
800820 {'is_valid' : True ,
801821 'leaf_node_violated' : False ,
822+ 'merge_into' : None ,
802823 'new_item' : OperationItem (12 , u'New leaf' , 'New description' ),
803824 'new_number' : None ,
804825 'new_parent_position' : None ,
@@ -856,6 +877,7 @@ def test_repository_migrator_create_branch_and_leaf_in_reporoot(self):
856877 self .assertEqual (
857878 {'is_valid' : True ,
858879 'leaf_node_violated' : False ,
880+ 'merge_into' : None ,
859881 'new_item' : OperationItem (4 , u'New branch' , 'New description' ),
860882 'new_number' : None ,
861883 'new_parent_position' : None ,
@@ -879,6 +901,7 @@ def test_repository_migrator_create_branch_and_leaf_in_reporoot(self):
879901 self .assertEqual (
880902 {'is_valid' : True ,
881903 'leaf_node_violated' : False ,
904+ 'merge_into' : None ,
882905 'new_item' : OperationItem (41 , u'New leaf' , 'New leaf description' ),
883906 'new_number' : None ,
884907 'new_parent_position' : None ,
@@ -947,6 +970,7 @@ def test_repository_migrator_create_in_moved_repofolder(self):
947970 self .assertEqual (
948971 {'is_valid' : True ,
949972 'leaf_node_violated' : False ,
973+ 'merge_into' : None ,
950974 'new_item' : OperationItem (12 , u"Rechnungspr\xfc fungskommission" , None ),
951975 'new_number' : '2' ,
952976 'new_parent_position' : '1' ,
@@ -965,6 +989,7 @@ def test_repository_migrator_create_in_moved_repofolder(self):
965989 self .assertEqual (
966990 {'is_valid' : True ,
967991 'leaf_node_violated' : False ,
992+ 'merge_into' : None ,
968993 'new_item' : OperationItem (121 , u'New leaf' , 'New description' ),
969994 'new_number' : None ,
970995 'new_parent_position' : None ,
@@ -1041,6 +1066,7 @@ def test_repository_migrator_move_into_created_repofolder(self):
10411066 self .assertEqual (
10421067 {'is_valid' : True ,
10431068 'leaf_node_violated' : False ,
1069+ 'merge_into' : None ,
10441070 'new_item' : OperationItem (4 , u'New branch' , 'New description' ),
10451071 'new_number' : None ,
10461072 'new_parent_position' : None ,
@@ -1064,6 +1090,7 @@ def test_repository_migrator_move_into_created_repofolder(self):
10641090 self .assertEqual (
10651091 {'is_valid' : True ,
10661092 'leaf_node_violated' : False ,
1093+ 'merge_into' : None ,
10671094 'new_item' : OperationItem (41 , u'Vertr\xe4 ge und Vereinbarungen' , None ),
10681095 'new_number' : '1' ,
10691096 'new_parent_position' : '4' ,
@@ -1129,6 +1156,7 @@ def test_repository_migrator_move_into_repository_root(self):
11291156 self .assertEqual (
11301157 {'is_valid' : True ,
11311158 'leaf_node_violated' : False ,
1159+ 'merge_into' : None ,
11321160 'new_item' : OperationItem (4 , u'Vertr\xe4 ge und Vereinbarungen' , None ),
11331161 'new_number' : '4' ,
11341162 'new_parent_position' : '' ,
@@ -1203,6 +1231,7 @@ def test_repository_migrator_move_into_moved_repofolder(self):
12031231 self .assertEqual (
12041232 {'is_valid' : True ,
12051233 'leaf_node_violated' : False ,
1234+ 'merge_into' : None ,
12061235 'new_item' : OperationItem (12 , u"Rechnungspr\xfc fungskommission" , None ),
12071236 'new_number' : '2' ,
12081237 'new_parent_position' : '1' ,
@@ -1219,6 +1248,7 @@ def test_repository_migrator_move_into_moved_repofolder(self):
12191248 self .assertDictEqual (
12201249 {'is_valid' : True ,
12211250 'leaf_node_violated' : False ,
1251+ 'merge_into' : None ,
12221252 'new_item' : OperationItem (121 , u'Vertr\xe4 ge und Vereinbarungen' , '' ),
12231253 'new_number' : '1' ,
12241254 'new_parent_position' : '12' ,
@@ -1413,6 +1443,7 @@ def test_repository_migrator_create_sets_permissions_correctly(self):
14131443 self .assertEqual (
14141444 {'is_valid' : True ,
14151445 'leaf_node_violated' : False ,
1446+ 'merge_into' : None ,
14161447 'new_item' : OperationItem (12 , u'New leaf' , 'New description' ),
14171448 'new_number' : None ,
14181449 'new_parent_position' : None ,
@@ -1464,6 +1495,73 @@ def test_repository_migrator_create_sets_permissions_correctly(self):
14641495 'nicole.kohler' : ['Owner' ]},
14651496 self .branch_repofolder .__ac_local_roles__ )
14661497
1498+ def test_repository_migrator_merge_into_existing_repofolder (self ):
1499+ self .login (self .manager )
1500+ migration_file = resource_filename ('opengever.bundle.tests' , 'assets/os_migration/os_test_merge_into_existing_repofolder.xlsx' )
1501+ analysis_file = resource_filename ('opengever.bundle.tests' , 'assets/os_migration/test_analysis.xlsx' )
1502+ analyser = RepositoryExcelAnalyser (migration_file , analysis_file )
1503+ analyser .analyse ()
1504+
1505+ # We nerge eaf_repofolder into empty_repofolder
1506+ changed_rows = self .get_changed_rows (analyser .analysed_rows )
1507+ self .assertEqual (1 , len (changed_rows ))
1508+
1509+ self .assertEqual (
1510+ {'is_valid' : True ,
1511+ 'leaf_node_violated' : False ,
1512+ 'merge_into' : ('2' , self .empty_repofolder .UID ()),
1513+ 'new_item' : OperationItem (2 , u'Vertr\xe4 ge und Vereinbarungen' , None ),
1514+ 'new_number' : None ,
1515+ 'new_parent_position' : None ,
1516+ 'new_parent_uid' : None ,
1517+ 'new_position_guid' : None ,
1518+ 'new_position_parent_guid' : None ,
1519+ 'new_position_parent_position' : None ,
1520+ 'new_title' : None ,
1521+ 'old_item' : OperationItem (11 , u'Vertr\xe4 ge und Vereinbarungen' , None ),
1522+ 'permissions' : None ,
1523+ 'repository_depth_violated' : False ,
1524+ 'uid' : self .leaf_repofolder .UID ()},
1525+ changed_rows [0 ])
1526+
1527+ migrator = RepositoryMigrator (analyser .analysed_rows )
1528+ self .assertEqual (1 , len (migrator .items_to_merge ()))
1529+ self .assertEqual (changed_rows , migrator .items_to_merge ())
1530+
1531+ directly_contained = self .leaf_repofolder .contentValues ()
1532+ contained = self .portal .portal_catalog .unrestrictedSearchResults (
1533+ path = {'query' : self .leaf_repofolder .absolute_url_path (),
1534+ 'exclude_root' : True })
1535+ contained_uids = [brain .UID for brain in contained ]
1536+ self .assertEqual (16 , len (directly_contained ))
1537+ self .assertEqual (59 , len (contained_uids ))
1538+
1539+ with self .observe_children (self .branch_repofolder ) as branch_children ,\
1540+ self .observe_children (self .empty_repofolder ) as children :
1541+ migrator .run ()
1542+
1543+ # check that branch_repofolder was deleted
1544+ self .assertEqual (1 , len (branch_children ['removed' ]))
1545+
1546+ # check that the content of the leaf_folder was moved
1547+ self .assertEqual (16 , len (children ['added' ]))
1548+ self .assertItemsEqual (directly_contained , children ['added' ])
1549+
1550+ # We check that new_branch and all contained objects were updated
1551+ # correctly
1552+ contained_brains = self .portal .portal_catalog .unrestrictedSearchResults (
1553+ path = {'query' : self .empty_repofolder .absolute_url_path (),
1554+ 'exclude_root' : True })
1555+
1556+ self .assertItemsEqual ([brain .UID for brain in contained_brains ],
1557+ contained_uids )
1558+
1559+ for brain in contained_brains :
1560+ obj = brain .getObject ()
1561+ self .assertObjectConsistency (
1562+ obj , parent_path = self .empty_repofolder .absolute_url_path (),
1563+ parent_refnum = 'Client1 2' )
1564+
14671565
14681566class TestOSMigrationValidation (IntegrationTestCase , OSMigrationTestMixin ):
14691567
0 commit comments