From 0ed936dff595ce34fb54bcb5fdba9decd07a533f Mon Sep 17 00:00:00 2001 From: Jeremy Dormitzer Date: Tue, 20 Nov 2018 22:34:39 -0500 Subject: [PATCH] Implement and test base entities --- src/ActivityPub.php | 2 +- src/Entities/IndexEntity.php | 10 +++++ src/Objects/ObjectsService.php | 31 +++++++++++++ test/ObjectsServiceTest.php | 81 ++++++++++++++++++++++++++++++++++ test/config/APTestCase.php | 5 +++ test/config/ArrayDataSet.php | 4 +- 6 files changed, 130 insertions(+), 3 deletions(-) create mode 100644 src/Objects/ObjectsService.php create mode 100644 test/ObjectsServiceTest.php diff --git a/src/ActivityPub.php b/src/ActivityPub.php index 9436f69..5b44c1d 100644 --- a/src/ActivityPub.php +++ b/src/ActivityPub.php @@ -18,7 +18,7 @@ class ActivityPub * @param array $opts Array of options. Valid keys are * 'dbOptions', 'dbprefix', and 'isDevMode'. */ - public function __construct( $opts ) + public function __construct( array $opts ) { $defaults = array( 'isDevMode' => false, diff --git a/src/Entities/IndexEntity.php b/src/Entities/IndexEntity.php index de0e088..8e9c64e 100644 --- a/src/Entities/IndexEntity.php +++ b/src/Entities/IndexEntity.php @@ -14,9 +14,19 @@ namespace ActivityPub\Entities; * field is another JSON-LD object, like { "inReplyTo": { entityManager = $entityManager; + } + + public function createObject( array $fields ) + { + // TODO validate object fields? + $object = new ObjectEntity(); + $this->entityManager->persist( $object ); + // TODO handle objects as well as values + foreach ( $fields as $field => $value ) { + $index = IndexEntity::withValue( $object, $field, $value ); + $this->entityManager->persist( $index ); + } + $this->entityManager->flush(); + return $object; + } +} +?> diff --git a/test/ObjectsServiceTest.php b/test/ObjectsServiceTest.php new file mode 100644 index 0000000..31a1f39 --- /dev/null +++ b/test/ObjectsServiceTest.php @@ -0,0 +1,81 @@ + array( + array( 'id' => 1 ) + ), + 'indices' => array( + array( + 'subject' => 1, + 'predicate' => 'id', + 'value' => 'https://example.com/notes/1', + 'object' => null, + ), + array( + 'subject' => 1, + 'predicate' => 'type', + 'value' => 'Note', + 'object' => null, + ), + array( + 'subject' => 1, + 'predicate' => 'content', + 'value' => 'This is a note', + 'object' => null, + ), + ), + ) ); + } + + protected function setUp() + { + parent::setUp(); + $dbConfig = Setup::createAnnotationMetadataConfiguration( + array( __DIR__ . '/../src/Entities' ), true + ); + $namingStrategy = new PrefixNamingStrategy( '' ); + $dbConfig->setNamingStrategy( $namingStrategy ); + $dbParams = array( + 'driver' => 'pdo_sqlite', + 'path' => __DIR__ . '/db.sqlite', + ); + $this->entityManager = EntityManager::create( $dbParams, $dbConfig ); + $this->objectsService = new ObjectsService( $this->entityManager ); + } + + public function testItCreatesObject() + { + $fields = array( + 'id' => 'https://example.com/notes/1', + 'type' => 'Note', + 'content' => 'This is a note', + ); + $objectEntity = $this->objectsService->createObject( $fields ); + $queryTable = $this->getConnection()->createQueryTable( + 'objects', 'SELECT * FROM objects' + ); + $expectedTable = $this->getDataSet()->getTable('objects'); + $this->assertTablesEqual( $expectedTable, $queryTable ); + } +} +?> diff --git a/test/config/APTestCase.php b/test/config/APTestCase.php index 51a888b..7b3f997 100644 --- a/test/config/APTestCase.php +++ b/test/config/APTestCase.php @@ -12,6 +12,11 @@ abstract class APTestCase extends TestCase private $conn = null; private $dbPath = ''; + protected function setUp() + { + parent::setUp(); + } + final public function getConnection() { if ( $this->conn === null ) { if ( self::$pdo === null ) { diff --git a/test/config/ArrayDataSet.php b/test/config/ArrayDataSet.php index 3fa0b64..5730891 100644 --- a/test/config/ArrayDataSet.php +++ b/test/config/ArrayDataSet.php @@ -2,7 +2,7 @@ namespace ActivityPub\Config; use PHPUnit\DbUnit\DataSet\AbstractDataSet; -use PHPUnit\DbUnit\DataSet\DefaultTableMetaData; +use PHPUnit\DbUnit\DataSet\DefaultTableMetadata; use PHPUnit\DbUnit\DataSet\DefaultTable; use PHPUnit\DbUnit\DataSet\DefaultTableIterator; @@ -24,7 +24,7 @@ class ArrayDataSet extends AbstractDataSet $columns = array_keys($rows[0]); } - $metaData = new DefaultTableMetaData($tableName, $columns); + $metaData = new DefaultTableMetadata($tableName, $columns); $table = new DefaultTable($metaData); foreach ($rows as $row) {