import pytest import qolab.tableflow as tblfl import pandas as pd def test_table_load_noinputs(): assert tblfl.loadInOutTables() == (None, None) assert tblfl.loadInOutTables(inputFileName=None, outputFileName="non_existing_file") == (None, None) def test_wrong_comment_in_table_file_to_load(): with pytest.raises(Exception) as exc_info: # should raise ParserError tblfl.loadInOutTables(inputFileName='tests/tableflow_test_data/tableIn1.csv', outputFileName=None, comment='%') def test_right_comment_in_table_file_to_load(): tIn,tOut = tblfl.loadInOutTables(inputFileName='tests/tableflow_test_data/tableIn1.csv', outputFileName=None, comment='#') assert type(tIn) == pd.core.frame.DataFrame def test_table_equality_with_no_output_file_name(): tIn,tOut = tblfl.loadInOutTables(inputFileName='tests/tableflow_test_data/tableIn1.csv', outputFileName=None, comment='#') assert type(tIn) == pd.core.frame.DataFrame assert type(tOut) == pd.core.frame.DataFrame assert tIn.equals(tOut) col0 = tIn.keys()[0] vBefore = tIn.at[0, col0] tIn.at[0, col0] = vBefore + 1 assert not tIn.equals(tOut) def test_table_load_with_in_out_file_names(): tIn,tOut = tblfl.loadInOutTables(inputFileName='tests/tableflow_test_data/tableIn1.csv', outputFileName='tests/tableflow_test_data/tableOut1nonProcessed.csv', comment='#') assert type(tIn) == pd.core.frame.DataFrame assert type(tOut) == pd.core.frame.DataFrame assert tIn.equals(tOut) def test_for_existing_row(): tbl1 = pd.DataFrame( {'a':[1,2,3], 'b':[1,4,6]}) r = pd.Series({'a':2, 'b':4}) assert tblfl.ilocRowOrAdd(tbl1, r) == 1 def test_for_existing_row_with_NA(): # NA in both table and raw should return a hit tbl1 = pd.DataFrame( {'a':[1,2,3], 'b':[1,pd.NA,6]}) r = pd.Series({'a':2, 'b':pd.NA}) assert tblfl.ilocRowOrAdd(tbl1, r) == 1 # should insert new row tbl1 = pd.DataFrame( {'a':[1,2,3], 'b':[1,4,6]}) r = pd.Series({'a':2, 'b':pd.NA}) assert tblfl.ilocRowOrAdd(tbl1, r) == 3 # should insert new row tbl1 = pd.DataFrame( {'a':[1,2,3], 'b':[1,4,6]}) r = pd.Series({'a':2, 'b':pd.NA}) assert tblfl.ilocRowOrAdd(tbl1, r) == 3 def test_for_nonexisting_row_and_its_insertion(): tbl1 = pd.DataFrame( {'a':[1,2,3], 'b':[1,4,6]}) r = pd.Series({'a':2, 'b':10}) assert len(tbl1) == 3 assert tblfl.ilocRowOrAdd(tbl1, r) == 3 assert len(tbl1) == 4 def test_isRedoNeeded(): r = pd.Series({'a':2, 'b':4, 'c':pd.NA}) assert not tblfl.isRedoNeeded(r, ['a','b']) assert tblfl.isRedoNeeded(r, ['c']) assert tblfl.isRedoNeeded(r, ['non_existing']) assert not tblfl.isRedoNeeded(r, ['b', 'c']) def test_reflowTable(): tIn,tOut = tblfl.loadInOutTables(inputFileName='tests/tableflow_test_data/tableIn1.csv', outputFileName='tests/tableflow_test_data/tableOut1pariallyProcessed.csv', comment='#') tOutRef = tOut.copy() with pytest.warns(UserWarning): tblfl.reflowTable(tIn,tOut)