""" Tests for methods of the SPCsvLoader class. """ import pytest from nominatim.errors import UsageError from nominatim.tools.special_phrases.sp_csv_loader import SPCsvLoader def test_parse_csv(sp_csv_loader): """ Test method parse_csv() Should return the right SpecialPhrase objects. """ phrases = sp_csv_loader.parse_csv() assert check_phrases_content(phrases) def test_next(sp_csv_loader): """ Test objects returned from the next() method. It should return all SpecialPhrases objects of the sp_csv_test.csv special phrases. """ phrases = next(sp_csv_loader) assert check_phrases_content(phrases) def test_check_csv_validity(sp_csv_loader): """ Test method check_csv_validity() It should raise an exception when file with a different exception than .csv is given. """ sp_csv_loader.csv_path = 'test.csv' sp_csv_loader.check_csv_validity() sp_csv_loader.csv_path = 'test.wrong' with pytest.raises(UsageError): assert sp_csv_loader.check_csv_validity() def check_phrases_content(phrases): """ Asserts that the given phrases list contains the right phrases of the sp_csv_test.csv special phrases. """ return len(phrases) > 1 \ and any(p.p_label == 'Billboard' and p.p_class == 'advertising' and p.p_type == 'billboard' and p.p_operator == '-' for p in phrases) \ and any(p.p_label == 'Zip Lines' and p.p_class == 'aerialway' and p.p_type == 'zip_line' and p.p_operator == '-' for p in phrases) @pytest.fixture def sp_csv_loader(src_dir): """ Return an instance of SPCsvLoader. """ csv_path = (src_dir / 'test' / 'testdata' / 'sp_csv_test.csv').resolve() loader = SPCsvLoader(csv_path) return loader