Compare commits
10 Commits
da0ddd572e
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| ce77709d37 | |||
| a7eb83be44 | |||
| 3653513818 | |||
| 58df9cb476 | |||
| 3c958dc5df | |||
| 993218f21d | |||
| aa37259a21 | |||
| 69a16e64d1 | |||
| cb03c811ef | |||
| 6f3c7338c7 |
@@ -20,7 +20,7 @@ class COIDParser {
|
||||
const COID_VERSIONED = 3;
|
||||
const COID_VERSION_WILDCARD = 4;
|
||||
|
||||
const REGEX_HOSTNAME = "/^([a-z0-9-]+\.)?[a-z0-9-]+\.[a-z]+$/";
|
||||
const REGEX_HOSTNAME = "/^([a-z0-9-]+\.)*[a-z0-9-]+\.[a-z]+$/";
|
||||
const REGEX_SEGMENT = "/^[A-Za-z-_0-9\.]+$/";
|
||||
const REGEX_VERSION_WILDCARD = "/^((\^|~)(\d+\.)?\d|(\d+\.){1,2}\*)$/";
|
||||
|
||||
@@ -31,9 +31,9 @@ class COIDParser {
|
||||
* @param string $coidString A COID string.
|
||||
* @return IRI
|
||||
*/
|
||||
public static function fromString($coidString) {
|
||||
public static function fromString($coidString) : IRI {
|
||||
$coidPre = new IRI(
|
||||
(strtolower(substr($coidString, 0, 7))=='coid://') ? $coidString : 'coid://'.$coidString
|
||||
(strtolower(substr($coidString, 0, 7)) == 'coid://') ? $coidString : 'coid://'.$coidString
|
||||
);
|
||||
// Normalize scheme and host segments to lower case
|
||||
return new IRI('coid://'.strtolower($coidPre->getHost()).$coidPre->getPath());
|
||||
@@ -45,7 +45,7 @@ class COIDParser {
|
||||
* @param IRI $coid
|
||||
* @return int|null
|
||||
*/
|
||||
public static function getType(IRI $coid) {
|
||||
public static function getType(IRI $coid) : ?int {
|
||||
if ($coid->getScheme()!='coid' || $coid->getHost()==''
|
||||
|| preg_match(self::REGEX_HOSTNAME, $coid->getHost()) != 1)
|
||||
return self::COID_INVALID;
|
||||
@@ -79,9 +79,9 @@ class COIDParser {
|
||||
* Checks whether the given IRI object is a valid COID.
|
||||
*
|
||||
* @param IRI $coid
|
||||
* @return boolean
|
||||
* @return bool
|
||||
*/
|
||||
public static function isValidCOID(IRI $coid) {
|
||||
public static function isValidCOID(IRI $coid) : bool {
|
||||
return (self::getType($coid)!=self::COID_INVALID);
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ class COIDParser {
|
||||
* @param IRI $coid
|
||||
* @return string|null
|
||||
*/
|
||||
public static function getName(IRI $coid) {
|
||||
public static function getName(IRI $coid) : ?string {
|
||||
if (self::getType($coid)!=self::COID_INVALID
|
||||
&& self::getType($coid)!=self::COID_ROOT) {
|
||||
$segments = explode('/', $coid->getPath());
|
||||
@@ -106,7 +106,7 @@ class COIDParser {
|
||||
* @param IRI $coid
|
||||
* @return string|null
|
||||
*/
|
||||
public static function getVersion(IRI $coid) {
|
||||
public static function getVersion(IRI $coid) : ?string {
|
||||
if (self::getType($coid)==self::COID_VERSIONED) {
|
||||
$segments = explode('/', $coid->getPath());
|
||||
return $segments[2];
|
||||
@@ -121,7 +121,7 @@ class COIDParser {
|
||||
* @param IRI $coid
|
||||
* @return string|null
|
||||
*/
|
||||
public static function getVersionWildcard(IRI $coid) {
|
||||
public static function getVersionWildcard(IRI $coid) : ?string {
|
||||
if (self::getType($coid)==self::COID_VERSION_WILDCARD) {
|
||||
$segments = explode('/', $coid->getPath());
|
||||
return $segments[2];
|
||||
@@ -136,7 +136,7 @@ class COIDParser {
|
||||
* @param IRI $coid
|
||||
* @return IRI|null
|
||||
*/
|
||||
public static function getNamespaceCOID(IRI $coid) {
|
||||
public static function getNamespaceCOID(IRI $coid) : ?IRI {
|
||||
switch (self::getType($coid)) {
|
||||
case self::COID_ROOT:
|
||||
return $coid;
|
||||
|
||||
@@ -166,4 +166,11 @@ class CloudObject {
|
||||
return $this->getString(Constants::PROPERTY_REVISION);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the label of the object.
|
||||
*/
|
||||
public function getLabel() : ?string {
|
||||
return $this->getString(Constants::RDFS_LABEL);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,5 +9,6 @@ namespace CloudObjects\SDK;
|
||||
class Constants {
|
||||
|
||||
const PROPERTY_REVISION = 'coid://cloudobjects.io/isAtRevision';
|
||||
const RDFS_LABEL = 'http://www.w3.org/2000/01/rdf-schema#label';
|
||||
|
||||
}
|
||||
@@ -7,6 +7,7 @@
|
||||
namespace CloudObjects\SDK\Helpers;
|
||||
|
||||
use Exception;
|
||||
use CloudObjects\SDK\Exceptions\InvalidSDKConfigurationException;
|
||||
use CloudObjects\SDK\NodeReader, CloudObjects\SDK\ObjectRetriever;
|
||||
|
||||
/**
|
||||
@@ -27,20 +28,53 @@ class SDKLoader {
|
||||
$this->reader = new NodeReader;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the SDK with the given name and options; used for
|
||||
* SDKs that are initialized with a function and not a class name.
|
||||
*
|
||||
* @param string $sdkName The name of the SDK to initialize.
|
||||
* @param array $options Additional options for the SDK (if necessary).
|
||||
* @return mixed The return value of the SDK initialization, which may vary depending on the SDK.
|
||||
* @throws Exception If the SDK is not supported or cannot be initialized.
|
||||
*/
|
||||
public function init(string $sdkName, array $options = []) : mixed {
|
||||
$namespace = $this->objectRetriever->getAuthenticatingNamespaceCloudObject();
|
||||
|
||||
if (!$namespace)
|
||||
throw new InvalidSDKConfigurationException("The authenticating namespace object could not be retrieved.");
|
||||
|
||||
switch (strtolower($sdkName)) {
|
||||
case "sentry":
|
||||
// --- Sentry (https://sentry.io/) ---
|
||||
$initFunction = '\Sentry\init';
|
||||
return $initFunction(array_merge([
|
||||
'dsn' => $namespace->getString('coid://sentry.io.3rd-party.co/DSN')
|
||||
], $options));
|
||||
|
||||
default:
|
||||
throw new Exception("No rules defined to initialize SDK with name <".$sdkName.">.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize and return the SDK with the given classname.
|
||||
* Throws Exception if the SDK is not supported.
|
||||
*
|
||||
* @param $classname Classname for the SDK's main class
|
||||
* @param array $options Additional options for the SDK (if necessary)
|
||||
* @param string $classname Classname for the SDK's main class.
|
||||
* @param array $options Additional options for the SDK (if necessary).
|
||||
* @return mixed The initialized SDK instance.
|
||||
* @throws Exception If the SDK is not supported or cannot be initialized.
|
||||
*/
|
||||
public function get($classname, array $options) {
|
||||
public function get(string $classname, array $options) : mixed {
|
||||
if (!class_exists($classname))
|
||||
throw new Exception("<".$classname."> is not a valid classname.");
|
||||
|
||||
$hashkey = md5($classname.serialize($options));
|
||||
if (!isset($this->classes[$hashkey])) {
|
||||
$nsNode = $this->objectRetriever->getAuthenticatingNamespaceObject();
|
||||
$nsNode = $this->objectRetriever->getAuthenticatingNamespaceObjectNode();
|
||||
|
||||
if (!$nsNode)
|
||||
throw new InvalidSDKConfigurationException("The authenticating namespace object could not be retrieved.");
|
||||
|
||||
// --- Amazon Web Services (https://aws.amazon.com/) ---
|
||||
// has multiple classnames, so check for common superclass
|
||||
|
||||
@@ -206,7 +206,7 @@ class ObjectRetriever implements CustomCacheAndLogInterface {
|
||||
/**
|
||||
* Get an object description and return a CloudObject.
|
||||
*/
|
||||
public function getCloudObject(IRI $coid) : CloudObject {
|
||||
public function getCloudObject(IRI $coid) : ?CloudObject {
|
||||
$node = $this->getObjectNode($coid);
|
||||
if (!$node) {
|
||||
// Object not found
|
||||
@@ -239,7 +239,7 @@ class ObjectRetriever implements CustomCacheAndLogInterface {
|
||||
* @param IRI $coid COID of the object
|
||||
* @return Node|null
|
||||
*/
|
||||
public function getObjectNode(IRI $coid) : Node {
|
||||
public function getObjectNode(IRI $coid) : ?Node {
|
||||
if (!COIDParser::isValidCOID($coid))
|
||||
throw new Exception("Not a valid COID.");
|
||||
|
||||
@@ -536,7 +536,7 @@ class ObjectRetriever implements CustomCacheAndLogInterface {
|
||||
* @deprecated Use getAuthenticatingNamespaceObjectNode() instead
|
||||
* @return Node
|
||||
*/
|
||||
public function getAuthenticatingNamespaceObject() : Node {
|
||||
public function getAuthenticatingNamespaceObject() : ?Node {
|
||||
return $this->getObject($this->assertAuthenticatingNamespaceAndGetId());
|
||||
}
|
||||
|
||||
@@ -546,7 +546,7 @@ class ObjectRetriever implements CustomCacheAndLogInterface {
|
||||
*
|
||||
* @return Node
|
||||
*/
|
||||
public function getAuthenticatingNamespaceObjectNode() : Node {
|
||||
public function getAuthenticatingNamespaceObjectNode() : ?Node {
|
||||
return $this->getObject($this->assertAuthenticatingNamespaceAndGetId());
|
||||
}
|
||||
|
||||
@@ -556,7 +556,7 @@ class ObjectRetriever implements CustomCacheAndLogInterface {
|
||||
*
|
||||
* @return CloudObject
|
||||
*/
|
||||
public function getAuthenticatingNamespaceCloudObject() : CloudObject {
|
||||
public function getAuthenticatingNamespaceCloudObject() : ?CloudObject {
|
||||
return $this->getCloudObject($this->assertAuthenticatingNamespaceAndGetId());
|
||||
}
|
||||
|
||||
|
||||
80
CloudObjects/SDK/ObjectRetrieverFacade.php
Normal file
80
CloudObjects/SDK/ObjectRetrieverFacade.php
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
namespace CloudObjects\SDK;
|
||||
|
||||
use Exception;
|
||||
use ML\IRI\IRI;
|
||||
use ML\JsonLD\Node;
|
||||
|
||||
/**
|
||||
* Static facade for ObjectRetriever. Call setObjectRetriever() once to
|
||||
* initialize; all subsequent static calls are forwarded to that instance.
|
||||
*/
|
||||
class ObjectRetrieverFacade {
|
||||
|
||||
private static ?ObjectRetriever $instance = null;
|
||||
|
||||
public static function setObjectRetriever(ObjectRetriever $retriever) : void {
|
||||
self::$instance = $retriever;
|
||||
}
|
||||
|
||||
private static function getInstance() : ObjectRetriever {
|
||||
if (self::$instance === null)
|
||||
throw new Exception('ObjectRetrieverFacade has not been initialized. Call setObjectRetriever() first.');
|
||||
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
public static function setDefaultReader(NodeReader $reader) : ObjectRetriever {
|
||||
return self::getInstance()->setDefaultReader($reader);
|
||||
}
|
||||
|
||||
public static function getDefaultReader() : NodeReader {
|
||||
return self::getInstance()->getDefaultReader();
|
||||
}
|
||||
|
||||
public static function getClient() {
|
||||
return self::getInstance()->getClient();
|
||||
}
|
||||
|
||||
public static function getCloudObject(IRI $coid) : ?CloudObject {
|
||||
return self::getInstance()->getCloudObject($coid);
|
||||
}
|
||||
|
||||
public static function getObjectNode(IRI $coid) : ?Node {
|
||||
return self::getInstance()->getObjectNode($coid);
|
||||
}
|
||||
|
||||
public static function fetchObjectsInNamespaceWithType(IRI $namespaceCoid, $type) : array {
|
||||
return self::getInstance()->fetchObjectsInNamespaceWithType($namespaceCoid, $type);
|
||||
}
|
||||
|
||||
public static function fetchAllObjectsInNamespace(IRI $namespaceCoid) : array {
|
||||
return self::getInstance()->fetchAllObjectsInNamespace($namespaceCoid);
|
||||
}
|
||||
|
||||
public static function getCOIDListForNamespace(IRI $namespaceCoid) : array {
|
||||
return self::getInstance()->getCOIDListForNamespace($namespaceCoid);
|
||||
}
|
||||
|
||||
public static function getCOIDListForNamespaceWithType(IRI $namespaceCoid, $type) : array {
|
||||
return self::getInstance()->getCOIDListForNamespaceWithType($namespaceCoid, $type);
|
||||
}
|
||||
|
||||
public static function getAttachment(IRI $coid, $filename) {
|
||||
return self::getInstance()->getAttachment($coid, $filename);
|
||||
}
|
||||
|
||||
public static function getAuthenticatingNamespaceObjectNode() : ?Node {
|
||||
return self::getInstance()->getAuthenticatingNamespaceObjectNode();
|
||||
}
|
||||
|
||||
public static function getAuthenticatingNamespaceCloudObject() : ?CloudObject {
|
||||
return self::getInstance()->getAuthenticatingNamespaceCloudObject();
|
||||
}
|
||||
|
||||
}
|
||||
23
CloudObjects/SDK/functions.php
Normal file
23
CloudObjects/SDK/functions.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use ML\IRI\IRI;
|
||||
use CloudObjects\SDK\CloudObject,
|
||||
CloudObjects\SDK\ObjectRetrieverFacade;
|
||||
|
||||
if (!function_exists('cloudobjects_get_object')) {
|
||||
/**
|
||||
* Retrieve a CloudObject by COID. Accepts a COID as an IRI object or a string.
|
||||
*/
|
||||
function cloudobjects_get_object($coid) : ?CloudObject {
|
||||
if (is_string($coid))
|
||||
$coid = new IRI($coid);
|
||||
elseif (!($coid instanceof IRI))
|
||||
throw new InvalidArgumentException('COID must be a string or an IRI object.');
|
||||
|
||||
return ObjectRetrieverFacade::getCloudObject($coid);
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,10 @@
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"CloudObjects\\SDK" : ""
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
"CloudObjects/SDK/functions.php"
|
||||
]
|
||||
},
|
||||
"require-dev" : {
|
||||
"phpunit/phpunit": "^10",
|
||||
|
||||
@@ -13,13 +13,21 @@ class COIDParserTest extends \PHPUnit\Framework\TestCase {
|
||||
public function testRootCOID() {
|
||||
$coid = new IRI('coid://example.com');
|
||||
$this->assertEquals(COIDParser::COID_ROOT, COIDParser::getType($coid));
|
||||
|
||||
$coid = new IRI('coid://subdomain.example.com');
|
||||
$this->assertEquals(COIDParser::COID_ROOT, COIDParser::getType($coid));
|
||||
|
||||
$coid = new IRI('coid://anotherlevel.subdomain.example.com');
|
||||
$this->assertEquals(COIDParser::COID_ROOT, COIDParser::getType($coid));
|
||||
}
|
||||
|
||||
public function testInvalidRootCOID() {
|
||||
$coid = new IRI('coid://example');
|
||||
$this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid));
|
||||
|
||||
$coid = new IRI('coid://exämple.com');
|
||||
$this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid));
|
||||
|
||||
$coid = new IRI('coid://ex&mple.com');
|
||||
$this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid));
|
||||
}
|
||||
@@ -27,34 +35,41 @@ class COIDParserTest extends \PHPUnit\Framework\TestCase {
|
||||
public function testInvalidCOID() {
|
||||
$coid = new IRI('http://example.com');
|
||||
$this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid));
|
||||
|
||||
$coid = new IRI('example.com');
|
||||
$this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid));
|
||||
|
||||
$coid = new IRI('COID://example.com');
|
||||
$this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid));
|
||||
|
||||
$coid = new IRI('Coid://example.com');
|
||||
$this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid));
|
||||
|
||||
$coid = new IRI('coid://EXAMPLE.COM');
|
||||
$this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid));
|
||||
|
||||
$coid = new IRI('coid://exAMPle.CoM');
|
||||
$this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid));
|
||||
}
|
||||
|
||||
public function testUnversionedCOID() {
|
||||
$coid = new IRI('coid://example.com/Example');
|
||||
$coid = new IRI('coid://subdomain.example.com/Example');
|
||||
$this->assertEquals(COIDParser::COID_UNVERSIONED, COIDParser::getType($coid));
|
||||
}
|
||||
|
||||
public function testInvalidUnversionedCOID() {
|
||||
$coid = new IRI('coid://example.com/Exümple');
|
||||
$this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid));
|
||||
|
||||
$coid = new IRI('coid://example.com/Examp%e');
|
||||
$this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid));
|
||||
}
|
||||
|
||||
public function testVersionedCOID() {
|
||||
$coid = new IRI('coid://example.com/Example/1.0');
|
||||
$coid = new IRI('coid://anotherlevel.subdomain.example.com/Example/1.0');
|
||||
$this->assertEquals(COIDParser::COID_VERSIONED, COIDParser::getType($coid));
|
||||
$coid = new IRI('coid://example.com/Example/alpha');
|
||||
|
||||
$coid = new IRI('coid://subdomain.example.com/Example/alpha');
|
||||
$this->assertEquals(COIDParser::COID_VERSIONED, COIDParser::getType($coid));
|
||||
}
|
||||
|
||||
@@ -66,8 +81,10 @@ class COIDParserTest extends \PHPUnit\Framework\TestCase {
|
||||
public function testVersionWildcardCOID() {
|
||||
$coid = new IRI('coid://example.com/Example/^1.0');
|
||||
$this->assertEquals(COIDParser::COID_VERSION_WILDCARD, COIDParser::getType($coid));
|
||||
|
||||
$coid = new IRI('coid://example.com/Example/~1.0');
|
||||
$this->assertEquals(COIDParser::COID_VERSION_WILDCARD, COIDParser::getType($coid));
|
||||
|
||||
$coid = new IRI('coid://example.com/Example/1.*');
|
||||
$this->assertEquals(COIDParser::COID_VERSION_WILDCARD, COIDParser::getType($coid));
|
||||
}
|
||||
@@ -75,6 +92,7 @@ class COIDParserTest extends \PHPUnit\Framework\TestCase {
|
||||
public function testInvalidVersionWildcardCOID() {
|
||||
$coid = new IRI('coid://example.com/Example/^1.*');
|
||||
$this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid));
|
||||
|
||||
$coid = new IRI('coid://example.com/Example/1.a.*');
|
||||
$this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid));
|
||||
}
|
||||
|
||||
63
tests/OfflineTests/FunctionsTest.php
Normal file
63
tests/OfflineTests/FunctionsTest.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
namespace CloudObjects\SDK;
|
||||
|
||||
use ML\IRI\IRI;
|
||||
use ReflectionProperty,
|
||||
InvalidArgumentException;
|
||||
|
||||
class FunctionsTest extends \PHPUnit\Framework\TestCase {
|
||||
|
||||
protected function setUp(): void {
|
||||
$prop = new ReflectionProperty(ObjectRetrieverFacade::class, 'instance');
|
||||
$prop->setAccessible(true);
|
||||
$prop->setValue(null, null);
|
||||
}
|
||||
|
||||
private function makeMockRetrieverReturning(?CloudObject $object) : ObjectRetriever {
|
||||
$mock = $this->createMock(ObjectRetriever::class);
|
||||
$mock->method('getCloudObject')->willReturn($object);
|
||||
return $mock;
|
||||
}
|
||||
|
||||
public function testAcceptsIRI(): void {
|
||||
$coid = new IRI('coid://cloudobjects.io');
|
||||
$mockObject = $this->createMock(CloudObject::class);
|
||||
|
||||
$mockRetriever = $this->createMock(ObjectRetriever::class);
|
||||
$mockRetriever->expects($this->once())
|
||||
->method('getCloudObject')
|
||||
->with($coid)
|
||||
->willReturn($mockObject);
|
||||
|
||||
ObjectRetrieverFacade::setObjectRetriever($mockRetriever);
|
||||
|
||||
$this->assertSame($mockObject, cloudobjects_get_object($coid));
|
||||
}
|
||||
|
||||
public function testConvertsStringToIRI(): void {
|
||||
$mockObject = $this->createMock(CloudObject::class);
|
||||
|
||||
$mockRetriever = $this->createMock(ObjectRetriever::class);
|
||||
$mockRetriever->expects($this->once())
|
||||
->method('getCloudObject')
|
||||
->with($this->callback(fn($arg) => $arg instanceof IRI && (string)$arg === 'coid://cloudobjects.io'))
|
||||
->willReturn($mockObject);
|
||||
|
||||
ObjectRetrieverFacade::setObjectRetriever($mockRetriever);
|
||||
|
||||
$this->assertSame($mockObject, cloudobjects_get_object('coid://cloudobjects.io'));
|
||||
}
|
||||
|
||||
public function testThrowsOnInvalidArgumentType(): void {
|
||||
ObjectRetrieverFacade::setObjectRetriever($this->makeMockRetrieverReturning(null));
|
||||
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
cloudobjects_get_object(42);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -126,6 +126,15 @@ class NodeReaderMockTest extends \PHPUnit\Framework\TestCase {
|
||||
$this->assertEquals('coid://cloudobjects.io/Public', $object->getNode('co:isVisibleTo')->getId());
|
||||
}
|
||||
|
||||
public function testConstants() {
|
||||
$coid = new IRI('coid://cloudobjects.io');
|
||||
$this->useRootResourceMock();
|
||||
$object = $this->retriever->getCloudObject($coid);
|
||||
|
||||
$this->assertEquals('6-fbea0c90b2c5e5300e4039ed99be9b2d', $object->getRevision());
|
||||
$this->assertEquals('CloudObjects', $object->getLabel());
|
||||
}
|
||||
|
||||
public function testGetAllValuesString1() {
|
||||
$coid = new IRI('coid://cloudobjects.io');
|
||||
$this->useRootResourceMock();
|
||||
|
||||
76
tests/OfflineTests/ObjectRetrieverFacadeTest.php
Normal file
76
tests/OfflineTests/ObjectRetrieverFacadeTest.php
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
namespace CloudObjects\SDK;
|
||||
|
||||
use Exception;
|
||||
use ML\IRI\IRI;
|
||||
use ML\JsonLD\Node;
|
||||
use ReflectionProperty;
|
||||
|
||||
class ObjectRetrieverFacadeTest extends \PHPUnit\Framework\TestCase {
|
||||
|
||||
protected function setUp(): void {
|
||||
$prop = new ReflectionProperty(ObjectRetrieverFacade::class, 'instance');
|
||||
$prop->setAccessible(true);
|
||||
$prop->setValue(null, null);
|
||||
}
|
||||
|
||||
public function testThrowsExceptionBeforeInitialization(): void {
|
||||
$this->expectException(Exception::class);
|
||||
ObjectRetrieverFacade::getObjectNode(new IRI('coid://cloudobjects.io'));
|
||||
}
|
||||
|
||||
public function testForwardsGetObjectNodeToInstance(): void {
|
||||
$coid = new IRI('coid://cloudobjects.io');
|
||||
$mockNode = $this->createMock(Node::class);
|
||||
|
||||
$mockRetriever = $this->createMock(ObjectRetriever::class);
|
||||
$mockRetriever->expects($this->once())
|
||||
->method('getObjectNode')
|
||||
->with($coid)
|
||||
->willReturn($mockNode);
|
||||
|
||||
ObjectRetrieverFacade::setObjectRetriever($mockRetriever);
|
||||
|
||||
$this->assertSame($mockNode, ObjectRetrieverFacade::getObjectNode($coid));
|
||||
}
|
||||
|
||||
public function testForwardsGetCloudObjectToInstance(): void {
|
||||
$coid = new IRI('coid://cloudobjects.io');
|
||||
$mockCloudObject = $this->createMock(CloudObject::class);
|
||||
|
||||
$mockRetriever = $this->createMock(ObjectRetriever::class);
|
||||
$mockRetriever->expects($this->once())
|
||||
->method('getCloudObject')
|
||||
->with($coid)
|
||||
->willReturn($mockCloudObject);
|
||||
|
||||
ObjectRetrieverFacade::setObjectRetriever($mockRetriever);
|
||||
|
||||
$this->assertSame($mockCloudObject, ObjectRetrieverFacade::getCloudObject($coid));
|
||||
}
|
||||
|
||||
public function testReplacingRetrieverUsesNewInstance(): void {
|
||||
$coid = new IRI('coid://cloudobjects.io');
|
||||
$mockNode = $this->createMock(Node::class);
|
||||
|
||||
$firstRetriever = $this->createMock(ObjectRetriever::class);
|
||||
$firstRetriever->expects($this->never())->method('getObjectNode');
|
||||
|
||||
$secondRetriever = $this->createMock(ObjectRetriever::class);
|
||||
$secondRetriever->expects($this->once())
|
||||
->method('getObjectNode')
|
||||
->with($coid)
|
||||
->willReturn($mockNode);
|
||||
|
||||
ObjectRetrieverFacade::setObjectRetriever($firstRetriever);
|
||||
ObjectRetrieverFacade::setObjectRetriever($secondRetriever);
|
||||
|
||||
$this->assertSame($mockNode, ObjectRetrieverFacade::getObjectNode($coid));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user