diff -r ef32bf573d9c -r bd4bc1db4f40 server/src/tests/Models/DocumentTest.php --- a/server/src/tests/Models/DocumentTest.php Thu Sep 08 19:15:46 2016 +0200 +++ b/server/src/tests/Models/DocumentTest.php Thu Sep 22 12:38:24 2016 +0200 @@ -3,122 +3,53 @@ use CorpusParole\Models\Document; use CorpusParole\Libraries\CocoonUtils; +use EasyRdf\RdfNamespace; + /** * */ class DocumentTest extends TestCase { - const TEST_DOC = << . - @prefix rdfs: . - @prefix sesame: . - @prefix owl: . - @prefix xsd: . - @prefix fn: . - - <%1\$scrdo-CFPP2000_35_SOUND> a ; - ; - "Langage et langues : description, théorisation, transmission" ; - , , ; - ; - ; - "Corpus de la Parole"@fr ; - . + const TEST_INPUT_DOCS = [ + 'TEST' => __DIR__.'/files/DocumentTest/test_doc.ttl', + 'TEST_NO_GEOINFO' => __DIR__.'/files/DocumentTest/test_no_geoinfo.ttl', + ]; - a ; - "Freely available for non-commercial use" ; - "2010-11-17"^^ ; - "PT48M26S" ; - "2013-10-12T14:35:57+02:00"^^ ; - ; - , "Tanguy, Noalig" , "Chevrier, Michel" , "Kiliç, Ozgur" , "Salvegas, Etienne" , "du-Breuil-de-Pont-en-Auge, Augustin" , "du-Breuil-de-Pont-en-Auge, Benoît" ; - "Enregistrement issu du Corpus de Français Parlé Parisien des années 2000 (CFPP2000)"@fr , "Quartier(s) concerné(s) : Paris 3e, et 20e (pour l'âge adulte); Anonymisation : Noalig TANGUY;"@fr ; - "ark:/87895/1.17-375004" , "%2\$scrdo-CFPP2000_35_SOUNDid" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35" , "Cote producteur: [03-01] Ozgur_Kilic_H_32_alii_3e"@fr , "ark:/87895/1.17-372593" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35_SOUND" ; - ; - ; - , "anthropological_linguistics"^^ , "lexicography"^^ , "phonetics"^^ , , , , "general_linguistics"^^ , , "text_and_corpus_linguistics"^^ , "Français"@fr , , "phonology"^^ , "semantics"^^ , "sociolinguistics"^^ , "syntax"^^ , "typology"^^ , , , "discourse_analysis"^^ , "historical_linguistics"^^ , "language_documentation"^^ , , , , , , "mathematical_linguistics"^^ ; - "Entretien de Ozgur Kiliç 2"@fr ; - , , , "primary_text"^^ , , "narrative"^^ , "report"^^ , "unintelligible_speech"^^ ; - "2013-10-12"^^ ; - [ - a ; - owl:sameAs ; - "FR"^^ , "France, Île-de-France, Paris, Université Sorbonne Nouvelle Paris 3, site Censier"@fr , "Domicile de Ozgur Kiliç"@fr , "France, Île-de-France, Paris 20"@fr - ]; - , ; - ; - ; - "Tanguy, Noalig" ; - "Quartier concerné : 3e"@fr ; - "Chevrier, Michel" , "Kiliç, Ozgur" , "Salvegas, Etienne" , "du-Breuil-de-Pont-en-Auge, Augustin" , "du-Breuil-de-Pont-en-Auge, Benoît" ; - . - - - a ; - "application/xml"^^ ; - "Freely available for non-commercial use" ; - "2010-11-17"^^ ; - "2013-11-04T22:20:07+01:00"^^ ; - ; - . - - a ; - "audio/x-wav"^^ ; - "Freely available for non-commercial use" ; - "2010-11-17"^^ ; - "PT48M26S" ; - "2013-10-12T14:35:57+02:00"^^ ; - . - - a ; - "audio/mpeg"^^ ; - "Freely available for non-commercial use" ; - "2010-11-17"^^ ; - "PT48M26S" ; - "2013-10-12T14:35:57+02:00"^^ ; - ; - . - - a ; - "audio/x-wav"^^ ; - "Freely available for non-commercial use" ; - "2010-11-17"^^ ; - "PT48M26S" ; - "2013-10-12T14:35:57+02:00"^^ ; - ; - . -EOT; - + private $inputGraphes = []; public function setUp() { + parent::setup(); - parent::setup(); - $this->graph = new EasyRdf\Graph(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", sprintf(DocumentTest::TEST_DOC, config('corpusparole.corpus_doc_id_base_uri'), config('corpusparole.corpus_id_scheme'))); + foreach(self::TEST_INPUT_DOCS as $key => $inputDoc) { + $this->inputGraphes[$key] = new EasyRdf\Graph(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", sprintf(file_get_contents($inputDoc), config('corpusparole.corpus_doc_id_base_uri'), config('corpusparole.corpus_id_scheme'))); + } + } public function testConstructor() { - $this->assertNotNull($this->graph, 'Graph shoud not be null'); + $this->assertNotNull($this->inputGraphes['TEST'], 'Graph shoud not be null'); - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $this->assertEquals(config('corpusparole.corpus_id_scheme').'crdo-CFPP2000_35_SOUNDid',$doc->getId(),'Must have the correct id'); } public function testTitle() { - $this->assertNotNull($this->graph, 'Graph shoud not be null'); + $this->assertNotNull($this->inputGraphes['TEST'], 'Graph shoud not be null'); - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $this->assertEquals("Entretien de Ozgur Kiliç 2",$doc->getTitle(),'Must have correct title'); $this->assertInstanceOf(EasyRdf\Literal::class, $doc->getTitle(), "Title must be a literal"); $this->assertEquals('fr', $doc->getTitle()->getLang(), "Language title must be fr"); } + public function testModified() { - $this->assertNotNull($this->graph, 'Graph shoud not be null'); + $this->assertNotNull($this->inputGraphes['TEST'], 'Graph shoud not be null'); - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $this->assertInstanceOf(EasyRdf\Literal::class, $doc->getModified(), "Modified must be a literal"); $this->assertEquals("http://purl.org/dc/terms/W3CDTF", $doc->getModified()->getDatatypeURI(), "type must be http://purl.org/dc/terms/W3CDTF"); $this->assertEquals("2013-10-12T14:35:57+02:00", $doc->getModified(), "modified must be 2013-10-12T14:35:57+02:00"); @@ -127,7 +58,7 @@ public function testSetModified() { $currentTime = gmdate(DateTime::ATOM); - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $doc->setModified($currentTime); $this->assertInstanceOf(EasyRdf\Literal::class, $doc->getModified(), "Modified must be a literal"); $this->assertEquals("http://purl.org/dc/terms/W3CDTF", $doc->getModified()->getDatatypeURI(), "type must be http://purl.org/dc/terms/W3CDTF"); @@ -135,7 +66,7 @@ } public function testSetModifiedNull() { - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $doc->setModified(); $this->assertInstanceOf(EasyRdf\Literal::class, $doc->getModified(), "Modified must be a literal"); $this->assertEquals("http://purl.org/dc/terms/W3CDTF", $doc->getModified()->getDatatypeURI(), "type must be http://purl.org/dc/terms/W3CDTF"); @@ -146,7 +77,7 @@ public function testPublisher() { - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $this->assertCount(1, $doc->getPublishers(), 'Publisher is an array of size 1'); $this->assertInstanceOf('EasyRdf\Resource', $doc->getPublishers()[0], 'publisher is a resource'); @@ -154,7 +85,7 @@ } public function testMediaArray() { - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $this->assertCount(3, $doc->getMediaArray(), "Media array must be of size 3"); //print_r($doc->getMediaArray()); @@ -191,7 +122,7 @@ } public function testGetTypes() { - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $this->assertCount(8, $doc->getTypes(), "types array must be of size 5"); @@ -207,7 +138,7 @@ } public function testGetOtherTypes() { - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $this->assertCount(5, $doc->getOtherTypes(), "types array must be of size 5"); @@ -223,7 +154,7 @@ } public function testGetDiscourseTypes() { - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $this->assertCount(3, $doc->getDiscourseTypes(), "types array must be of size 3"); @@ -234,7 +165,7 @@ } public function testCloneDocument() { - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $doc2 = clone $doc; @@ -245,8 +176,8 @@ } public function testIsIsomorphic() { - $doc1 = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); - $doc2 = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", new EasyRdf\Graph(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", sprintf(DocumentTest::TEST_DOC, config('corpusparole.corpus_doc_id_base_uri'), config('corpusparole.corpus_id_scheme')))); + $doc1 = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); + $doc2 = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", new EasyRdf\Graph(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", sprintf(file_get_contents(DocumentTest::TEST_INPUT_DOCS['TEST']) , config('corpusparole.corpus_doc_id_base_uri'), config('corpusparole.corpus_id_scheme')))); $this->assertTrue($doc1->isIsomorphic($doc2),"document must be isomorphic"); @@ -259,7 +190,7 @@ $newDiscourseTypes = ['oratory','dialogue','narrative', 'formulaic', 'ludic']; - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $this->assertCount(3, $doc->getDiscourseTypes(), "types array must be of size 3"); $doc->updateDiscourseTypes($newDiscourseTypes); @@ -277,7 +208,7 @@ $newDiscourseTypes = ['oratory','dialogue','narrative', 'formulaic', 'ludic']; - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $doc->updateDiscourseTypes($newDiscourseTypes); @@ -305,7 +236,7 @@ } public function testUpdateTitle() { - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $oldTitle = $doc->getTitle(); @@ -333,16 +264,16 @@ $newDiscourseTypes = ['oratory','dialogue','narrative']; - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $doc->updateDiscourseTypes($newDiscourseTypes); - $doc2 = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", new EasyRdf\Graph(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", sprintf(DocumentTest::TEST_DOC, config('corpusparole.corpus_doc_id_base_uri'), config('corpusparole.corpus_id_scheme')))); + $doc2 = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", new EasyRdf\Graph(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", sprintf(file_get_contents(DocumentTest::TEST_INPUT_DOCS['TEST']), config('corpusparole.corpus_doc_id_base_uri'), config('corpusparole.corpus_id_scheme')))); $this->assertFalse($doc->isIsomorphic($doc2),"document must not be isomorphic after adding discourse type"); } public function testGetContributors() { - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $contributors = $doc->getContributors(); @@ -358,7 +289,7 @@ } public function testSetContributors() { - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $contributors = $doc->getContributors(); @@ -435,7 +366,7 @@ } public function testGetSubjects() { - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $subjects = $doc->getSubjects(); @@ -453,7 +384,7 @@ } public function testSetSubjects() { - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $newSubjects = [ "http://ark.bnf.fr/ark:/12148/cb13318415c", @@ -491,7 +422,7 @@ //TODO: test null transcript + null media array public function testJsonSerialize() { - $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph); + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); $json = $doc->jsonSerialize(); @@ -506,5 +437,68 @@ } + public function testAddGeoInfo() { + + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST_NO_GEOINFO']); + //$doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); + + $res = $doc->addGeoInfo(); + $res->commit(); + + $this->assertNotNull($res, "A new georesource object must have been created"); + + $this->assertInstanceOf('CorpusParole\Models\GeoResource', $res, "the object created must be a geo resource"); + + $allSpatials = $doc->getProvidedCHO()->allResources(""); + + $this->assertCount(1, $allSpatials, "Must have only one spatial node"); + + $spatial = $allSpatials[0]; + + $this->assertTrue($spatial->isBNode(), "Spatial node must be a blank node"); + $this->assertEquals($spatial->typeAsResource(), "http://www.europeana.eu/schemas/edm/Place", "type must be a http://www.europeana.eu/schemas/edm/Place"); + + $this->assertTrue($doc->isDirty(), "Document must be dirty"); + $this->assertEquals(1, $doc->deltaCount(), "Must have only one delta."); + + $this->assertNotNull($res->getCurrentDelta(), "CurrentDelta is not null"); + $this->assertTrue($res->getCurrentDelta()->getDeletedGraph()->isEmpty(), "deleted graph must be empty"); + $this->assertEmpty($res->getCurrentDelta()->getDeleteWhere(), "Delete where must be empty"); + $this->assertNotNull($res->getCurrentDelta()->getAddedGraph(), "Added graph is not null"); + $this->assertEquals(2, $res->getCurrentDelta()->getAddedGraph()->countTriples(), "Added graph must have 2 triples"); + + } + + + public function testAddGeoInfoNotEmpty() { + + $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']); + + $res = $doc->addGeoInfo(); + $res->commit(); + + $this->assertNotNull($res, "A new georesource object must have been created"); + + $this->assertInstanceOf('CorpusParole\Models\GeoResource', $res, "the object created must be a geo resource"); + + $allSpatials = $doc->getProvidedCHO()->allResources(""); + + $this->assertCount(1, $allSpatials, "Must have only one spatial node"); + + $spatial = $allSpatials[0]; + + $this->assertTrue($spatial->isBNode(), "Spatial node must be a blank node"); + $this->assertEquals($spatial->typeAsResource(), "http://www.europeana.eu/schemas/edm/Place", "type must be a http://www.europeana.eu/schemas/edm/Place"); + + $this->assertTrue($doc->isDirty(), "Document must not be dirty"); + $this->assertEquals(1, $doc->deltaCount(), "Must have only one delta."); + + $this->assertNotNull($res->getCurrentDelta(), "CurrentDelta is not null"); + $this->assertTrue($res->getCurrentDelta()->getDeletedGraph()->isEmpty(), "deleted graph must be empty"); + $this->assertCount(1, $res->getCurrentDelta()->getDeleteWhere(), "Delete where must have one element"); + $this->assertNotNull($res->getCurrentDelta()->getAddedGraph(), "Added graph is not null"); + $this->assertEquals(9, $res->getCurrentDelta()->getAddedGraph()->countTriples(), "Added graph must have 7 triples"); + } + }