server/src/tests/Repositories/DocumentRepositoryIntegrationTest.php
changeset 279 5d2621f71f39
parent 277 bd4bc1db4f40
child 326 226d5b17a119
--- a/server/src/tests/Repositories/DocumentRepositoryIntegrationTest.php	Thu Sep 22 15:34:10 2016 +0200
+++ b/server/src/tests/Repositories/DocumentRepositoryIntegrationTest.php	Thu Sep 22 15:42:12 2016 +0200
@@ -15,87 +15,10 @@
 
 class DocumentRepositoryIntegrationTest extends TestCase {
 
-    const REPO_CREATION_TTL = <<<EOT
-    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
-    @prefix rep: <http://www.openrdf.org/config/repository#>.
-    @prefix sr: <http://www.openrdf.org/config/repository/sail#>.
-    @prefix sail: <http://www.openrdf.org/config/sail#>.
-    @prefix ms: <http://www.openrdf.org/config/sail/memory#>.
-
-    [] a rep:Repository ;
-        rep:repositoryID "%1\$s" ;
-        rdfs:label "%1\$s test repository" ;
-        rep:repositoryImpl [
-            rep:repositoryType "openrdf:SailRepository" ;
-            sr:sailImpl [
-                sail:sailType "openrdf:MemoryStore" ;
-                ms:persist false ;
-                ms:syncDelay 0
-            ]
-        ].
-EOT;
-
-    const TEST_DOC = <<<EOT
-    @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-    @prefix sesame: <http://www.openrdf.org/schema/sesame#> .
-    @prefix owl: <http://www.w3.org/2002/07/owl#> .
-    @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
-    @prefix fn: <http://www.w3.org/2005/xpath-functions#> .
-
-    _:genid-2267740936ad4d04a567e6787732f0dd-genid1 a <http://www.europeana.eu/schemas/edm/Place> ;
-        owl:sameAs <http://sws.geonames.org/3038033/> ;
-        <http://www.w3.org/2004/02/skos/core#note> "northlimit=47.431892250000033; southlimit=49.053971250000046;westlimit=6.846186050000028; eastlimit=8.232571550000074;"^^<http://purl.org/dc/terms/Box> , "FR"^^<http://purl.org/dc/terms/ISO3166> , "France, Alsace"@fr .
-
-    <%1\$scrdo-ALA_738> a <http://www.openarchives.org/ore/terms/Aggregation> ;
-        <http://www.europeana.eu/schemas/edm/aggregatedCHO> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_738> ;
-        <http://www.europeana.eu/schemas/edm/dataProvider> "Atlas linguistiques, cultures et parlers régionaux de France" ;
-        <http://www.europeana.eu/schemas/edm/hasView> <http://cocoon.huma-num.fr/data/ala/ALA_738.mp3> , <http://cocoon.huma-num.fr/data/ala/ALA_738_22km.wav> ;
-        <http://www.europeana.eu/schemas/edm/isShownAt> <http://corpusdelaparole.huma-num.fr/corpus-app#/detail/crdo-ALA_738> ;
-        <http://www.europeana.eu/schemas/edm/isShownBy> <http://cocoon.huma-num.fr/data/ala/masters/ALA_738.wav> ;
-        <http://www.europeana.eu/schemas/edm/provider> "Corpus de la Parole"@fr ;
-        <http://www.europeana.eu/schemas/edm/rights> <http://creativecommons.org/licenses/by-nc-nd/4.0/> .
+    const REPO_CREATION_TTL = __DIR__.'/files/DocumentRepositoryIntegrationTest/repo_creation.ttl';
 
-    <http://cocoon.huma-num.fr/data/ala/ALA_738.mp3> a <http://www.europeana.eu/schemas/edm/WebResource> ;
-        <http://purl.org/dc/elements/1.1/format> "audio/mpeg"^^<http://purl.org/dc/terms/IMT> ;
-        <http://purl.org/dc/terms/created> "1996"^^<http://purl.org/dc/terms/Period> ;
-        <http://purl.org/dc/terms/extent> "PT01H11M29S" ;
-        <http://purl.org/dc/terms/issued> "2014-11-10T14:27:08+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/ala/masters/ALA_738.wav> .
-
-    <http://cocoon.huma-num.fr/data/ala/masters/ALA_738.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
-        <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
-        <http://purl.org/dc/terms/created> "1996"^^<http://purl.org/dc/terms/Period> ;
-        <http://purl.org/dc/terms/extent> "PT01H11M29S" ;
-        <http://purl.org/dc/terms/issued> "2014-11-10T14:27:08+01:00"^^<http://purl.org/dc/terms/W3CDTF> .
-
-    <http://cocoon.huma-num.fr/data/ala/ALA_738_22km.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
-        <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
-        <http://purl.org/dc/terms/created> "1996"^^<http://purl.org/dc/terms/Period> ;
-        <http://purl.org/dc/terms/extent> "PT01H11M29S" ;
-        <http://purl.org/dc/terms/issued> "2014-11-10T14:27:08+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/ala/masters/ALA_738.wav> .
-
-    <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_738> a <http://www.europeana.eu/schemas/edm/ProvidedCHO> ;
-        <http://purl.org/dc/terms/created> "1996"^^<http://purl.org/dc/terms/Period> ;
-        <http://purl.org/dc/terms/extent> "PT01H11M29S" ;
-        <http://purl.org/dc/terms/issued> "2014-11-10T14:27:08+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/elements/1.1/contributor> <http://viaf.org/viaf/61542329> , <http://viaf.org/viaf/9122216> ;
-        <http://purl.org/dc/elements/1.1/description> "Extrait des enquêtes dialectologiques en vue de constituer un atlas linguistique de l'Alsace."@fr ;
-        <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/gsw> ;
-        <http://purl.org/dc/elements/1.1/publisher> "Atlas linguistiques, cultures et parlers régionaux de France" ;
-        <http://purl.org/dc/elements/1.1/rights> "Copyright (c) Département de dialectologie alsacienne et mosellane de l'Université de Strasbourg" ;
-        <http://purl.org/dc/elements/1.1/subject> <http://lexvo.org/id/iso639-3/gsw> , <http://ark.bnf.fr/ark:/12148/cb11931472p> , <http://ark.bnf.fr/ark:/12148/cb11931564b> , <http://ark.bnf.fr/ark:/12148/cb11932194d> , <http://ark.bnf.fr/ark:/12148/cb11933029x> , <http://ark.bnf.fr/ark:/12148/cb11933281k> , <http://ark.bnf.fr/ark:/12148/cb11934740m> , <http://ark.bnf.fr/ark:/12148/cb11935375d> , <http://ark.bnf.fr/ark:/12148/cb11935986q> , <http://ark.bnf.fr/ark:/12148/cb11936549n> , <http://ark.bnf.fr/ark:/12148/cb11937931x> , <http://ark.bnf.fr/ark:/12148/cb119392962> , <http://ark.bnf.fr/ark:/12148/cb119458243> , <http://ark.bnf.fr/ark:/12148/cb11946662b> , <http://ark.bnf.fr/ark:/12148/cb11947332t> , <http://ark.bnf.fr/ark:/12148/cb119481497> , <http://ark.bnf.fr/ark:/12148/cb119591726> , <http://ark.bnf.fr/ark:/12148/cb119756721> , <http://ark.bnf.fr/ark:/12148/cb119757609> , <http://ark.bnf.fr/ark:/12148/cb11975806s> , <http://ark.bnf.fr/ark:/12148/cb119759527> , <http://ark.bnf.fr/ark:/12148/cb12032030g> , <http://ark.bnf.fr/ark:/12148/cb12042429k> , <http://ark.bnf.fr/ark:/12148/cb12099148r> , <http://ark.bnf.fr/ark:/12148/cb12148936v> , <http://ark.bnf.fr/ark:/12148/cb12289036m> , <http://ark.bnf.fr/ark:/12148/cb13318335q> , <http://ark.bnf.fr/ark:/12148/cb133183540> , <http://ark.bnf.fr/ark:/12148/cb13318415c> , <http://ark.bnf.fr/ark:/12148/cb13318491g> , "anthropological_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "lexicography"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "phonetics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> ;
-        <http://purl.org/dc/elements/1.1/title> "Atlas Linguistique et ethnographique de l'Alsace - Enquetes sur la conscience linguistique - ALA_738"@fr ;
-        <http://purl.org/dc/elements/1.1/type> <http://ark.bnf.fr/ark:/12148/cb11932135w> , <http://ark.bnf.fr/ark:/12148/cb12481481z> , <http://purl.org/dc/dcmitype/Sound> , "dialogue"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> , "primary_text"^^<http://www.language-archives.org/OLAC/1.1/linguistic-type> ;
-        <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
-        <http://purl.org/dc/terms/available> "2004-07-03"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/isPartOf> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_ALA_CL> , <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_LANGUESDEFRANCE> ;
-        <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-nd/2.5/> ;
-        <http://purl.org/dc/terms/spatial> _:genid-2267740936ad4d04a567e6787732f0dd-genid1 ;
-        <http://www.language-archives.org/OLAC/1.1/depositor> <http://viaf.org/viaf/9122216> ;
-        <http://www.language-archives.org/OLAC/1.1/interviewer> <http://viaf.org/viaf/61542329> , <http://viaf.org/viaf/9122216> .
-EOT;
+    const TEST_DOC = __DIR__.'/files/DocumentRepositoryIntegrationTest/test_doc.ttl';
+    const TEST_DOC_NO_GEO = __DIR__.'/files/DocumentRepositoryIntegrationTest/test_doc_no_geo.ttl';
 
     function __construct(string $name = null) {
         parent::__construct($name);
@@ -103,7 +26,7 @@
 
     public function setUp() {
         parent::setUp();
-        $this->graph = new EasyRdf\Graph(config('corpusparole.corpus_doc_id_base_uri')."crdo-ALA_738", sprintf(DocumentRepositoryIntegrationTest::TEST_DOC, config('corpusparole.corpus_doc_id_base_uri')));
+        $this->graph = new EasyRdf\Graph(config('corpusparole.corpus_doc_id_base_uri')."crdo-ALA_738", sprintf(file_get_contents(DocumentRepositoryIntegrationTest::TEST_DOC), config('corpusparole.corpus_doc_id_base_uri')));
 
         $this->httpClient = new Client(['base_uri' => config('corpusparole.sesame_base_url')]);
         $this->sesameRepository = config('corpusparole.sesame_repository');
@@ -111,7 +34,7 @@
 
         $this->documentRepository = $this->app->make('CorpusParole\Repositories\DocumentRepository');
         $uniqueid = uniqid('corpusparole', true);
-        $repoCreateStmt = sprintf(DocumentRepositoryIntegrationTest::REPO_CREATION_TTL, $this->sesameRepository);
+        $repoCreateStmt = sprintf(file_get_contents(DocumentRepositoryIntegrationTest::REPO_CREATION_TTL), $this->sesameRepository);
         $this->httpClient->delete("repositories/$this->sesameRepository", ['http_errors' => false]);
         $this->httpClient->post('repositories/SYSTEM/statements', [
             'headers' => ['Content-type' => 'application/x-turtle;charset=UTF-8'],
@@ -120,20 +43,26 @@
         ]);
         $this->httpClient->put("repositories/$this->sesameRepository/statements", [
             'headers' => ['Content-type' => 'text/turtle;charset=UTF-8'],
-            'body' => sprintf(DocumentRepositoryIntegrationTest::TEST_DOC, config('corpusparole.corpus_doc_id_base_uri')),
+            'body' => sprintf(file_get_contents(DocumentRepositoryIntegrationTest::TEST_DOC), config('corpusparole.corpus_doc_id_base_uri')),
             'query' => ['context' => "<".config('corpusparole.corpus_doc_id_base_uri')."crdo-ALA_738>"],
         ]);
+        $this->httpClient->put("repositories/$this->sesameRepository/statements", [
+            'headers' => ['Content-type' => 'text/turtle;charset=UTF-8'],
+            'body' => sprintf(file_get_contents(DocumentRepositoryIntegrationTest::TEST_DOC_NO_GEO), config('corpusparole.corpus_doc_id_base_uri')),
+            'query' => ['context' => "<".config('corpusparole.corpus_doc_id_base_uri')."crdo-ALA_739>"],
+        ]);
+
     }
 
     public function tearDown() {
-        //$this->httpClient->delete("repositories/$this->sesameRepository");
+        $this->httpClient->delete("repositories/$this->sesameRepository");
         parent::tearDown();
     }
 
     public function testAll() {
         $expectedId = $this->corpusDocIdBaseUri.'crdo-ALA_738';
         $docList = $this->documentRepository->all();
-        $this->assertCount(1, $docList, "Should have one element");
+        $this->assertCount(2, $docList, "Should have one element");
 
         $resDoc = $docList[0];
 
@@ -147,7 +76,7 @@
     public function testGet() {
 
         $expectedId = $this->corpusDocIdBaseUri.'crdo-ALA_738';
-        $returnedGraph = new EasyRdf\Graph($expectedId, sprintf(DocumentRepositoryIntegrationTest::TEST_DOC,config('corpusparole.corpus_doc_id_base_uri')));
+        $returnedGraph = new EasyRdf\Graph($expectedId, sprintf(file_get_contents(DocumentRepositoryIntegrationTest::TEST_DOC),config('corpusparole.corpus_doc_id_base_uri')));
 
         $res = $this->documentRepository->get('crdo-ALA_738');
 
@@ -161,7 +90,7 @@
     public function testGetShort() {
 
         $expectedId = $this->corpusDocIdBaseUri.'crdo-ALA_738';
-        $returnedGraph = new EasyRdf\Graph($expectedId, sprintf(DocumentRepositoryIntegrationTest::TEST_DOC,config('corpusparole.corpus_doc_id_base_uri')));
+        $returnedGraph = new EasyRdf\Graph($expectedId, sprintf(file_get_contents(DocumentRepositoryIntegrationTest::TEST_DOC),config('corpusparole.corpus_doc_id_base_uri')));
 
         $res = $this->documentRepository->get('crdo-ALA_738', true);
 
@@ -172,6 +101,111 @@
         $this->assertTrue(EasyRdf\Isomorphic::isomorphic($res->getGraph(),$returnedGraph));
     }
 
+    public function testNoGeo() {
+        $expectedId = $this->corpusDocIdBaseUri.'crdo-ALA_739';
+        $returnedGraph = new EasyRdf\Graph($expectedId, sprintf(file_get_contents(DocumentRepositoryIntegrationTest::TEST_DOC_NO_GEO),config('corpusparole.corpus_doc_id_base_uri')));
+
+        $res = $this->documentRepository->get('crdo-ALA_739');
+
+        $this->assertNull($res->getGeoInfo(), "Must have no geo info");
+
+    }
+
+    /**
+     * @expectedException        CorpusParole\Libraries\CorpusParoleException
+     * @expectedExceptionMessage GetDeltaList called when changes are pending
+     */
+    public function testAddGeoNoCommit() {
+
+        $doc = $this->documentRepository->get('crdo-ALA_739');
+
+        $geoInfo = $doc->addGeoInfo();
+
+        $res = $this->documentRepository->save($doc);
+    }
+
+
+    public function testAddGeo() {
+
+        $doc = $this->documentRepository->get('crdo-ALA_739');
+
+        $geoInfo = $doc->addGeoInfo();
+        $geoInfo->commit();
+
+        $res = $this->documentRepository->save($doc);
+
+        $res = $this->documentRepository->get('crdo-ALA_739');
+
+        $geoInfo = $res->getGeoInfo();
+
+        $this->assertNotNull($geoInfo, "Must have Geo info");
+
+        $notes = $geoInfo->getNotes();
+
+        $this->assertTrue(is_array($notes));
+        $this->assertCount(0, $notes);
+
+        $refLocs = $geoInfo->getRefLocs();
+
+        $this->assertTrue(is_array($refLocs));
+        $this->assertCount(0,$refLocs);
+
+    }
+
+    public function testAddGeoExisting() {
+
+        $doc = $this->documentRepository->get('crdo-ALA_738');
+
+        $geoInfo = $doc->addGeoInfo();
+        $geoInfo->commit();
+
+        $res = $this->documentRepository->save($doc);
+
+        $res = $this->documentRepository->get('crdo-ALA_738');
+
+        $geoInfo = $res->getGeoInfo();
+
+        $this->assertNotNull($geoInfo, "Must have Geo info");
+
+        $notes = $geoInfo->getNotes();
+
+        $this->assertTrue(is_array($notes));
+        $this->assertCount(3, $notes);
+
+        $refLocs = $geoInfo->getRefLocs();
+
+        $this->assertTrue(is_array($refLocs));
+        $this->assertCount(1,$refLocs);
+
+    }
+
+    public function testGeoSetRefLoc() {
+
+        $doc = $this->documentRepository->get('crdo-ALA_738');
+        $geoInfo = $doc->addGeoInfo();
+
+        $newRefLocs = [ 'http://sws.geonames.org/2643743/' ];
+
+        $geoInfo->setRefLocs($newRefLocs);
+
+        $geoInfo->commit();
+
+        $res = $this->documentRepository->save($doc);
+
+        $res = $this->documentRepository->get('crdo-ALA_738');
+
+        $geoInfo = $res->getGeoInfo();
+
+        $refLocs = $geoInfo->getRefLocs();
+
+        $this->assertTrue(is_array($refLocs));
+        $this->assertCount(1,$refLocs);
+
+        $this->assertEquals(['http://sws.geonames.org/2643743/'], $refLocs);
+
+    }
+
+
 
     public function testSave() {
 
@@ -204,7 +238,7 @@
         $res = $this->documentRepository->getCount();
 
         $this->assertNotNull($res, "Res should not be null");
-        $this->assertSame(1, $res, "should heve only one document");
+        $this->assertSame(2, $res, "should have 2 documents");
     }