*/ declare(strict_types = 1); use PHPUnit\Framework\TestCase; use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\Medium; use PHPUnit\Framework\Attributes\DataProvider; require_once __DIR__ . '/../../MDMysqli/test_connections.conf.php'; /** * This script contains tests for the Wikidata fetcher. */ #[medium] #[CoversClass(\NodaWikidataFetcher::class)] final class NodaWikidataFetcherTest extends TestCase { // Test for getting translations: Telugu private const TEST_LANG = 'te'; /** * Test to check whether the HTML page is correctly generated. * * @author Joshua Ramon Enslin * @group ValidOutput * * @return void */ public function testWikidataIdFromLink():void { self::assertEquals(NodaWikidataFetcher::getWikidataIdFromLink("https://www.wikidata.org/wiki/Q106697"), 'Q106697'); self::assertEquals(NodaWikidataFetcher::getWikidataIdFromLink("https://de.wikipedia.org/wiki/Fedor_Jagor"), 'Q106697'); } /** * Test to check whether the HTML page is correctly generated. * * @author Joshua Ramon Enslin * @group ValidOutput * * @return void */ public function testWikidataIdFromWikipediaRequiresWikipediaLink():void { self::assertEquals(NodaWikidataFetcher::getWikidataIdFromWikipedia("https://en.about.museum-digital.org/"), ''); } /** * Test to check whether the HTML page is correctly generated. * * @group ValidOutput * * @return void */ public function testCanGetWikidataIdByWikidataId():void { self::assertEquals(NodaWikidataFetcher::getWikidataIdFromWikidataLink("https://www.wikidata.org/wiki/Q106697"), "Q106697"); } /** * Test for cleaning wikidata info. * * @group ValidOutput * * @return void */ public function testCleanWikidataInput():void { $testStr = '"
Werbowez (Kossiw)
Вербовець
Wappen fehlt
Werbowez (Kossiw) (Ukraine)
Werbowez (Kossiw) (Ukraine)
Werbowez (Kossiw)
Basisdaten
Oblast: Oblast Iwano-Frankiwsk
Rajon: Rajon Kossiw
Höhe: 369 m
Fläche: 18,77 km²
Einwohner: 3.395 (2001)
Bevölkerungsdichte: 181 Einwohner je km²
Postleitzahlen: 78605
Vorwahl: +380 3478
Geographische Lage: 48° 21′ N, 25° 8′ OKoordinaten: 48° 20′ 32″ N, 25° 8′ 0″ O
KATOTTH: UA26100010030094355
KOATUU: 2623682401
Verwaltungsgliederung: 1 Dorf
Adresse: вул. Миру, буд. 15
78605 с. Вербовець
Website: Offizielle Webseite
Statistische Informationen
Werbowez (Kossiw) (Oblast Iwano-Frankiwsk)
Werbowez (Kossiw) (Oblast Iwano-Frankiwsk)
Werbowez (Kossiw)
i1

Werbowez (ukrainisch Вербовець; russisch Вербовец, polnisch Wierzbowiec; rumänisch Verboveț) ist ein Dorf in der ukrainischen Oblast Iwano-Frankiwsk mit etwa 3400 Einwohnern (2001).[1]

Blick auf das Dorf

Das um 1650 erstmals schriftlich erwähnte Dorf[2] liegt im Osten der historischen Landschaft Galizien am Ufer der Rybnyzja (Рибниця), einem 56 km langen Nebenfluss des Pruth 7 km nordöstlich vom Rajonzentrum Kossiw und 95 km südlich vom Oblastzentrum Iwano-Frankiwsk. Südlich der Ortschaft verläuft die Territorialstraße T–09–09.

Am 12. Juni 2020 wurde das Dorf ein Teil der neu gegründeten Stadtgemeinde Kossiw im Rajon Kossiw[3], bis dahin bildete es zusammen mit dem Dorf Staryj Kossiw (Старий Косів) die Landratsgemeinde Werbowez (Вербовецька сільська рада/Werbowezka silska rada) im Osten des Rajons.

  1. Ortswebseite auf der offiziellen Webpräsenz der Werchowna Rada; abgerufen am 14. November 2017 (ukrainisch)
  2. Ortsgeschichte Werbowez in der Geschichte der Städte und Dörfer der Ukrainischen SSR; abgerufen am 14. November 2017 (ukrainisch)
  3. Кабінет Міністрів України Розпорядження від 12 червня 2020 р. № 714-р "Про визначення адміністративних центрів та затвердження територій територіальних громад Івано-Франківської області"
" - (de.wikipedia.org 31.08.2023)'; $output = NodaWikidataFetcher::cleanWikidataInput($testStr); $expected = 'Werbowez (ukrainisch Вербовець; russisch Вербовец, polnisch Wierzbowiec; rumänisch Verboveț) ist ein Dorf in der ukrainischen Oblast Iwano-Frankiwsk mit etwa 3400 Einwohnern (2001).'; self::assertTrue( str_starts_with($output, $expected), "Start of parsed Wikipedia text should be:" . PHP_EOL . PHP_EOL . $expected . PHP_EOL . PHP_EOL . 'Real start text is: ' . PHP_EOL . PHP_EOL . substr($output, 0, 250) ); $output = NodaWikidataFetcher::cleanWikidataInput('

坐标48°20′32″N 25°8′0″E / 48.34222°N 25.13333°E / 48.34222; 25.13333

韋爾博韋齊烏克蘭語Вербовець),是烏克蘭的村落,位於該國西部伊萬諾-弗蘭科夫斯克州,由科索夫區負責管轄,始建於1456年,面積18.77平方公里,2001年人口3,395。

'); $expected = '韋爾博韋齊(烏克蘭語:Вербовець),是烏克蘭的村落,位於該國西部伊萬諾-弗蘭科夫斯克州,由科索夫區負責管轄,始建於1456年,面積18.77平方公里,2001年人口3,3'; self::assertTrue( str_starts_with($output, $expected), "Start of parsed Wikipedia text should be:" . PHP_EOL . PHP_EOL . $expected . PHP_EOL . PHP_EOL . 'Real start text is: ' . PHP_EOL . PHP_EOL . substr($output, 0, 250) ); } /** * Test for cleaning wikidata info. * * @group ValidOutput * * @return void */ public function testCleanWikidataInputWithoutHtml():void { $output = NodaWikidataFetcher::cleanWikidataInput('Werbowez (ukrainisch Вербовець; russisch Вербовец, polnisch Wierzbowiec; rumänisch Verboveț) ist ein Dorf in der ukrainischen Oblast Iwano-Frankiwsk mit etwa 3400 Einwohnern (2001).[1]'); $expected = 'Werbowez (ukrainisch Вербовець; russisch Вербовец, polnisch Wierzbowiec; rumänisch Verboveț) ist ein Dorf in der ukrainischen Oblast Iwano-Frankiwsk mit etwa 3400 Einwohnern (2001).'; self::assertTrue( str_starts_with($output, $expected), "Start of parsed Wikipedia text should be:" . PHP_EOL . PHP_EOL . $expected . PHP_EOL . PHP_EOL . 'Real start text is: ' . PHP_EOL . PHP_EOL . substr($output, 0, 250) ); } /** * Data provider for an actor that has a wikidata link and a Telugu translation. * * @return array */ public static function actorWithTlAndWikidataLinkProvider():array { $mysqli = md_main_mysqli_connect(); $result = $mysqli->do_read_query("SELECT `persinst_id`, `noda_nrinsource` FROM `" . DATABASENAME_NODA . "`.`noda` WHERE `noda_source` = 'Wikidata' AND EXISTS (SELECT 1 FROM `" . DATABASENAME_NODA . "`.`persinst_translation` WHERE `persinst_translation`.`persinst_id` = `noda`.`persinst_id` AND `trans_language` = '" . $mysqli->escape_string(self::TEST_LANG) . "')"); if (!$cur = $result->fetch_row()) { throw new Exception("Failed to identify an entry that has a wikidata entry and a translation for language " . self::TEST_LANG); } $result->close(); $mysqli->close(); return [ 'Actor with wikidata and translation' => [$cur[0], $cur[1]], ]; } /** * Data provider for a place that has a wikidata link and a Telugu translation. * * @return array */ public static function placeWithTlAndWikidataLinkProvider():array { $mysqli = md_main_mysqli_connect(); $result = $mysqli->do_read_query("SELECT `ort_id`, `noda_nrinsource` FROM `" . DATABASENAME_NODA . "`.`noda_orte` WHERE `noda_source` = 'Wikidata' AND EXISTS (SELECT 1 FROM `" . DATABASENAME_NODA . "`.`ort_translation` WHERE `ort_translation`.`ort_id` = `noda_orte`.`ort_id` AND `trans_language` = '" . $mysqli->escape_string(self::TEST_LANG) . "')"); if (!$cur = $result->fetch_row()) { throw new Exception("Failed to identify an entry that has a wikidata entry and a translation for language " . self::TEST_LANG); } $result->close(); $mysqli->close(); return [ 'Place with wikidata and translation' => [$cur[0], $cur[1]], ]; } /** * Data provider for an tag that has a wikidata link and a Telugu translation. * * @return array */ public static function tagWithTlAndWikidataLinkProvider():array { $mysqli = md_main_mysqli_connect(); $result = $mysqli->do_read_query("SELECT `tag_id`, `noda_nrinsource` FROM `" . DATABASENAME_NODA . "`.`noda_tag` WHERE `noda_source` = 'Wikidata' AND EXISTS (SELECT 1 FROM `" . DATABASENAME_NODA . "`.`tag_translation` WHERE `tag_translation`.`tag_id` = `noda_tag`.`tag_id` AND `trans_language` = '" . $mysqli->escape_string(self::TEST_LANG) . "')"); if (!$cur = $result->fetch_row()) { throw new Exception("Failed to identify an entry that has a wikidata entry and a translation for language " . self::TEST_LANG); } $result->close(); $mysqli->close(); return [ 'Tag with wikidata and translation' => [$cur[0], $cur[1]], ]; } /** * Test for fetching and recording translations for an actor. * * @param integer $actor_id Actor ID. * @param string $wikidata_id Wikidata ID. * * @return void */ #[DataProvider('actorWithTlAndWikidataLinkProvider')] public function testFetchingTranslationForPersinst(int $actor_id, string $wikidata_id):void { $mysqli = md_main_mysqli_connect(); $mysqli->do_update_query("DELETE FROM `" . DATABASENAME_NODA . "`.`persinst_translation` WHERE `persinst_id` = " . $actor_id . " AND `trans_language` = '" . $mysqli->escape_string(self::TEST_LANG) . "'"); self::assertEquals(0, MDMysqliTesting::queryNumRows($mysqli, " FROM `" . DATABASENAME_NODA . "`.`persinst_translation` WHERE `persinst_id` = " . $actor_id . " AND `trans_language` = '" . $mysqli->escape_string(self::TEST_LANG) . "'")); $data = NodaWikidataFetcher::getWikidataEntity($wikidata_id); $fetcher = new NodaWikidataFetcher($mysqli); $fetcher->getWikidataTranslationsForPersinst($data, $actor_id, [self::TEST_LANG]); self::assertEquals(1, MDMysqliTesting::queryNumRows($mysqli, " FROM `" . DATABASENAME_NODA . "`.`persinst_translation` WHERE `persinst_id` = " . $actor_id . " AND `trans_language` = '" . $mysqli->escape_string(self::TEST_LANG) . "'")); $mysqli->close(); } /** * Test for fetching and recording translations for an place. * * @param integer $place_id Place ID. * @param string $wikidata_id Wikidata ID. * * @return void */ #[DataProvider('placeWithTlAndWikidataLinkProvider')] public function testFetchingTranslationForPlace(int $place_id, string $wikidata_id):void { $mysqli = md_main_mysqli_connect(); $mysqli->do_update_query("DELETE FROM `" . DATABASENAME_NODA . "`.`ort_translation` WHERE `ort_id` = " . $place_id . " AND `trans_language` = '" . $mysqli->escape_string(self::TEST_LANG) . "'"); self::assertEquals(0, MDMysqliTesting::queryNumRows($mysqli, " FROM `" . DATABASENAME_NODA . "`.`ort_translation` WHERE `ort_id` = " . $place_id . " AND `trans_language` = '" . $mysqli->escape_string(self::TEST_LANG) . "'")); $data = NodaWikidataFetcher::getWikidataEntity($wikidata_id); $fetcher = new NodaWikidataFetcher($mysqli); $fetcher->getWikidataTranslationsForPlace($data, $place_id, [self::TEST_LANG]); self::assertEquals(1, MDMysqliTesting::queryNumRows($mysqli, " FROM `" . DATABASENAME_NODA . "`.`ort_translation` WHERE `ort_id` = " . $place_id . " AND `trans_language` = '" . $mysqli->escape_string(self::TEST_LANG) . "'")); $mysqli->close(); } /** * Test for fetching and recording translations for an tag. * * @param integer $tag_id Tag ID. * @param string $wikidata_id Wikidata ID. * * @return void */ #[DataProvider('tagWithTlAndWikidataLinkProvider')] public function testFetchingTranslationForTag(int $tag_id, string $wikidata_id):void { $mysqli = md_main_mysqli_connect(); $mysqli->do_update_query("DELETE FROM `" . DATABASENAME_NODA . "`.`tag_translation` WHERE `tag_id` = " . $tag_id . " AND `trans_language` = '" . $mysqli->escape_string(self::TEST_LANG) . "'"); self::assertEquals(0, MDMysqliTesting::queryNumRows($mysqli, " FROM `" . DATABASENAME_NODA . "`.`tag_translation` WHERE `tag_id` = " . $tag_id . " AND `trans_language` = '" . $mysqli->escape_string(self::TEST_LANG) . "'")); $data = NodaWikidataFetcher::getWikidataEntity($wikidata_id); $fetcher = new NodaWikidataFetcher($mysqli); $fetcher->getWikidataTranslationsForTag($data, $tag_id, [self::TEST_LANG]); self::assertEquals(1, MDMysqliTesting::queryNumRows($mysqli, " FROM `" . DATABASENAME_NODA . "`.`tag_translation` WHERE `tag_id` = " . $tag_id . " AND `trans_language` = '" . $mysqli->escape_string(self::TEST_LANG) . "'")); $mysqli->close(); } }