Introduces a SceneAttachment model for registering attachments.

This commit is contained in:
Vassyli
2021-01-27 19:53:58 +01:00
committed by Basilius Sauter
parent 47693f6127
commit 2a3a3e7bc2
5 changed files with 289 additions and 9 deletions
+118
View File
@@ -0,0 +1,118 @@
<?php
declare(strict_types=1);
namespace LotGD\Core\Tests\Models;
use LotGD\Core\Attachment;
use LotGD\Core\Exceptions\ArgumentException;
use LotGD\Core\Models\{Scene, SceneAttachment, SceneConnection, SceneConnectionGroup, SceneTemplate};
use LotGD\Core\Tests\CoreModelTestCase;
use LotGD\Core\Tests\SceneTemplates\NewSceneSceneTemplate;
class TestAttachment extends Attachment
{
}
class InvalidTestAttachment
{
}
/**
* Tests for creating scenes and moving them around.
*/
class SceneAttachmentTest extends CoreModelTestCase
{
/** @var string default data set */
protected $dataset = "scene";
public function testSceneAttachmentCreationWithValidParameters()
{
$sceneAttachment = new SceneAttachment(TestAttachment::class, "Test Attachment");
$this->assertInstanceOf(SceneAttachment::class, $sceneAttachment);
}
public function testIfSceneAttachmentCreationFailsIfAttachmentIsNotSubclassOfAttachment()
{
$this->expectException(ArgumentException::class);
$sceneAttachment = new SceneAttachment(InvalidTestAttachment::class, "Invalid Test Attachment");
}
public function testIfValidSceneAttachmentCanBePersistedAndGottenBackFromTheDatabase()
{
$em = $this->getEntityManager();
$sceneAttachment = new SceneAttachment(TestAttachment::class, "Test Attachment");
// persist
$em->persist($sceneAttachment);
$em->flush();
$em->clear();
// retrieve
$retrievedSceneAttachment = $em->getRepository(SceneAttachment::class)->find(TestAttachment::class);
$this->assertInstanceOf(SceneAttachment::class, $retrievedSceneAttachment);
// Delete again
$em->remove($retrievedSceneAttachment);
$em->flush();
}
public function testIfSceneGettersReturnGivenValuesProperly()
{
$sceneAttachment = new SceneAttachment(TestAttachment::class, "Test Attachment");
$this->assertSame($sceneAttachment->getClass(), TestAttachment::class);
$this->assertSame($sceneAttachment->getTitle(), "Test Attachment");
}
public function testIfPersistingASceneAlsoPersistsASceneAttachment()
{
$em = $this->getEntityManager();
$scene = new Scene("Test scene", "A test scene");
$sceneAttachment = new SceneAttachment(TestAttachment::class, "Test Attachment");
$scene->addAttachment($sceneAttachment);
$sceneId = $scene->getId();
// persist
$em->persist($scene);
$em->flush();
$em->clear();
// retrieve
$retrievedSceneAttachment = $em->getRepository(SceneAttachment::class)->find(TestAttachment::class);
// assert
$this->assertInstanceOf(SceneAttachment::class, $retrievedSceneAttachment);
$this->assertCount(1, $retrievedSceneAttachment->getScenes());
// remove scene
$scene = $retrievedSceneAttachment->getScenes()[0];
$em->remove($scene);
$em->flush();
$em->clear();
// retrieve
$retrievedSceneAttachment = $em->getRepository(SceneAttachment::class)->find(TestAttachment::class);
// assert
$this->assertInstanceOf(SceneAttachment::class, $retrievedSceneAttachment);
$this->assertCount(0, $retrievedSceneAttachment->getScenes());
// remove attachment
$em->remove($retrievedSceneAttachment);
$em->flush();
$em->clear();
// retrieve
$retrievedSceneAttachment = $em->getRepository(SceneAttachment::class)->find(TestAttachment::class);
// assert
$this->assertNull($retrievedSceneAttachment);
}
}