""" Tests for creating new tokenizers. """ import importlib import pytest from nominatim.db import properties from nominatim.tokenizer import factory from nominatim.errors import UsageError import dummy_tokenizer @pytest.fixture def test_config(def_config, tmp_path): def_config.project_dir = tmp_path return def_config @pytest.fixture def tokenizer_import(monkeypatch): monkeypatch.setenv('NOMINATIM_TOKENIZER', 'dummy') def _import_dummy(module, *args, **kwargs): return dummy_tokenizer monkeypatch.setattr(importlib, "import_module", _import_dummy) def test_setup_dummy_tokenizer(temp_db_conn, test_config, tokenizer_import, property_table): tokenizer = factory.create_tokenizer(test_config) assert isinstance(tokenizer, dummy_tokenizer.DummyTokenizer) assert tokenizer.init_state == "new" assert (test_config.project_dir / 'tokenizer').is_dir() assert properties.get_property(temp_db_conn, 'tokenizer') == 'dummy' def test_setup_tokenizer_dir_exists(test_config, tokenizer_import, property_table): (test_config.project_dir / 'tokenizer').mkdir() tokenizer = factory.create_tokenizer(test_config) assert isinstance(tokenizer, dummy_tokenizer.DummyTokenizer) assert tokenizer.init_state == "new" def test_setup_tokenizer_dir_failure(test_config, tokenizer_import, property_table): (test_config.project_dir / 'tokenizer').write_text("foo") with pytest.raises(UsageError): factory.create_tokenizer(test_config) def test_setup_bad_tokenizer_name(test_config, monkeypatch): monkeypatch.setenv('NOMINATIM_TOKENIZER', 'dummy') with pytest.raises(UsageError): factory.create_tokenizer(test_config) def test_load_tokenizer(temp_db_conn, test_config, tokenizer_import, property_table): factory.create_tokenizer(test_config) tokenizer = factory.get_tokenizer_for_db(test_config) assert isinstance(tokenizer, dummy_tokenizer.DummyTokenizer) assert tokenizer.init_state == "loaded" def test_load_no_tokenizer_dir(test_config, tokenizer_import, property_table): factory.create_tokenizer(test_config) test_config.project_dir = test_config.project_dir / 'foo' with pytest.raises(UsageError): factory.get_tokenizer_for_db(test_config) def test_load_missing_propoerty(temp_db_cursor, test_config, tokenizer_import, property_table): factory.create_tokenizer(test_config) temp_db_cursor.execute("TRUNCATE TABLE nominatim_properties") with pytest.raises(UsageError): factory.get_tokenizer_for_db(test_config)