diff --git a/application/src/Entity/Source/Operation/AbstractOperation.php b/application/src/Entity/Source/Operation/AbstractOperation.php index f57c4fe..b981d07 100644 --- a/application/src/Entity/Source/Operation/AbstractOperation.php +++ b/application/src/Entity/Source/Operation/AbstractOperation.php @@ -8,6 +8,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Mapping as ORM; use App\Entity\Source\AbstractSource; use App\Entity\Source\Operation\Attribut\OperandsAttribut; +use App\Exception\NotProcessedException; /** * @author kevinfrantz @@ -41,7 +42,10 @@ abstract class AbstractOperation extends AbstractSource implements OperandInterf public function getResult(): ResultInterface { - return $this->result; + if ($this->result) { + return $this->result; + } + throw new NotProcessedException('No result was generated!'); } public function setOperators(ArrayCollection $operands): void diff --git a/application/src/Entity/Source/Operation/AndOperation.php b/application/src/Entity/Source/Operation/AndOperation.php index c1c2c6a..15516ed 100644 --- a/application/src/Entity/Source/Operation/AndOperation.php +++ b/application/src/Entity/Source/Operation/AndOperation.php @@ -5,6 +5,7 @@ namespace App\Entity\Source\Operation; use App\Logic\Operation\OperandInterface; use App\Logic\Result\Result; use Doctrine\ORM\Mapping as ORM; +use App\Exception\NotDefinedException; /** * @author kevinfrantz @@ -16,7 +17,7 @@ final class AndOperation extends AbstractOperation public function process(): void { if ($this->operands->isEmpty()) { - throw new \Exception('Operands must be defined!'); + throw new NotDefinedException('Operands must be defined!'); } $this->result = new Result(); /* diff --git a/application/src/Exception/NotDefinedException.php b/application/src/Exception/NotDefinedException.php new file mode 100644 index 0000000..60ed320 --- /dev/null +++ b/application/src/Exception/NotDefinedException.php @@ -0,0 +1,11 @@ +operation = new class() extends AbstractOperation { - public function getResult(): ResultInterface - { - return new Result(); - } - public function process(): void { - return; + $this->result = new Result(); } }; } @@ -49,11 +45,20 @@ class AbstractOperationTest extends TestCase $operands = new ArrayCollection(); $operands->add($operand); $this->operation->setOperands($operands); - $this->assertEquals($operand, $this->operation->getOperands()->get(0)); + $this->assertEquals($operand, $this->operation->getOperands() + ->get(0)); } - public function testResult() + public function testNotProcessedException(): void { + $this->expectException(NotProcessedException::class); + $this->operation->getResult(); + } + + public function testResult(): void + { + $this->setUp(); + $this->operation->process(); $this->assertInstanceOf(ResultInterface::class, $this->operation->getResult()); } diff --git a/application/tests/unit/Entity/Source/Operation/AndOperationTest.php b/application/tests/unit/Entity/Source/Operation/AndOperationTest.php new file mode 100644 index 0000000..d2bbe47 --- /dev/null +++ b/application/tests/unit/Entity/Source/Operation/AndOperationTest.php @@ -0,0 +1,71 @@ +operation = new AndOperation(); + } + + public function testConstructor(): void + { + $this->expectException(NotDefinedException::class); + $this->operation->process(); + } + + public function testProcess(): void + { + //Test True + $operand1 = new class() implements OperandInterface { + public function getResult(): ResultInterface + { + $result = new Result(); + $result->setAll(true); + + return $result; + } + }; + + $operand2 = new class() implements OperandInterface { + public function getResult(): ResultInterface + { + $result = new Result(); + $result->setAll(true); + + return $result; + } + }; + $operands = new ArrayCollection([$operand1, $operand2]); + $this->operation->setOperands($operands); + $this->operation->process(); + $this->assertEquals(true, $this->operation->getResult()->getBool()); + + //Test False + $operand3 = new class() implements OperandInterface { + public function getResult(): ResultInterface + { + $result = new Result(); + $result->setAll(false); + + return $result; + } + }; + $this->operation->getOperands()->add($operand3); + $this->operation->process(); + $this->assertEquals(false, $this->operation->getResult()->getBool()); + } +}