. * */ namespace Friendica\Test\src\Model\Storage; use Friendica\Model\Storage\ISelectableStorage; use Friendica\Model\Storage\IStorage; use Friendica\Model\Storage\ReferenceStorageException; use Friendica\Test\MockedTest; abstract class StorageTest extends MockedTest { /** @return ISelectableStorage */ abstract protected function getInstance(); abstract protected function assertOption(ISelectableStorage $storage); /** * Test if the instance is "really" implementing the interface */ public function testInstance() { $instance = $this->getInstance(); self::assertInstanceOf(IStorage::class, $instance); } /** * Test if the "getOption" is asserted */ public function testGetOptions() { $instance = $this->getInstance(); $this->assertOption($instance); } /** * Test basic put, get and delete operations */ public function testPutGetDelete() { $instance = $this->getInstance(); $ref = $instance->put('data12345'); self::assertNotEmpty($ref); self::assertEquals('data12345', $instance->get($ref)); $instance->delete($ref); } /** * Test a delete with an invalid reference */ public function testInvalidDelete() { self::expectException(ReferenceStorageException::class); $instance = $this->getInstance(); $instance->delete(-1234456); } /** * Test a get with an invalid reference */ public function testInvalidGet() { self::expectException(ReferenceStorageException::class); $instance = $this->getInstance(); $instance->get(-123456); } /** * Test an update with a given reference */ public function testUpdateReference() { $instance = $this->getInstance(); $ref = $instance->put('data12345'); self::assertNotEmpty($ref); self::assertEquals('data12345', $instance->get($ref)); self::assertEquals($ref, $instance->put('data5432', $ref)); self::assertEquals('data5432', $instance->get($ref)); } /** * Test that an invalid update results in an insert */ public function testInvalidUpdate() { $instance = $this->getInstance(); self::assertEquals(-123, $instance->put('data12345', -123)); } }