From a7eb83be44b5eb96d20d41998c3f599d3dc1011d Mon Sep 17 00:00:00 2001 From: Lukas Rosenstock Date: Mon, 15 Jun 2026 09:19:59 +0000 Subject: [PATCH] Implemented a facade for ObjectRetriever to allow static access --- CloudObjects/SDK/ObjectRetrieverFacade.php | 80 +++++++++++++++++++ .../ObjectRetrieverFacadeTest.php | 76 ++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 CloudObjects/SDK/ObjectRetrieverFacade.php create mode 100644 tests/OfflineTests/ObjectRetrieverFacadeTest.php diff --git a/CloudObjects/SDK/ObjectRetrieverFacade.php b/CloudObjects/SDK/ObjectRetrieverFacade.php new file mode 100644 index 0000000..d804142 --- /dev/null +++ b/CloudObjects/SDK/ObjectRetrieverFacade.php @@ -0,0 +1,80 @@ +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(); + } + +} diff --git a/tests/OfflineTests/ObjectRetrieverFacadeTest.php b/tests/OfflineTests/ObjectRetrieverFacadeTest.php new file mode 100644 index 0000000..af4d6f1 --- /dev/null +++ b/tests/OfflineTests/ObjectRetrieverFacadeTest.php @@ -0,0 +1,76 @@ +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)); + } + +}