mirror of
				https://github.com/kevinveenbirkenbach/infinito.git
				synced 2025-11-04 11:17:58 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			155 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace tests\Unit\Domain\DomManagement;
 | 
						|
 | 
						|
use PHPUnit\Framework\TestCase;
 | 
						|
use Infinito\Domain\DomManagement\EntityDomServiceInterface;
 | 
						|
use Infinito\Domain\RequestManagement\Entity\RequestedEntityServiceInterface;
 | 
						|
use Infinito\Domain\DomManagement\EntityDomService;
 | 
						|
use Infinito\Entity\Source\AbstractSource;
 | 
						|
use Infinito\Attribut\SlugAttributInterface;
 | 
						|
use Infinito\Attribut\IdAttributInterface;
 | 
						|
use Infinito\DBAL\Types\Meta\Right\LayerType;
 | 
						|
use Infinito\Attribut\VersionAttributInterface;
 | 
						|
use Infinito\Entity\Meta\Law;
 | 
						|
use Infinito\Entity\Source\SourceInterface;
 | 
						|
use Infinito\Entity\Meta\RightInterface;
 | 
						|
use Infinito\Attribut\SourceAttributInterface;
 | 
						|
use Infinito\Attribut\GrantAttributInterface;
 | 
						|
use Infinito\Attribut\RightsAttributInterface;
 | 
						|
use Infinito\Entity\EntityInterface;
 | 
						|
use Infinito\Attribut\VersionAttribut;
 | 
						|
use Infinito\Attribut\IdAttribut;
 | 
						|
use Infinito\Exception\NotCorrectInstanceException;
 | 
						|
 | 
						|
/**
 | 
						|
 * @author kevinfrantz
 | 
						|
 */
 | 
						|
class EntityDomServiceTest extends TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var EntityDomServiceInterface
 | 
						|
     */
 | 
						|
    private $entityDomService;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var RequestedEntityServiceInterface
 | 
						|
     */
 | 
						|
    private $requestedEntityService;
 | 
						|
 | 
						|
    public function setUp(): void
 | 
						|
    {
 | 
						|
        $this->requestedEntityService = $this->createMock(RequestedEntityServiceInterface::class);
 | 
						|
        $this->entityDomService = new EntityDomService($this->requestedEntityService);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testNotCorrectInstanceException(): void
 | 
						|
    {
 | 
						|
        $entity = new class() implements EntityInterface {
 | 
						|
            use VersionAttribut,IdAttribut;
 | 
						|
            private $test;
 | 
						|
 | 
						|
            public function setTest($test): void
 | 
						|
            {
 | 
						|
                $this->test = $test;
 | 
						|
            }
 | 
						|
 | 
						|
            public function getTest()
 | 
						|
            {
 | 
						|
                return $this->test;
 | 
						|
            }
 | 
						|
        };
 | 
						|
        $entity->setTest(new class() {
 | 
						|
        });
 | 
						|
        $this->requestedEntityService->method('getEntity')->willReturn($entity);
 | 
						|
        $this->expectException(NotCorrectInstanceException::class);
 | 
						|
        $this->entityDomService->getDomDocument();
 | 
						|
    }
 | 
						|
 | 
						|
    public function testAbstractSource(): void
 | 
						|
    {
 | 
						|
        $slug = 'test';
 | 
						|
        $id = 12345;
 | 
						|
        $source = new class() extends AbstractSource {
 | 
						|
        };
 | 
						|
        $source->setSlug($slug);
 | 
						|
        $source->setId($id);
 | 
						|
        $source->getCreatorRelation()->setId(1);
 | 
						|
        $source->getMemberRelation()->setId(2);
 | 
						|
        $source->getLaw()->setId(3);
 | 
						|
        $this->requestedEntityService->method('getEntity')->willReturn($source);
 | 
						|
        $result = $this->entityDomService->getDomDocument();
 | 
						|
        $expectedAttributNames = [
 | 
						|
            SlugAttributInterface::SLUG_ATTRIBUT_NAME,
 | 
						|
            IdAttributInterface::ID_ATTRIBUT_NAME,
 | 
						|
            VersionAttributInterface::VERSION_ATTRIBUT_NAME,
 | 
						|
            LayerType::getReadableValue(LayerType::MEMBER),
 | 
						|
            LayerType::getReadableValue(LayerType::LAW),
 | 
						|
//             LayerType::getReadableValue(LayerType::HEREDITY),
 | 
						|
            LayerType::getReadableValue(LayerType::CREATOR),
 | 
						|
        ];
 | 
						|
        $this->assertEquals(count($expectedAttributNames), count($result->childNodes));
 | 
						|
        foreach ($result->childNodes as $attribut) {
 | 
						|
            $name = $attribut->getAttribute('name');
 | 
						|
            $layer = $attribut->getAttribute('layer');
 | 
						|
            $id = $attribut->getAttribute('id');
 | 
						|
            $this->assertTrue(in_array($name, $expectedAttributNames), "The attribut name <<$name>> is not defined in the expected values!");
 | 
						|
            if (in_array($layer, LayerType::getValues())) {
 | 
						|
                $this->assertGreaterThan(0, $id);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function testLaw(): void
 | 
						|
    {
 | 
						|
        $source = $this->createMock(SourceInterface::class);
 | 
						|
        $source->method('getId')->willReturn(123);
 | 
						|
        $source->method('hasId')->willReturn(true);
 | 
						|
        $right = $this->createMock(RightInterface::class);
 | 
						|
        $right->method('getId')->willReturn(124);
 | 
						|
        $right->method('hasId')->willReturn(true);
 | 
						|
        $id = 12345;
 | 
						|
        $law = new Law();
 | 
						|
        $law->setId($id);
 | 
						|
        $law->setSource($source);
 | 
						|
        $law->getRights()->add($right);
 | 
						|
        $law->getRights()->add(clone $right);
 | 
						|
        $law->getRights()->add(clone $right);
 | 
						|
        $this->requestedEntityService->method('getEntity')->willReturn($law);
 | 
						|
        $result = $this->entityDomService->getDomDocument();
 | 
						|
        foreach ($result->childNodes as $attribut) {
 | 
						|
            $name = $attribut->getAttribute('name');
 | 
						|
            $value = $attribut->getAttribute('value');
 | 
						|
            $id = $attribut->getAttribute('id');
 | 
						|
            $layer = $attribut->getAttribute('layer');
 | 
						|
            $type = $attribut->getAttribute('type');
 | 
						|
            switch ($name) {
 | 
						|
                case IdAttributInterface::ID_ATTRIBUT_NAME:
 | 
						|
                    $this->assertGreaterThan(0, $value);
 | 
						|
                    break;
 | 
						|
                case VersionAttributInterface::VERSION_ATTRIBUT_NAME:
 | 
						|
                    $this->assertGreaterThan(-1, $value);
 | 
						|
                    break;
 | 
						|
                case SourceAttributInterface::SOURCE_ATTRIBUT_NAME:
 | 
						|
                    $this->assertGreaterThan(0, $id);
 | 
						|
                    $this->assertEquals(LayerType::SOURCE, $layer);
 | 
						|
                    break;
 | 
						|
                case GrantAttributInterface::GRANT_ATTRIBUT_NAME:
 | 
						|
                    $this->assertEquals('', $value);
 | 
						|
                    $this->assertEquals('boolean', $type);
 | 
						|
                    break;
 | 
						|
                case RightsAttributInterface::RIGHTS_ATTRIBUT_NAME:
 | 
						|
                    $rights = $attribut->childNodes;
 | 
						|
                    $this->assertCount(3, $rights);
 | 
						|
                    foreach ($rights as $rightAttribut) {
 | 
						|
                        $this->assertEquals(LayerType::RIGHT, $rightAttribut->getAttribute('layer'));
 | 
						|
                        $this->assertGreaterThan(0, $rightAttribut->getAttribute('id'));
 | 
						|
                    }
 | 
						|
                    break;
 | 
						|
                default:
 | 
						|
                    throw new \Exception("No assert was defined for attribut with name <<$name>>!");
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |