initSQL()) { throw new Exception("Could not establish database connection"); } self::$SQL = self::$CONTEXT->getSQL(); self::$HANDLER = TestEntity::getHandler(self::$SQL); self::$HANDLER->getLogger()->unitTestMode(); } public function testCreateTable() { $query = self::$HANDLER->getTableQuery(self::$CONTEXT->getSQL()); $this->assertInstanceOf(CreateTable::class, $query); $this->assertTrue($query->execute()); } public function testInsertEntity() { $entity = new TestEntity(); $entity->a = 1; $entity->b = "test"; $entity->c = true; $entity->d = 1.23; $entity->e = new DateTime(); $entity->f = null; // insert $this->assertTrue($entity->save(self::$SQL)); $entityId = $entity->getId(); $this->assertNotNull($entityId); // fetch $entity2 = TestEntity::find(self::$SQL, $entityId); $this->assertNotNull($entity2); $this->assertEquals($entity2->a, $entity->a); $this->assertEquals($entity2->b, $entity->b); $this->assertEquals($entity2->c, $entity->c); $this->assertEquals($entity2->d, $entity->d); $this->assertNotNull($entity2->e); $this->assertEquals( $entity2->e->format(Parameter::DATE_TIME_FORMAT), $entity->e->format(Parameter::DATE_TIME_FORMAT) ); $this->assertNull($entity2->f); // update $entity2->a = 100; $this->assertTrue($entity2->save(self::$SQL)); $this->assertEquals($entity2->getId(), $entityId); // re-fetch $this->assertEquals($entity2->a, TestEntity::find(self::$SQL, $entityId)->a); // check table contents $allEntities = TestEntity::findAll(self::$SQL); $this->assertIsArray($allEntities); $this->assertCount(1, $allEntities); $this->assertTrue(array_key_exists($entityId, $allEntities)); $this->assertEquals($entityId, $allEntities[$entityId]->getId()); // delete $this->assertTrue($entity->delete(self::$SQL)); $this->assertNull($entity->getId()); // check table contents $allEntities = TestEntity::findAll(self::$SQL); $this->assertIsArray($allEntities); $this->assertCount(0, $allEntities); } public function testInsertFail() { $entity = new TestEntity(); $this->assertFalse($entity->save(self::$SQL)); $this->assertTrue(startsWith( self::$HANDLER->getLogger()->getLastMessage(), "Cannot insert entity: property 'a' was not initialized yet." )); $this->assertEquals("error", self::$HANDLER->getLogger()->getLastLevel()); } public function testDropTable() { $this->assertTrue(self::$SQL->drop(self::$HANDLER->getTableName())->execute()); } public function testTableNames() { $sql = self::$SQL; $this->assertEquals("TestEntity", TestEntity::getHandler($sql, null, true)->getTableName()); $this->assertEquals("TestEntityInherit", TestEntityInherit::getHandler($sql, null, true)->getTableName()); $this->assertEquals("TestEntityInherit", OverrideNameSpace\TestEntityInherit::getHandler($sql, null, true)->getTableName()); } public function testCreateQueries() { $queries = []; $entities = [TestEntity::class, TestEntityInherit::class, OverrideNameSpace\TestEntityInherit::class]; \Core\Configuration\CreateDatabase::createEntityQueries(self::$SQL, $entities, $queries); $this->assertCount(2, $queries); $tables = []; foreach ($queries as $query) { $this->assertInstanceOf(CreateTable::class, $query); $tables[] = $query->getTableName(); } $this->assertEquals(["TestEntity", "TestEntityInherit"], $tables); } } class TestEntity extends DatabaseEntity { public int $a; public string $b; public bool $c; public float $d; public \DateTime $e; public ?int $f; } class TestEntityInherit extends DatabaseEntity { public TestEntity $rel; } } namespace OverrideNameSpace { class TestEntityInherit extends \TestEntityInherit { public int $new; } }