]> git.openstreetmap.org Git - nominatim.git/blob - test/python/test_tokenizer_legacy.py
add migration for configurable tokenizer
[nominatim.git] / test / python / test_tokenizer_legacy.py
1 """
2 Test for legacy tokenizer.
3 """
4 import pytest
5
6 from nominatim.tokenizer import legacy_tokenizer
7 from nominatim.db import properties
8 from nominatim.errors import UsageError
9
10 @pytest.fixture
11 def test_config(def_config, tmp_path):
12     def_config.project_dir = tmp_path / 'project'
13     def_config.project_dir.mkdir()
14
15     module_dir = tmp_path / 'module_src'
16     module_dir.mkdir()
17     (module_dir / 'nominatim.so').write_text('TEST nomiantim.so')
18
19     def_config.lib_dir.module = module_dir
20
21     return def_config
22
23
24 @pytest.fixture
25 def tokenizer_factory(dsn, tmp_path, monkeypatch):
26
27     def _maker():
28         return legacy_tokenizer.create(dsn, tmp_path / 'tokenizer')
29
30     return _maker
31
32 @pytest.fixture
33 def tokenizer_setup(tokenizer_factory, test_config, property_table, monkeypatch):
34     monkeypatch.setattr(legacy_tokenizer, '_check_module' , lambda m, c: None)
35     tok = tokenizer_factory()
36     tok.init_new_db(test_config)
37
38
39 def test_init_new(tokenizer_factory, test_config, property_table, monkeypatch, temp_db_conn):
40     monkeypatch.setenv('NOMINATIM_TERM_NORMALIZATION', 'xxvv')
41     monkeypatch.setattr(legacy_tokenizer, '_check_module' , lambda m, c: None)
42
43     tok = tokenizer_factory()
44     tok.init_new_db(test_config)
45
46     assert properties.get_property(temp_db_conn, legacy_tokenizer.DBCFG_NORMALIZATION) == 'xxvv'
47
48     outfile = test_config.project_dir / 'module' / 'nominatim.so'
49
50     assert outfile.exists()
51     assert outfile.read_text() == 'TEST nomiantim.so'
52     assert outfile.stat().st_mode == 33261
53
54
55 def test_init_module_load_failed(tokenizer_factory, test_config, property_table, monkeypatch, temp_db_conn):
56     tok = tokenizer_factory()
57
58     with pytest.raises(UsageError):
59         tok.init_new_db(test_config)
60
61
62 def test_init_module_custom(tokenizer_factory, test_config, property_table,
63                             monkeypatch, tmp_path):
64     module_dir = (tmp_path / 'custom').resolve()
65     module_dir.mkdir()
66     (module_dir/ 'nominatim.so').write_text('CUSTOM nomiantim.so')
67
68     monkeypatch.setenv('NOMINATIM_DATABASE_MODULE_PATH', str(module_dir))
69     monkeypatch.setattr(legacy_tokenizer, '_check_module' , lambda m, c: None)
70
71     tok = tokenizer_factory()
72     tok.init_new_db(test_config)
73
74     assert not (test_config.project_dir / 'module').exists()
75
76
77 def test_init_from_project(tokenizer_setup, tokenizer_factory):
78     tok = tokenizer_factory()
79
80     tok.init_from_project()
81
82     assert tok.normalization is not None