/** * @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)); }
/** * 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); }
/** * @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()); }
/** * @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())); }