server/src/tests/Services/GeonamesResolverTest.php
changeset 304 20071981ba2a
child 537 d2e6ee099125
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/tests/Services/GeonamesResolverTest.php	Tue Sep 27 23:43:29 2016 +0200
@@ -0,0 +1,224 @@
+<?php
+
+use GuzzleHttp\Client;
+use GuzzleHttp\Handler\MockHandler;
+use GuzzleHttp\HandlerStack;
+use GuzzleHttp\Psr7\Response;
+use GuzzleHttp\Psr7\Request;
+use GuzzleHttp\Middleware;
+use GuzzleHttp\Exception\RequestException;
+
+
+class GeonamesResolverTest extends TestCase
+{
+
+    const TEST_INPUT_DOCS = [
+        '2968801' => __DIR__.'/files/GeonamesResolverTest/geonames_rdf_2968801.rdf',
+        '2988507' => __DIR__.'/files/GeonamesResolverTest/geonames_rdf_2988507.rdf',
+        '6255148' => __DIR__.'/files/GeonamesResolverTest/geonames_rdf_6255148.rdf',
+    ];
+
+    private $inputGraphes = [];
+
+    private function getClient($keys, &$container) {
+        $history = Middleware::history($container);
+        $responses = [];
+        foreach ($keys as $key) {
+            if(array_key_exists($key, self::TEST_INPUT_DOCS)) {
+                array_push($responses, new Response(200, [], file_get_contents(self::TEST_INPUT_DOCS[$key])));
+            }
+            else {
+                array_push($responses, new Response(intval($key)));  
+            }
+
+        }
+        $mock = new MockHandler($responses);
+        $handler = HandlerStack::create($mock);
+        $handler->push($history);
+
+        return new Client(['handler' => $handler]);
+    }
+
+    public function setUp() {
+        parent::setup();
+
+        foreach(self::TEST_INPUT_DOCS as $key => $inputDoc) {
+            $this->inputGraphes[$key] =  new EasyRdf\Graph(config('corpusparole.geonames_base_url').$key."/", file_get_contents($inputDoc));
+        }
+    }    
+
+    /**
+     * Just test the setup.
+     *
+     * @return void
+     */
+    public function testSetup()
+    {
+        $this->assertTrue(true);
+    }
+
+    /**
+     * test getLabel
+     */
+    public function testGetLabel() {
+
+        $container = [];
+        $client = $this->getClient(['2968801'], $container);
+
+        $resolver = $this->app->make('CorpusParole\Services\GeonamesResolver', [$client]);
+        $label = $resolver->getLabel('2968801');
+
+        $this->assertEquals('Villedieu-les-Poêles', $label, "Label is Villedieu-les-Poêles");
+
+        $this->assertCount(1, $container);
+
+        $this->assertEquals("http://sws.geonames.org/2968801/", (string)$container[0]['request']->getUri());
+
+    }
+
+    /**
+     * test getLabel
+     */
+    public function testGetLabel2988507() {
+
+        $container = [];
+        $client = $this->getClient(['2988507'], $container);
+
+        $resolver = $this->app->make('CorpusParole\Services\GeonamesResolver', [$client]);
+        $label = $resolver->getLabel('2988507');
+
+        $this->assertEquals('Paris', $label, "Label is Paris");
+
+        $this->assertCount(1, $container);
+
+        $this->assertEquals("http://sws.geonames.org/2988507/", (string)$container[0]['request']->getUri());
+
+    }
+
+    /**
+     * test getLabel
+     */
+    public function testGetLabel6255148() {
+
+        $container = [];
+        $client = $this->getClient(['6255148'], $container);
+
+        $resolver = $this->app->make('CorpusParole\Services\GeonamesResolver', [$client]);
+        $label = $resolver->getLabel('6255148');
+
+        $this->assertEquals('Europe', $label, "Label is Europe");
+
+        $this->assertCount(1, $container);
+
+        $this->assertEquals("http://sws.geonames.org/6255148/", (string)$container[0]['request']->getUri());
+
+    }
+
+
+    /**
+     * test getLabel 404
+     */
+    public function testGetLabel404() {
+        $container = [];
+        $client = $this->getClient(['404'], $container);
+
+        $resolver = $this->app->make('CorpusParole\Services\GeonamesResolver', [$client]);
+
+        $name = $resolver->getLabel('12345');
+
+        $this->assertNull($name);
+        
+        $this->assertCount(1, $container);
+        $this->assertEquals("http://sws.geonames.org/12345/", (string)$container[0]['request']->getUri());
+
+    }
+
+    /**
+     * test getLabel unknown
+     */
+    public function testGetLabelUnknown() {
+        $container = [];
+        $client = $this->getClient(['6255148'], $container);
+
+        $resolver = $this->app->make('CorpusParole\Services\GeonamesResolver', [$client]);
+
+        $name = $resolver->getLabel('12345');
+
+        $this->assertNull($name);
+        
+        $this->assertCount(1, $container);
+        $this->assertEquals("http://sws.geonames.org/12345/", (string)$container[0]['request']->getUri());
+
+    }
+
+    /**
+     * test getLabels
+     */
+    public function testGetLabels() {
+
+        $container = [];
+        $client = $this->getClient(['2968801', '2988507', '6255148'], $container);
+
+        $resolver = $this->app->make('CorpusParole\Services\GeonamesResolver', [$client]);
+        $labels = $resolver->getLabels(['2968801', '2988507', '6255148']);
+
+        $this->assertEquals(['2968801' => 'Villedieu-les-Poêles', '2988507' => 'Paris', '6255148' => 'Europe'] , $labels);
+
+        $this->assertCount(3, $container);
+
+        $this->assertEquals("http://sws.geonames.org/2968801/", (string)$container[0]['request']->getUri());
+        $this->assertEquals("http://sws.geonames.org/2988507/", (string)$container[1]['request']->getUri());
+        $this->assertEquals("http://sws.geonames.org/6255148/", (string)$container[2]['request']->getUri());
+
+    }
+
+    /**
+     * Test exception 401
+     * @expectedException        CorpusParole\Services\GeonamesResolverException
+     * @expectedExceptionMessage Client error: `GET http://sws.geonames.org/12345/` resulted in a `401 Unauthorized` response:
+     * @expectedExceptionCode 401
+     */
+    public function test401Error() {
+        $container = [];
+        $client = $this->getClient(['401'], $container);
+
+        $resolver = $this->app->make('CorpusParole\Services\GeonamesResolver', [$client]);
+
+        $name = $resolver->getLabel('12345');
+    }
+
+
+    /**
+     * Test exception 500
+     * @expectedException        CorpusParole\Services\GeonamesResolverException
+     * @expectedExceptionMessage Server error: `GET http://sws.geonames.org/12345/` resulted in a `500 Internal Server Error` response:
+     * @expectedExceptionCode 500
+     */
+    public function test500Error() {
+        $container = [];
+        $client = $this->getClient(['500'], $container);
+
+        $resolver = $this->app->make('CorpusParole\Services\GeonamesResolver', [$client]);
+
+        $name = $resolver->getLabel('12345');
+    }
+
+    /**
+     * Test exception malformed
+     * @expectedException        CorpusParole\Services\GeonamesResolverException
+     * @expectedExceptionMessage GeonamesId not in correct format
+     * @expectedExceptionCode 400
+     */
+    public function testMalformedError() {
+        $container = [];
+        $client = $this->getClient(['200'], $container);
+
+        $resolver = $this->app->make('CorpusParole\Services\GeonamesResolver', [$client]);
+
+        $name = $resolver->getLabel('abcd');
+    }
+
+
+
+
+}