def test_parse_csv_data(self): """Test parsing of csv strings for data_model in TableIO """ # Test multi-colunm input POST = {'column_field': 'testitemc', 'csv_string': csv_data_string_c} tIO = AssessTableIO(TestData, delimiters) values = [] records = tIO.parse_csv(POST) self.assertEqual(tIO.keys.table_one_column, False) for record in records.values(): values.append(record.get_value()) self.assertEqual(tIO.errors, []) self.assertEqual(values, values_data_c) # Test multi-colunm input, alternative column POST = {'column_field': 'testitema', 'csv_string': csv_data_string_a} tIO = AssessTableIO(TestData, delimiters) values = [] records = tIO.parse_csv(POST) self.assertEqual(tIO.keys.table_one_column, False) for record in records.values(): values.append(record.get_value()) self.assertEqual(tIO.errors, []) self.assertEqual(values, values_data_a) # Test multi-colunm input, another alternative column POST = {'column_field': 'testitemb', 'csv_string': csv_data_string_b} tIO = AssessTableIO(TestData, delimiters) values = [] records = tIO.parse_csv(POST) self.assertEqual(tIO.keys.table_one_column, False) for record in records.values(): values.append(record.get_value()) self.assertEqual(tIO.errors, []) self.assertEqual(values, values_data_b) # Test multi-colunm input, another alternative, but with archived index POST = {'column_field': 'testitemb', 'csv_string': csv_data_string_bb} tIO = AssessTableIO(TestData, delimiters) values = [] records = tIO.parse_csv(POST) self.assertEqual(tIO.keys.table_one_column, False) for record in records.values(): values.append(record.get_value()) # This input is supposed to raise an error and return empty self.assertNotEqual(tIO.errors, []) self.assertEqual(values, []) # Test one-colunm input POST = {'column_field': 'value', 'csv_string': csv_data_string_val} tIO = AssessTableIO(TestData, delimiters) values = [] records = tIO.parse_csv(POST) self.assertEqual(tIO.keys.table_one_column, True) for record in records.values(): values.append(record.get_value()) self.assertEqual(tIO.errors, []) self.assertEqual(values, values_data_val)
def test_parse_csv_mappings(self): """Test parsing of csv strings for mappings_model in TableIO """ # Test multi-colunm input POST = { 'column_field': 'testitemb', 'csv_string': csv_mappings_string_b } tIO = AssessTableIO(TestMappings, delimiters) values = [] records = tIO.parse_csv(POST) self.assertEqual(tIO.keys.table_one_column, False) for record in records.values(): values.append(str(record.get_value())) self.assertEqual(tIO.errors, []) self.assertEqual(values, values_mappings_b) # Test multi-colunm input, alternative POST = { 'column_field': 'testitema', 'csv_string': csv_mappings_string_a } tIO = AssessTableIO(TestMappings, delimiters) values = [] records = tIO.parse_csv(POST) self.assertEqual(tIO.keys.table_one_column, False) for record in records.values(): values.append(str(record.get_value())) self.assertEqual(tIO.errors, []) self.assertEqual(values, values_mappings_a) # Test one-colunm input POST = { 'column_field': 'testitemc', 'csv_string': csv_mappings_string_c } tIO = AssessTableIO(TestMappings, delimiters) values = [] records = tIO.parse_csv(POST) self.assertEqual(tIO.keys.table_one_column, True) for record in records.values(): values.append(str(record.get_value())) self.assertEqual(tIO.errors, []) self.assertEqual(values, values_mappings_c)
def test_parse_csv_data_failure(self): """Test parsing of csv strings for mappings_model in TableIO - failures.""" e1 = AssessError() e2 = AssessError() # Test malformed header - bad index header item ch = ['testitemBAD', 'testitemb', 'c1', 'c2'] ct = ['testitema', 'testitemb', 'c1', 'c2'] csv_data_string_c_bad_header = """testitemBAD\ttestitemb\tc1\tc2 a1\tb1\t1\t2 a2\tb1\t5\t6""" POST = { 'column_field': 'testitemc', 'csv_string': csv_data_string_c_bad_header } tIO = AssessTableIO(TestData, delimiters) tIO.parse_csv(POST) msg = str(NoFieldError('testitemBAD', TestData)) e2 = CSVheaderMalformed(ch, ct, msg, TestData) e1 = tIO.errors.pop() self.assertEqual(str(e1), str(e2)) # Test malformed header - missing index header item ch = ['testitemb', 'c1', 'c2'] ct = ['testitema', 'testitemb', 'c1', 'c2'] csv_data_string_c_bad_header = """testitemb\tc1\tc2 a1\tb1\t1\t2 a2\tb1\t5\t6""" POST = { 'column_field': 'testitemc', 'csv_string': csv_data_string_c_bad_header } tIO = AssessTableIO(TestData, delimiters) tIO.parse_csv(POST) msg = str(NoFieldError('testitema', TestData)) e2 = CSVheaderMalformed(ch, ct, msg, TestData) e1 = tIO.errors.pop() self.assertEqual(str(e1), str(e2)) # Test malformed header - missing value header item(s) ch = ['testitema', 'testitemb'] ct = ['testitema', 'testitemb', 'c1', 'c2'] csv_data_string_c_bad_header = """testitema\ttestitemb a2\tb1\t5\t6""" POST = { 'column_field': 'testitemc', 'csv_string': csv_data_string_c_bad_header } tIO = AssessTableIO(TestData, delimiters) tIO.parse_csv(POST) msg = str(NoFieldError('value', TestData)) e2 = CSVheaderMalformed(ch, ct, msg, TestData) e1 = tIO.errors.pop() self.assertEqual(str(e1), str(e2)) # Test wrong line count: First dataline has 1 too many, last 1 too few csv_data_string_c_bad_count = """testitema\ttestitemb\tc1\tc2 a1\tb1\t1\t2\t99 a2\tb1\t5""" POST = { 'column_field': 'testitemc', 'csv_string': csv_data_string_c_bad_count } ch = ['testitema', 'testitemb', 'c1', 'c2'] tIO = AssessTableIO(TestData, delimiters) tIO.parse_csv(POST) # One too many row columns row = ['a2', 'b1', '5'] e2 = CSVwrongColumnCount(row, ch, '', TestData) e1 = tIO.errors.pop() self.maxDiff = None self.assertEqual(str(e1), str(e2)) # Test wrong key row = ['a1', 'b1', '1', '2', '99'] e2 = CSVwrongColumnCount(row, ch, '', TestData) e1 = tIO.errors.pop() self.maxDiff = None self.assertEqual(str(e1), str(e2)) # Test bad index item in data row csv_data_string_c_bad_count = """testitema\ttestitemb\tc1\tc2 a1\tb1\t1\t2 BADITEM\tb1\t5\t6""" POST = { 'column_field': 'testitemc', 'csv_string': csv_data_string_c_bad_count } ch = ['testitema', 'testitemb', 'c1', 'c2'] tIO = AssessTableIO(TestData, delimiters) tIO.parse_csv(POST) # One too many row columns row = ['BADITEM', 'b1', '5', '6'] msg = str(NoItemError('BADITEM', TestItemA)) e2 = CSVfieldNotFound(row, ch, msg, TestData) e1 = tIO.errors.pop() self.maxDiff = None self.assertEqual(str(e1), str(e2))