death-notifier/src/test/php/com/fwdekker/deathnotifier/wikipedia/WikipediaTest.php

158 lines
5.7 KiB
PHP

<?php /** @noinspection PhpUnhandledExceptionInspection */
namespace com\fwdekker\deathnotifier\wikipedia;
use PHPUnit\Framework\TestCase;
/**
* Integration tests for {@see Wikipedia}.
*
* These tests are slow because they directly communicate with Wikipedia. No mocking going on here. This also means that
* in several years, some of these tests will fail.
*/
class WikipediaTest extends TestCase
{
/**
* @var Wikipedia the `Wikipedia` instance to test on
*/
private Wikipedia $wikipedia;
protected function setUp(): void
{
$this->wikipedia = new Wikipedia();
}
public function test_query_returns_missing_for_nonsense_title(): void
{
$output = $this->wikipedia->query_people_info(["This article does not exist."], resolve_moves: false);
self::assertEmpty($output->results);
self::assertEmpty($output->redirects->getIterator());
self::assertContains("This article does not exist.", $output->missing);
}
public function test_query_returns_redirected_for_normalized_title(): void
{
$output = $this->wikipedia->query_people_info(["donald Trump"], resolve_moves: false);
self::assertArrayHasKey("Donald Trump", $output->results);
self::assertEquals("Donald Trump", $output->redirects->resolve("donald Trump"));
self::assertEmpty($output->missing);
}
public function test_query_returns_redirected_for_alternative_title(): void
{
$output = $this->wikipedia->query_people_info(["Donald J. Trump"], resolve_moves: false);
self::assertArrayHasKey("Donald Trump", $output->results);
self::assertEquals("Donald Trump", $output->redirects->resolve("Donald J. Trump"));
self::assertEmpty($output->missing);
}
public function test_query_returns_redirected_for_normalized_alternative_title(): void
{
$output = $this->wikipedia->query_people_info(["donald J. Trump"], resolve_moves: false);
self::assertArrayHasKey("Donald Trump", $output->results);
self::assertEquals("Donald Trump", $output->redirects->resolve("donald J. Trump"));
self::assertEmpty($output->missing);
}
public function test_query_returns_no_missing_or_redirects_for_correct_title(): void
{
$output = $this->wikipedia->query_people_info(["Donald Trump"], resolve_moves: false);
self::assertArrayHasKey("Donald Trump", $output->results);
self::assertEmpty($output->redirects->getIterator());
self::assertEmpty($output->missing);
}
public function test_query_returns_missing_if_page_deleted_and_moved_but_resolve_is_disabled(): void
{
$output = $this->wikipedia->query_people_info(["MILK FART"], resolve_moves: false);
self::assertEmpty($output->results);
self::assertEmpty($output->redirects->getIterator());
self::assertContains("MILK FART", $output->missing);
}
public function test_query_resolves_move_if_page_was_deleted(): void
{
$output = $this->wikipedia->query_people_info(["MILK FART"], resolve_moves: true);
self::assertArrayHasKey("Ben Shapiro", $output->results);
self::assertEquals("Ben Shapiro", $output->redirects->resolve("MILK FART"));
self::assertEmpty($output->missing);
}
public function test_query_resolves_move_and_redirect_if_page_was_deleted(): void
{
$output = $this->wikipedia->query_people_info(["Asdfasdf"], resolve_moves: true);
self::assertArrayHasKey("Tom E. Beer", $output->results);
self::assertEquals("Tom E. Beer", $output->redirects->resolve("Asdfasdf"));
self::assertEmpty($output->missing);
}
public function test_query_detects_non_person_page(): void
{
$output = $this->wikipedia->query_people_info(["Milk"], resolve_moves: false);
self::assertEquals(ArticleType::Other, $output->results["Milk"]["type"]);
}
public function test_query_detects_disambiguation_page(): void
{
$output = $this->wikipedia->query_people_info(["Joseph"], resolve_moves: false);
self::assertEquals(ArticleType::Disambiguation, $output->results["Joseph"]["type"]);
}
public function test_query_detects_index_page(): void
{
$output = $this->wikipedia->query_people_info(["ASDF"], resolve_moves: false);
self::assertEquals(ArticleType::Disambiguation, $output->results["ASDF"]["type"]);
}
public function test_query_detects_person_page(): void
{
$output = $this->wikipedia->query_people_info(["Joe Biden"], resolve_moves: false);
self::assertEquals(ArticleType::Person, $output->results["Joe Biden"]["type"]);
}
public function test_query_detects_alive_person(): void
{
$output = $this->wikipedia->query_people_info(["ContraPoints"], resolve_moves: false);
self::assertEquals(PersonStatus::Alive, $output->results["ContraPoints"]["status"]);
}
public function test_query_detects_dead_person(): void
{
$output = $this->wikipedia->query_people_info(["Adolf Hitler"], resolve_moves: false);
self::assertEquals(PersonStatus::Dead, $output->results["Adolf Hitler"]["status"]);
}
public function test_query_detects_missing_person(): void
{
$output = $this->wikipedia->query_people_info(["Sada Abe"], resolve_moves: false);
self::assertEquals(PersonStatus::Dead, $output->results["Sada Abe"]["status"]);
}
public function test_query_detects_possibly_living_person(): void
{
$output = $this->wikipedia->query_people_info(["Judge Edward Aaron"], resolve_moves: false);
self::assertEquals(PersonStatus::PossiblyAlive, $output->results["Judge Edward Aaron"]["status"]);
}
}