# SPDX-License-Identifier: GPL-2.0-only # # This file is part of Nominatim. (https://nominatim.org) # # Copyright (C) 2022 by the Nominatim developer community. # For a full list of authors see the git log. """ Tests for creating new tokenizers. """ import pytest from nominatim.db import properties from nominatim.tokenizer import factory from nominatim.errors import UsageError from dummy_tokenizer import DummyTokenizer def test_setup_bad_tokenizer_name(project_env, monkeypatch): monkeypatch.setenv('NOMINATIM_TOKENIZER', 'dummy') with pytest.raises(UsageError): factory.create_tokenizer(project_env) class TestFactory: @pytest.fixture(autouse=True) def init_env(self, project_env, property_table, tokenizer_mock): self.config = project_env def test_setup_dummy_tokenizer(self, temp_db_conn): tokenizer = factory.create_tokenizer(self.config) assert isinstance(tokenizer, DummyTokenizer) assert tokenizer.init_state == "new" assert (self.config.project_dir / 'tokenizer').is_dir() assert properties.get_property(temp_db_conn, 'tokenizer') == 'dummy' def test_setup_tokenizer_dir_exists(self): (self.config.project_dir / 'tokenizer').mkdir() tokenizer = factory.create_tokenizer(self.config) assert isinstance(tokenizer, DummyTokenizer) assert tokenizer.init_state == "new" def test_setup_tokenizer_dir_failure(self): (self.config.project_dir / 'tokenizer').write_text("foo") with pytest.raises(UsageError): factory.create_tokenizer(self.config) def test_load_tokenizer(self): factory.create_tokenizer(self.config) tokenizer = factory.get_tokenizer_for_db(self.config) assert isinstance(tokenizer, DummyTokenizer) assert tokenizer.init_state == "loaded" def test_load_no_tokenizer_dir(self): factory.create_tokenizer(self.config) self.config.project_dir = self.config.project_dir / 'foo' with pytest.raises(UsageError): factory.get_tokenizer_for_db(self.config) def test_load_missing_property(self, temp_db_cursor): factory.create_tokenizer(self.config) temp_db_cursor.execute("TRUNCATE TABLE nominatim_properties") with pytest.raises(UsageError): factory.get_tokenizer_for_db(self.config)