@@ -30,21 +30,21 @@ def check_data(self, run, expect_last_record=None, extra_ranges=[]):
3030
3131class ForeignKeyTestCase (BaseFKTestCase ):
3232 serializer_name = 'data_wizard.registry.FKModelSerializer'
33+ row4_error = '{"type": ["Invalid pk \\ "100\\ " - object does not exist."]}'
3334
3435 def test_manual (self ):
3536 run = self .upload_file ('fkid.csv' )
36- row4_error = ('{"type": ["Invalid pk \\ "100\\ "'
37- ' - object does not exist."]}' )
3837
3938 # Start data import process, wait for completion
4039 self .start_import (run , [{
4140 'row' : 5 ,
42- 'reason' : row4_error ,
41+ 'reason' : self . row4_error ,
4342 }])
4443
4544 # Verify results
4645 self .check_data (
47- run , expect_last_record = "Failed at row 4: %s" % row4_error
46+ run ,
47+ expect_last_record = "Failed at row 4: %s" % self .row4_error ,
4848 )
4949 self .assert_log (run , [
5050 'created' ,
@@ -53,8 +53,27 @@ def test_manual(self):
5353 'import_complete' ,
5454 ])
5555
56- def test_auto (self ):
57- # Should abort due to unknown type id
56+ def test_auto_idmap_never (self ):
57+ # Should abort due to previously unmapped type ids
58+ run = self .upload_file ('fkid.csv' )
59+ self .auto_import (run , expect_input_required = True )
60+ self .assert_log (run , [
61+ 'created' ,
62+ 'auto_import' ,
63+ 'parse_columns' ,
64+ 'parse_row_identifiers' ,
65+ ])
66+ self .assert_ranges (run , [
67+ "Data Column 'type -> type' at Rows 1-4, Column 0" ,
68+ "Data Column 'notes -> notes' at Rows 1-4, Column 1" ,
69+ "Cell value 'Unresolved: 1' at Rows 1-2, Column 0" ,
70+ "Cell value 'Unresolved: 2' at Row 3, Column 0" ,
71+ "Cell value 'Unresolved: 100' at Row 4, Column 0" ,
72+ ])
73+
74+ def test_auto_idmap_existing (self ):
75+ # Should auto-map existing ids 1 & 2, but abort due to unknown id 100
76+ self .serializer_name = 'tests.data_app.wizard.FKMapExistingSerializer'
5877 run = self .upload_file ('fkid.csv' )
5978 self .auto_import (run , expect_input_required = True )
6079 self .assert_log (run , [
@@ -63,6 +82,40 @@ def test_auto(self):
6382 'parse_columns' ,
6483 'parse_row_identifiers' ,
6584 ])
85+ self .assert_ranges (run , [
86+ "Data Column 'type -> type' at Rows 1-4, Column 0" ,
87+ "Data Column 'notes -> notes' at Rows 1-4, Column 1" ,
88+ "Cell value '1 -> type=1' at Rows 1-2, Column 0" ,
89+ "Cell value '2 -> type=2' at Row 3, Column 0" ,
90+ "Cell value 'Unresolved: 100' at Row 4, Column 0" ,
91+ ])
92+
93+ def test_auto_idmap_always (self ):
94+ # Map all ids without checking, producing same result as test_manual
95+
96+ self .serializer_name = 'tests.data_app.wizard.FKMapAlwaysSerializer'
97+ run = self .upload_file ('fkid.csv' )
98+
99+ self .auto_import (run , expect_input_required = False )
100+
101+ self .assert_log (run , [
102+ 'created' ,
103+ 'auto_import' ,
104+ 'parse_columns' ,
105+ 'parse_row_identifiers' ,
106+ 'do_import' ,
107+ 'import_complete' ,
108+ ])
109+
110+ self .check_data (
111+ run ,
112+ expect_last_record = "Failed at row 4: %s" % self .row4_error ,
113+ extra_ranges = [
114+ "Cell value '1 -> type=1' at Rows 1-2, Column 0" ,
115+ "Cell value '2 -> type=2' at Row 3, Column 0" ,
116+ "Cell value '100 -> type=100' at Row 4, Column 0" ,
117+ ]
118+ )
66119
67120
68121class SlugTestCase (BaseFKTestCase ):
@@ -90,8 +143,8 @@ def test_manual(self):
90143 'import_complete' ,
91144 ])
92145
93- def test_auto (self ):
94- # Should abort due to unknown type id
146+ def test_auto_idmap_never (self ):
147+ # Should abort due to previously unmapped type ids
95148 run = self .upload_file ('fkname.csv' )
96149 self .auto_import (run , expect_input_required = True )
97150 self .assert_log (run , [
@@ -131,7 +184,7 @@ def test_auto(self):
131184 'import_complete' ,
132185 ])
133186
134- def test_auto_preset (self ):
187+ def test_auto_idmap_never_preset (self ):
135188 self .create_identifier ('Type #1' , 'type' , 'Type #1' )
136189 self .create_identifier ('Type #2' , 'type' , 'Type #2' )
137190 self .create_identifier ('Type #2 - Alternate Name' , 'type' , 'Type #2' )
@@ -158,6 +211,56 @@ def test_auto_preset(self):
158211 'import_complete' ,
159212 ])
160213
214+ def test_auto_idmap_existing (self ):
215+ # Should auto-map 2 existing slugs, but abort due to unknown Alt Name
216+ self .serializer_name = (
217+ 'tests.data_app.wizard.SlugMapExistingSerializer'
218+ )
219+ run = self .upload_file ('fkname.csv' )
220+ self .auto_import (run , expect_input_required = True )
221+ self .assert_log (run , [
222+ 'created' ,
223+ 'auto_import' ,
224+ 'parse_columns' ,
225+ 'parse_row_identifiers' ,
226+ ])
227+ self .assert_ranges (run , [
228+ "Data Column 'type -> type' at Rows 1-4, Column 0" ,
229+ "Data Column 'notes -> notes' at Rows 1-4, Column 1" ,
230+ "Cell value 'Type #1 -> type=Type #1' at Rows 1-2, Column 0" ,
231+ "Cell value 'Type #2 -> type=Type #2' at Row 3, Column 0" ,
232+ "Cell value 'Unresolved: Type #2 - Alternate Name'"
233+ " at Row 4, Column 0"
234+ ])
235+
236+ # Update identifiers and try again
237+ self .update_row_identifiers (run , {
238+ 'data_app.type' : {
239+ 'Type #2 - Alternate Name' : 'Type #2' ,
240+ }
241+ })
242+ self .auto_import (run , expect_input_required = False )
243+ self .check_data (
244+ run ,
245+ expect_last_record = "Imported 'Type #2 (Test Note 4)' at row 4" ,
246+ extra_ranges = [
247+ "Cell value 'Type #1 -> type=Type #1' at Rows 1-2, Column 0" ,
248+ "Cell value 'Type #2 -> type=Type #2' at Row 3, Column 0" ,
249+ "Cell value 'Type #2 - Alternate Name -> type=Type #2'"
250+ " at Row 4, Column 0" ,
251+ ]
252+ )
253+ self .assert_log (run , [
254+ 'created' ,
255+ 'auto_import' ,
256+ 'parse_columns' ,
257+ 'parse_row_identifiers' ,
258+ 'update_row_identifiers' ,
259+ 'auto_import' ,
260+ 'do_import' ,
261+ 'import_complete' ,
262+ ])
263+
161264
162265class SplitTestCase (BaseFKTestCase ):
163266 serializer_name = 'tests.data_app.wizard.SlugSerializer'
0 commit comments