author | ymh <ymh.work@gmail.com> |
Thu, 02 Jun 2016 18:24:19 +0200 | |
changeset 168 | 17f10b56c079 |
parent 133 | 821253d361d1 |
permissions | -rw-r--r-- |
<?php use Mockery as m; use EasyRdf\Http; class BnfResolverTest extends TestCase { const BNF_EMPTY_RDF_RESP = <<<EOT { "head" : { "vars" : [ "s", "o" ] }, "results" : { "bindings" : [ ] } } EOT; const BNF_RDF_RESP = <<<EOT { "head":{ "link":[ ], "vars":[ "s", "o" ] }, "results":{ "distinct":false, "ordered":true, "bindings":[ { "s":{ "type":"uri", "value":"http://data.bnf.fr/ark:/12148/cb11946662b" }, "o":{ "type":"literal", "xml:lang":"fr", "value":"Parents et enfants" } } ] } } EOT; const BNF_2_ID_RDF_RESP = <<<EOT { "head":{ "link":[ ], "vars":[ "s", "o" ] }, "results":{ "distinct":false, "ordered":true, "bindings":[ { "s":{ "type":"uri", "value":"http://data.bnf.fr/ark:/12148/cb11946662b" }, "o":{ "type":"literal", "xml:lang":"fr", "value":"Parents et enfants" } }, { "s":{ "type":"uri", "value":"http://data.bnf.fr/ark:/12148/cb11965628b" }, "o":{ "type":"literal", "xml:lang":"fr", "value":"Frères et soeurs" } } ] } } EOT; private function setUpSparqlClient($queryResult) { $response = m::mock('EasyRdf\Http\Response') ->shouldReceive('isSuccessful')->andReturn(true) ->shouldReceive('getBody')->andReturn($queryResult) ->shouldReceive('getStatus')->andReturn(200) ->shouldReceive('getHeader')->andReturn('application/sparql-results+json;charset=UTF-8') ->mock(); $this->httpClient = m::mock('EasyRdf\Http\Client') ->shouldReceive('setConfig') ->shouldReceive('resetParameters') ->shouldReceive('setHeaders')//->with(m::on(function($headers) { print("HEADER => $headers\n"); return true;}),m::on(function($value) { print("VALUE => $value\n"); return true;})) ->shouldReceive('setMethod') ->shouldReceive('setUri')//->with(m::on(function($uri) { print($uri."\n"); return true;})) ->shouldReceive('request')->andReturn($response) ->mock(); Http::setDefaultHttpClient($this->httpClient); $this->bnfResolver = $this->app->make('CorpusParole\Services\BnfResolverInterface'); } public function setUp() { parent::setUp(); } public function tearDown() { parent::tearDown(); m::close(); } /** * Just test the setup * * @return void */ public function testSetUp() { $this->assertTrue(true); } /** * resolve parents et enfants * @return void */ public function testResolveSingleId() { $this->setUpSparqlClient(self::BNF_RDF_RESP); $reslabel = $this->bnfResolver->getLabel("http://data.bnf.fr/ark:/12148/cb11946662b"); $this->assertEquals('parents et enfants', $reslabel, "Result must be parents et enfants"); } /** * resolve parents et enfants ark url * @return void */ public function testResolveSingleIdArkUrl() { $this->setUpSparqlClient(self::BNF_RDF_RESP); $reslabel = $this->bnfResolver->getLabel("http://ark.bnf.fr/ark:/12148/cb11946662b"); $this->assertEquals('parents et enfants', $reslabel, "Result must be parents et enfants"); } /** * resolve parents et enfants, ark id * @return void */ public function testResolveSingleIdArk() { $this->setUpSparqlClient(self::BNF_RDF_RESP); $reslabel = $this->bnfResolver->getLabel("ark:/12148/cb11946662b"); $this->assertEquals('parents et enfants', $reslabel, "Result must be parents et enfants"); } /** * resolve foo * @return void */ public function testResolveBadId() { $this->setUpSparqlClient(self::BNF_EMPTY_RDF_RESP); $reslabel = $this->bnfResolver->getLabel('ark:/12148/cb12345678b'); $this->assertNull($reslabel, "Result must be null"); } /** * resolve foo * @return void * @expectedException CorpusParole\Services\BnfResolverException * @expectedExceptionMessage the provided id "21dsasd;;" is not a BNF id * @expectedExceptionCode 0 */ public function testResolveBadFormat() { $this->setUpSparqlClient(self::BNF_EMPTY_RDF_RESP); $reslabel = $this->bnfResolver->getLabel('21dsasd;;'); } /** * resolve foo * @return void * @expectedException CorpusParole\Services\BnfResolverException * @expectedExceptionMessage the provided id "http://sdsasd.org/foo" is not a BNF id * @expectedExceptionCode 0 */ public function testResolveBadFormatFullId() { $this->setUpSparqlClient(self::BNF_EMPTY_RDF_RESP); $reslabel = $this->bnfResolver->getLabel('http://sdsasd.org/foo'); } /** * resolve parents et enfants and frères et soeurs * @return void */ public function testResolveMultipleId() { $this->setUpSparqlClient(self::BNF_2_ID_RDF_RESP); $reslabels = $this->bnfResolver->getLabels(['ark:/12148/cb11965628b','ark:/12148/cb11946662b']); $this->assertCount(2, $reslabels, "Must have 2 results"); $this->assertArrayHasKey('ark:/12148/cb11946662b', $reslabels); $this->assertArrayHasKey('ark:/12148/cb11965628b', $reslabels); $this->assertEquals('parents et enfants', $reslabels['ark:/12148/cb11946662b'], "Result for ark:/12148/cb11965628b must be parents et enfants"); $this->assertEquals('frères et soeurs', $reslabels['ark:/12148/cb11965628b'], "Result for ark:/12148/cb11946662b must be frères et soeurs"); } /** * resolve parents et enfants and frères et soeurs * @return void */ public function testResolveMultipleFullIdArkUrl() { $this->setUpSparqlClient(self::BNF_2_ID_RDF_RESP); $reslabels = $this->bnfResolver->getLabels(['http://ark.bnf.fr/ark:/12148/cb11946662b','http://ark.bnf.fr/ark:/12148/cb11965628b']); $this->assertCount(2, $reslabels, "Must have 2 results"); $this->assertArrayHasKey('http://ark.bnf.fr/ark:/12148/cb11946662b', $reslabels); $this->assertArrayHasKey('http://ark.bnf.fr/ark:/12148/cb11965628b', $reslabels); $this->assertEquals('parents et enfants', $reslabels['http://ark.bnf.fr/ark:/12148/cb11946662b'], "Result for http://ark.bnf.fr/ark:/12148/cb11946662b must be parents et enfants"); $this->assertEquals('frères et soeurs', $reslabels['http://ark.bnf.fr/ark:/12148/cb11965628b'], "Result for http://ark.bnf.fr/ark:/12148/cb11965628b must be frères et soeurs"); } /** * resolve parents et enfants and frères et soeurs * @return void */ public function testResolveMultipleFullIdDataUrl() { $this->setUpSparqlClient(self::BNF_2_ID_RDF_RESP); $reslabels = $this->bnfResolver->getLabels(['http://data.bnf.fr/ark:/12148/cb11946662b','http://data.bnf.fr/ark:/12148/cb11965628b']); $this->assertCount(2, $reslabels, "Must have 2 results"); $this->assertArrayHasKey('http://data.bnf.fr/ark:/12148/cb11946662b', $reslabels); $this->assertArrayHasKey('http://data.bnf.fr/ark:/12148/cb11965628b', $reslabels); $this->assertEquals('parents et enfants', $reslabels['http://data.bnf.fr/ark:/12148/cb11946662b'], "Result for http://data.bnf.fr/ark:/12148/cb11946662b must be parents et enfants"); $this->assertEquals('frères et soeurs', $reslabels['http://data.bnf.fr/ark:/12148/cb11965628b'], "Result for http://data.bnf.fr/ark:/12148/cb11965628b must be frères et soeurs"); } /** * check query * @return void */ public function testQuery() { $expectedUri = config('corpusparole.bnf_query_url')."?query=SELECT+%3Fs+%3Fo+WHERE+%7B%7B+%3Chttp%3A%2F%2Fdata.bnf.fr%2Fark%3A%2F12148%2Fcb11946662b%3E+%3Chttp%3A%2F%2Fwww.w3.org%2F2004%2F02%2Fskos%2Fcore%23prefLabel%3E+%3Fo.+%3Fs+%3Chttp%3A%2F%2Fwww.w3.org%2F2004%2F02%2Fskos%2Fcore%23prefLabel%3E+%3Fo.+FILTER%28%3Fs+%3D+%3Chttp%3A%2F%2Fdata.bnf.fr%2Fark%3A%2F12148%2Fcb11946662b%3E+%26%26+lang%28%3Fo%29+%3D+%22fr%22%29%7D+UNION+%7B+%3Chttp%3A%2F%2Fdata.bnf.fr%2Fark%3A%2F12148%2Fcb11965628b%3E+%3Chttp%3A%2F%2Fwww.w3.org%2F2004%2F02%2Fskos%2Fcore%23prefLabel%3E+%3Fo.+%3Fs+%3Chttp%3A%2F%2Fwww.w3.org%2F2004%2F02%2Fskos%2Fcore%23prefLabel%3E+%3Fo.+FILTER%28%3Fs+%3D+%3Chttp%3A%2F%2Fdata.bnf.fr%2Fark%3A%2F12148%2Fcb11965628b%3E+%26%26+lang%28%3Fo%29+%3D+%22fr%22%29%7D%7D"; $response = m::mock('EasyRdf\Http\Response') ->shouldReceive('isSuccessful')->andReturn(true) ->shouldReceive('getBody')->andReturn(self::BNF_EMPTY_RDF_RESP) //result not important ->shouldReceive('getStatus')->andReturn(200) ->shouldReceive('getHeader')->andReturn('application/sparql-results+json;charset=UTF-8') ->mock(); $this->httpClient = m::mock('EasyRdf\Http\Client') ->shouldReceive('setConfig') ->shouldReceive('resetParameters') ->shouldReceive('setHeaders')//->with(m::on(function($headers) { print("HEADER => $headers\n"); return true;}),m::on(function($value) { print("VALUE => $value\n"); return true;})) ->shouldReceive('setMethod') ->shouldReceive('setUri') ->with($expectedUri) //->with(m::on(function($uri) { print($uri."\n"); return true;})) ->shouldReceive('request')->andReturn($response) ->mock(); Http::setDefaultHttpClient($this->httpClient); $this->bnfResolver = $this->app->make('CorpusParole\Services\BnfResolverInterface'); $reslabels = $this->bnfResolver->getLabels(['ark:/12148/cb11946662b','ark:/12148/cb11965628b']); } }