mirror of
https://github.com/kevinveenbirkenbach/infinito.git
synced 2025-01-09 14:07:25 +01:00
Wrote tests for dimension helper method and optimized dimension helper
This commit is contained in:
parent
a66e2c3b46
commit
556c919f1f
@ -4,7 +4,7 @@ namespace App\Entity\Method;
|
||||
|
||||
use Doctrine\Common\Collections\Collection;
|
||||
use App\Helper\DimensionHelper;
|
||||
use App\Entity\Attribut\MembersAttributInterface;
|
||||
use App\Helper\DimensionHelperInterface;
|
||||
|
||||
/**
|
||||
* @todo Create test for trait!
|
||||
@ -15,7 +15,7 @@ trait CollectionDimensionHelperMethod
|
||||
{
|
||||
public function getDimensions(?int $dimension = null, Collection $elements = null): Collection
|
||||
{
|
||||
$dimensionHelper = new DimensionHelper(__FUNCTION__, MembersAttributInterface::class, $this, 'collection');
|
||||
$dimensionHelper = new DimensionHelper(__FUNCTION__, DimensionHelperInterface::class, $this, 'collection');
|
||||
|
||||
return $dimensionHelper->getDimensions($dimension, $elements);
|
||||
}
|
||||
|
@ -40,10 +40,14 @@ final class DimensionHelper implements DimensionHelperInterface
|
||||
private $dimension = null;
|
||||
|
||||
/**
|
||||
* @param string $method which uses the dimension helper
|
||||
* @param string $interface which is implemented in all classes which have dimensions
|
||||
* @param object $object which calls the dimension helper
|
||||
* @param string $attribut which represents dimensions
|
||||
* @param string $method
|
||||
* which uses the dimension helper
|
||||
* @param string $interface
|
||||
* which is implemented in all classes which have dimensions
|
||||
* @param object $object
|
||||
* which calls the dimension helper
|
||||
* @param string $attribut
|
||||
* which represents dimensions
|
||||
*/
|
||||
public function __construct(string $method, string $interface, object $object, string $attribut)
|
||||
{
|
||||
@ -54,8 +58,10 @@ final class DimensionHelper implements DimensionHelperInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $dimension The dimensions start with 1 for the elements of the actuall dimension and NULL for all elements
|
||||
* @param Collection $elements A elements collection, to which new elements should be add
|
||||
* @param int $dimension
|
||||
* The dimensions start with 1 for the elements of the actuall dimension and NULL for all elements
|
||||
* @param Collection $elements
|
||||
* A elements collection, to which new elements should be add
|
||||
*
|
||||
* @return Collection Returns all elements till the defined dimension
|
||||
*/
|
||||
@ -63,11 +69,14 @@ final class DimensionHelper implements DimensionHelperInterface
|
||||
{
|
||||
$this->setDimension($dimension);
|
||||
$elements = $elements ?? new ArrayCollection();
|
||||
foreach ($this->object->{$this->attributGetterName()}()->toArray() as $element) {
|
||||
if (!$elements->contains($element)) {
|
||||
$elements->add($element);
|
||||
if ($this->continueLoop() && $element instanceof $this->interface) {
|
||||
$element->{$this->method}($this->dimension, $elements);
|
||||
if ($this->dimension >= 0) {
|
||||
foreach ($this->object->{$this->attributGetterName()}()
|
||||
->toArray() as $element) {
|
||||
if (!$elements->contains($element)) {
|
||||
$elements->add($element);
|
||||
if ($this->continueLoop() && $element instanceof $this->interface) {
|
||||
$element->{$this->method}($this->dimension, $elements);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace Entity\Method;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use App\Entity\Method\CollectionDimensionHelperMethod;
|
||||
use App\Helper\DimensionHelperInterface;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use App\Entity\Attribut\CollectionAttribut;
|
||||
use App\Entity\Attribut\CollectionAttributInterface;
|
||||
|
||||
class CollectionDimensionHelperMethodTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @var DimensionHelperInterface|CollectionAttributInterface
|
||||
*/
|
||||
protected $method;
|
||||
|
||||
private function getClassMock(): object
|
||||
{
|
||||
return new class() implements DimensionHelperInterface, CollectionAttributInterface {
|
||||
use CollectionDimensionHelperMethod,CollectionAttribut;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->collection = new ArrayCollection();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public function setUp(): void
|
||||
{
|
||||
$this->method = $this->getClassMock();
|
||||
$clone1 = $this->getClassMock();
|
||||
$clone2 = $this->getClassMock();
|
||||
$clone3 = $this->getClassMock();
|
||||
$clone1->getCollection()->add($clone2);
|
||||
$clone2->getCollection()->add($clone3);
|
||||
$this->method->getCollection()->add($clone1);
|
||||
}
|
||||
|
||||
public function testTestSetUp(): void
|
||||
{
|
||||
$this->assertEquals(1, $this->method->getCollection()->count());
|
||||
$this->assertEquals(1, $this->method->getCollection()->get(0)->getCollection()->count());
|
||||
}
|
||||
|
||||
public function testThatZeroAndOneDimensionAreUnique(): void
|
||||
{
|
||||
$this->assertFalse($this->method->getDimensions(0)->count() == $this->method->getDimensions(1)->count());
|
||||
}
|
||||
|
||||
public function testZeroDimension(): void
|
||||
{
|
||||
$this->assertEquals(0, $this->method->getDimensions(0)->count());
|
||||
}
|
||||
|
||||
public function testFirstDimension(): void
|
||||
{
|
||||
$this->assertEquals(1, $this->method->getDimensions(1)->count());
|
||||
}
|
||||
|
||||
public function testSecondDimensionl(): void
|
||||
{
|
||||
$this->assertEquals(2, $this->method->getDimensions(2)->count());
|
||||
}
|
||||
|
||||
public function testThirdtDimension(): void
|
||||
{
|
||||
$this->assertEquals(3, $this->method->getDimensions(3)->count());
|
||||
}
|
||||
|
||||
public function testInfiniteDimension(): void
|
||||
{
|
||||
$this->assertEquals(3, $this->method->getDimensions()->count());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user