from collections import OrderedDict from pathlib import Path import pytest from app.models.spreadsheet import Spreadsheet def test_can_create_spreadsheet_from_large_excel_file(): with open(str(Path.cwd() / 'tests' / 'spreadsheet_files' / 'excel 2007.xlsx'), 'rb') as xl: ret = Spreadsheet.from_file(xl, filename='xl.xlsx') assert ret.as_csv_data def test_can_create_spreadsheet_from_dict(): assert Spreadsheet.from_dict(OrderedDict( foo='bar', name='Jane', )).as_csv_data == ( "foo,name\r\n" "bar,Jane\r\n" ) def test_can_create_spreadsheet_from_dict_with_filename(): assert Spreadsheet.from_dict({}, filename='empty.csv').as_dict['file_name'] == "empty.csv" @pytest.mark.parametrize('args, kwargs', ( ( ('hello', ['hello']), {}, ), ( (), {'csv_data': 'hello', 'rows': ['hello']} ), )) def test_spreadsheet_checks_for_bad_arguments(args, kwargs): with pytest.raises(TypeError) as exception: Spreadsheet(*args, **kwargs) assert str(exception.value) == 'Spreadsheet must be created from either rows or CSV data'