mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-16 15:47:58 +00:00
move status test to tokenizer
The availability of the module is now tested by the tokenizer.
This commit is contained in:
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
namespace Nominatim;
|
namespace Nominatim;
|
||||||
|
|
||||||
|
require_once(CONST_TokenizerDir.'/tokenizer.php');
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
|
|
||||||
class Status
|
class Status
|
||||||
@@ -25,24 +27,8 @@ class Status
|
|||||||
throw new Exception('Database connection failed', 700);
|
throw new Exception('Database connection failed', 700);
|
||||||
}
|
}
|
||||||
|
|
||||||
$sStandardWord = $this->oDB->getOne("SELECT make_standard_name('a')");
|
$oTokenizer = new \Nominatim\Tokenizer($this->oDB);
|
||||||
if ($sStandardWord === false) {
|
$oTokenizer->checkStatus();
|
||||||
throw new Exception('Module failed', 701);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($sStandardWord != 'a') {
|
|
||||||
throw new Exception('Module call failed', 702);
|
|
||||||
}
|
|
||||||
|
|
||||||
$sSQL = 'SELECT word_id, word_token, word, class, type, country_code, ';
|
|
||||||
$sSQL .= "operator, search_name_count FROM word WHERE word_token IN (' a')";
|
|
||||||
$iWordID = $this->oDB->getOne($sSQL);
|
|
||||||
if ($iWordID === false) {
|
|
||||||
throw new Exception('Query failed', 703);
|
|
||||||
}
|
|
||||||
if (!$iWordID) {
|
|
||||||
throw new Exception('No value', 704);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function dataDate()
|
public function dataDate()
|
||||||
|
|||||||
@@ -15,6 +15,27 @@ class Tokenizer
|
|||||||
$this->oNormalizer = \Transliterator::createFromRules(CONST_Term_Normalization_Rules);
|
$this->oNormalizer = \Transliterator::createFromRules(CONST_Term_Normalization_Rules);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function checkStatus()
|
||||||
|
{
|
||||||
|
$sStandardWord = $this->oDB->getOne("SELECT make_standard_name('a')");
|
||||||
|
if ($sStandardWord === false) {
|
||||||
|
throw new Exception('Module failed', 701);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($sStandardWord != 'a') {
|
||||||
|
throw new Exception('Module call failed', 702);
|
||||||
|
}
|
||||||
|
|
||||||
|
$sSQL = "SELECT word_id FROM word WHERE word_token IN (' a')";
|
||||||
|
$iWordID = $this->oDB->getOne($sSQL);
|
||||||
|
if ($iWordID === false) {
|
||||||
|
throw new Exception('Query failed', 703);
|
||||||
|
}
|
||||||
|
if (!$iWordID) {
|
||||||
|
throw new Exception('No value', 704);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public function setCountryRestriction($aCountries)
|
public function setCountryRestriction($aCountries)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -204,7 +204,17 @@ class NominatimEnvironment:
|
|||||||
def setup_unknown_db(self):
|
def setup_unknown_db(self):
|
||||||
""" Setup a test against a non-existing database.
|
""" Setup a test against a non-existing database.
|
||||||
"""
|
"""
|
||||||
self.write_nominatim_config('UNKNOWN_DATABASE_NAME')
|
# The tokenizer needs an existing database to function.
|
||||||
|
# So start with the usual database
|
||||||
|
class _Context:
|
||||||
|
db = None
|
||||||
|
|
||||||
|
context = _Context()
|
||||||
|
self.setup_db(context)
|
||||||
|
tokenizer_factory.create_tokenizer(self.get_test_config(), init_db=False)
|
||||||
|
|
||||||
|
# Then drop the DB again
|
||||||
|
self.teardown_db(context, force_drop=True)
|
||||||
|
|
||||||
def setup_db(self, context):
|
def setup_db(self, context):
|
||||||
""" Setup a test against a fresh, empty test database.
|
""" Setup a test against a fresh, empty test database.
|
||||||
@@ -221,13 +231,13 @@ class NominatimEnvironment:
|
|||||||
context.db.autocommit = True
|
context.db.autocommit = True
|
||||||
psycopg2.extras.register_hstore(context.db, globally=False)
|
psycopg2.extras.register_hstore(context.db, globally=False)
|
||||||
|
|
||||||
def teardown_db(self, context):
|
def teardown_db(self, context, force_drop=False):
|
||||||
""" Remove the test database, if it exists.
|
""" Remove the test database, if it exists.
|
||||||
"""
|
"""
|
||||||
if 'db' in context:
|
if hasattr(context, 'db'):
|
||||||
context.db.close()
|
context.db.close()
|
||||||
|
|
||||||
if not self.keep_scenario_db:
|
if force_drop or not self.keep_scenario_db:
|
||||||
self.db_drop_database(self.test_db)
|
self.db_drop_database(self.test_db)
|
||||||
|
|
||||||
def _reuse_or_drop_db(self, name):
|
def _reuse_or_drop_db(self, name):
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
namespace Nominatim;
|
namespace Nominatim;
|
||||||
|
|
||||||
|
@define('CONST_TokenizerDir', dirname(__FILE__));
|
||||||
|
|
||||||
require_once(CONST_LibDir.'/DB.php');
|
require_once(CONST_LibDir.'/DB.php');
|
||||||
require_once(CONST_LibDir.'/Status.php');
|
require_once(CONST_LibDir.'/Status.php');
|
||||||
|
|
||||||
@@ -40,45 +42,6 @@ class StatusTest extends \PHPUnit\Framework\TestCase
|
|||||||
$this->assertEquals('No database', $oStatus->status());
|
$this->assertEquals('No database', $oStatus->status());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function testModuleFail()
|
|
||||||
{
|
|
||||||
$this->expectException(\Exception::class);
|
|
||||||
$this->expectExceptionMessage('Module call failed');
|
|
||||||
$this->expectExceptionCode(702);
|
|
||||||
|
|
||||||
// stub has getOne method but doesn't return anything
|
|
||||||
$oDbStub = $this->getMockBuilder(Nominatim\DB::class)
|
|
||||||
->setMethods(array('connect', 'getOne'))
|
|
||||||
->getMock();
|
|
||||||
|
|
||||||
$oStatus = new Status($oDbStub);
|
|
||||||
$this->assertNull($oStatus->status());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function testWordIdQueryFail()
|
|
||||||
{
|
|
||||||
$this->expectException(\Exception::class);
|
|
||||||
$this->expectExceptionMessage('No value');
|
|
||||||
$this->expectExceptionCode(704);
|
|
||||||
|
|
||||||
$oDbStub = $this->getMockBuilder(Nominatim\DB::class)
|
|
||||||
->setMethods(array('connect', 'getOne'))
|
|
||||||
->getMock();
|
|
||||||
|
|
||||||
// return no word_id
|
|
||||||
$oDbStub->method('getOne')
|
|
||||||
->will($this->returnCallback(function ($sql) {
|
|
||||||
if (preg_match("/make_standard_name\('a'\)/", $sql)) return 'a';
|
|
||||||
if (preg_match('/SELECT word_id, word_token/', $sql)) return null;
|
|
||||||
}));
|
|
||||||
|
|
||||||
$oStatus = new Status($oDbStub);
|
|
||||||
$this->assertNull($oStatus->status());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function testOK()
|
public function testOK()
|
||||||
{
|
{
|
||||||
$oDbStub = $this->getMockBuilder(Nominatim\DB::class)
|
$oDbStub = $this->getMockBuilder(Nominatim\DB::class)
|
||||||
|
|||||||
Reference in New Issue
Block a user