Exemplo n.º 1
0
 /**
  * @link https://familysearch.org/developers/docs/api/sources/Create_User-Uploaded_Source_usecase
  */
 public function testCreateUserUploadedSource()
 {
     $this->collectionState(new FamilyTreeStateFactory());
     /** @var FamilyTreePersonState $person */
     $person = $this->createPerson();
     $this->assertEquals(HttpStatus::CREATED, $person->getResponse()->getStatusCode(), $this->buildFailMessage(__METHOD__ . '(create person)', $person));
     $person = $person->get();
     $this->assertEquals(HttpStatus::OK, $person->getResponse()->getStatusCode(), $this->buildFailMessage(__METHOD__ . '(read person)', $person));
     $ds = new DataSource();
     $ds->setTitle("Sample Memory");
     $ds->setFile(ArtifactBuilder::makeTextFile());
     $a1 = $person->addArtifact($ds);
     $this->assertEquals(HttpStatus::CREATED, $a1->getResponse()->getStatusCode(), $this->buildFailMessage(__METHOD__ . '(add artifact)', $a1));
     $this->queueForDelete($a1);
     $this->assertEquals(HttpStatus::CREATED, $a1->getResponse()->getStatusCode());
     $artifacts = $person->readArtifacts();
     $this->assertEquals(HttpStatus::OK, $artifacts->getResponse()->getStatusCode());
     /** @var \Gedcomx\Rs\Client\SourceDescriptionState $artifact */
     $artifact = $person->readArtifacts();
     $this->assertEquals(HttpStatus::OK, $artifact->getResponse()->getStatusCode(), $this->buildFailMessage(__METHOD__ . '(read artifact)', $artifact));
     $artifact = $artifact->getSourceDescription();
     $memoryUri = $artifact->getLink("memory")->getHref();
     $source = SourceBuilder::newSource();
     $source->setAbout($memoryUri);
     $state = $this->collectionState()->addSourceDescription($source);
     $this->queueForDelete($state);
     $this->assertNotNull($state->ifSuccessful());
     $this->assertEquals(HttpStatus::CREATED, $state->getResponse()->getStatusCode(), $this->buildFailMessage(__METHOD__ . '(source description)', $state));
 }
Exemplo n.º 2
0
 /**
  * Adds an artifact to the collection.
  *
  * @param \Gedcomx\Rs\Client\Util\DataSource               $artifact
  * @param \Gedcomx\Source\SourceDescription                $description
  * @param \Gedcomx\Rs\Client\GedcomxApplicationState       $state
  * @param \Gedcomx\Rs\Client\Options\StateTransitionOption $option,...
  *
  * @throws \Gedcomx\Rs\Client\Exception\GedcomxApplicationException
  * @return \Gedcomx\Rs\Client\SourceDescriptionState
  */
 public function addArtifact(DataSource $artifact, SourceDescription $description = null, GedcomxApplicationState $state = null, StateTransitionOption $option = null)
 {
     if ($state == null) {
         $state = $this;
     }
     $link = $state->getLink(Rel::ARTIFACTS);
     if ($link == null || $link->getHref() == null) {
         throw new GedcomxApplicationException(sprintf("Resource at %s doesn't support adding artifacts.", state . getUri()));
     }
     $postData = [];
     if ($artifact->isFile()) {
         $postData[] = ['name' => 'artifact', 'contents' => fopen($artifact->getFile(), 'r')];
         if ($artifact->getTitle()) {
             $postData[] = ['name' => 'title', 'contents' => $artifact->getTitle()];
         }
     } else {
         foreach ($artifact->getParameters() as $key => $value) {
             $postData[] = ['name' => $key, 'contents' => $value];
         }
     }
     if ($description != null) {
         if ($description->getTitles() != null) {
             foreach ($description->getTitles() as $value) {
                 $postData[] = ['name' => 'title', 'contents' => $value->getValue()];
             }
         }
         if ($description->getDescriptions() != null) {
             foreach ($description->getDescriptions() as $value) {
                 $postData[] = ['name' => 'description', 'contents' => $value->getValue()];
             }
         }
         if ($description->getCitations() != null) {
             foreach ($description->getCitations() as $citation) {
                 $postData[] = ['name' => 'citation', 'contents' => $value->getValue()];
             }
         }
     }
     $body = new \GuzzleHttp\Psr7\MultipartStream($postData);
     $headers = ['Content-Type' => 'multipart/form-data; boundary=' . $body->getBoundary()];
     $request = $state->createAuthenticatedGedcomxRequest('POST', $link->getHref(), $headers, null, $body);
     return $state->stateFactory->createState('SourceDescriptionState', $this->client, $request, $state->passOptionsTo('invoke', array($request), func_get_args()), $state->accessToken);
 }
Exemplo n.º 3
0
 /**
  * @link https://familysearch.org/developers/docs/api/memories/Upload_Story_usecase
  * SDK only supports uploading via multi-part form uploads.
  */
 public function testUploadStory()
 {
     $filename = ArtifactBuilder::makeTextFile();
     $artifact = new DataSource();
     $artifact->setFile($filename);
     $description = SourceBuilder::newSource();
     $factory = new FamilySearchStateFactory();
     /** @var FamilySearchMemories $memories */
     $memories = $factory->newMemoriesState();
     $memories = $this->authorize($memories);
     $this->assertNotEmpty($memories->getAccessToken());
     $upload = $memories->addArtifact($artifact, $description);
     $this->queueForDelete($upload);
     $this->assertEquals(HttpStatus::CREATED, $upload->getStatus(), $this->buildFailMessage(__METHOD__, $upload));
     $upload = $upload->get();
     $this->assertEquals(HttpStatus::OK, $upload->getStatus());
 }
Exemplo n.º 4
0
 /**
  * @link https://familysearch.org/developers/docs/api/tree/Read_Person_Portraits_usecase
  */
 public function testReadPersonPortraits()
 {
     $this->markTestSkipped("Memories tests are slow and unreliable.");
     $factory = new FamilyTreeStateFactory();
     $this->collectionState($factory);
     $memories = $factory->newMemoriesState();
     $memories = $this->authorize($memories);
     $filename = ArtifactBuilder::makeImage();
     $artifact = new DataSource();
     $artifact->setFile($filename);
     /** @var FamilyTreePersonState $person */
     $person = $this->createPerson();
     $this->assertEquals(HttpStatus::CREATED, $person->getStatus());
     $person = $person->get();
     $this->assertEquals(HttpStatus::OK, $person->getStatus());
     $description = $this->createSource()->get()->getSourceDescription();
     /** @var \Gedcomx\Rs\Client\SourceDescriptionState $upload */
     $upload = $memories->addArtifact($artifact, $description)->get();
     $this->queueForDelete($upload);
     $persona = $upload->addPersonPersona(PersonBuilder::buildPerson('male'))->get();
     $this->queueForDelete($persona);
     $person->addPersonaPersonState($persona);
     $portraits = $person->readPortraits();
     $this->assertEquals(HttpStatus::OK, $portraits->getStatus(), $this->buildFailMessage(__METHOD__, $portraits));
     $this->assertNotNull($portraits->getEntity());
     $this->assertNotNull($portraits->getEntity()->getSourceDescriptions());
     $this->assertGreaterThan(0, count($portraits->getEntity()->getSourceDescriptions()));
 }