From d8f7fb803f364a6fae738b9ff4e01db391d1b9fb Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Wed, 25 Jan 2023 13:39:54 +0000 Subject: [PATCH] MDL-77040 core: assert types of returned Geoplugin data, not values. The results we get from these tests are beyond our control, and are unreliable for use in testing. See also previous change 215cd2d8 in similar tests. --- iplookup/tests/geoplugin_test.php | 50 ++++++++++++++++++------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/iplookup/tests/geoplugin_test.php b/iplookup/tests/geoplugin_test.php index 8b66e1e6d87..08167e34497 100644 --- a/iplookup/tests/geoplugin_test.php +++ b/iplookup/tests/geoplugin_test.php @@ -26,39 +26,49 @@ namespace core; */ class geoplugin_test extends \advanced_testcase { - public function setUp(): void { + /** + * Load required test libraries + */ + public static function setUpBeforeClass(): void { global $CFG; - require_once("$CFG->libdir/filelib.php"); - require_once("$CFG->dirroot/iplookup/lib.php"); + require_once("{$CFG->dirroot}/iplookup/lib.php"); + } + /** + * In order to execute this test PHPUNIT_LONGTEST should be defined as true in phpunit.xml or directly in config.php + */ + public function setUp(): void { if (!PHPUNIT_LONGTEST) { - // we do not want to DDOS their server, right? $this->markTestSkipped('PHPUNIT_LONGTEST is not defined'); } - - $this->resetAfterTest(); - - $CFG->geoipfile = ''; } - public function test_ipv4() { + /** + * Test IPv4 address + * + * @covers ::iplookup_find_location + */ + public function test_ipv4(): void { $result = iplookup_find_location('50.0.184.0'); - $this->assertEquals('array', gettype($result)); - $this->assertEquals('Santa Rosa', $result['city']); - $this->assertEqualsWithDelta(-122.7128, $result['longitude'], 0.1, 'Coordinates are out of accepted tolerance'); - $this->assertEqualsWithDelta(38.4354, $result['latitude'], 0.1, 'Coordinates are out of accepted tolerance'); + $this->assertIsArray($result); + $this->assertIsFloat($result['latitude']); + $this->assertIsFloat($result['longitude']); + $this->assertIsString($result['city']); + $this->assertIsString($result['country']); + $this->assertIsArray($result['title']); + $this->assertIsString($result['title'][0]); + $this->assertIsString($result['title'][1]); $this->assertNull($result['error']); - $this->assertEquals('array', gettype($result['title'])); - $this->assertEquals('Santa Rosa', $result['title'][0]); - $this->assertEquals('United States', $result['title'][1]); } - public function test_geoip_ipv6() { + /** + * Test IPv6 address (unsupported by Geoplugin) + * + * @covers ::iplookup_find_location + */ + public function test_ipv6(): void { $result = iplookup_find_location('2a01:8900:2:3:8c6c:c0db:3d33:9ce6'); - - $this->assertNotNull($result['error']); $this->assertEquals($result['error'], get_string('invalidipformat', 'error')); } } -