Преглед на файлове

add unit tests for OnOrganizationChange and OnChange base classes

Olivier Massot преди 3 години
родител
ревизия
322b338eee

+ 1 - 1
src/Service/OnChange/Organization/OnOrganizationChange.php

@@ -16,7 +16,7 @@ class OnOrganizationChange extends OnChangeDefault
 {
     public function beforeChange($organization, OnChangeContext $context): void
     {
-        if($context->previousData() && $context->previousData()->getLegalStatus() !== $organization->getLegalStatus()){
+        if($context->previousData() && $context->previousData()->getLegalStatus() !== $organization->getLegalStatus()) {
             $this->onLegalStatusChange($organization);
         }
     }

+ 33 - 0
tests/Service/OnChange/OnChangeContextTest.php

@@ -0,0 +1,33 @@
+<?php
+
+use App\Service\OnChange\OnChangeContext;
+use PHPUnit\Framework\TestCase;
+
+class OnChangeContextTest extends TestCase
+{
+    public function testIsPostRequest() {
+        $context = new OnChangeContext(
+            ['collection_operation_name' => 'post']
+        );
+
+        $this->assertTrue($context->isPostRequest());
+        $this->assertFalse($context->isPutRequest());
+    }
+
+    public function testIsPutRequest() {
+        $context = new OnChangeContext(
+            ['item_operation_name' => 'put']
+        );
+
+        $this->assertTrue($context->isPutRequest());
+        $this->assertFalse($context->isPostRequest());
+    }
+
+    public function testPreviousData() {
+        $context = new OnChangeContext(
+            ['previous_data' => 1]
+        );
+
+        $this->assertEquals(1, $context->previousData());
+    }
+}

+ 24 - 0
tests/Service/OnChange/OnChangeDefaultTest.php

@@ -0,0 +1,24 @@
+<?php
+
+use App\Service\OnChange\OnChangeContext;
+use App\Service\OnChange\OnChangeDefault;
+use PHPUnit\Framework\TestCase;
+
+class OnChangeDefaultTest extends TestCase
+{
+    /**
+     * Default OnChange service does nothing; it shouldn't change anything to the data nor raise excemptions
+     */
+    public function testDoesNothing() {
+        $data = 1;
+        $context = new OnChangeContext([]);
+
+        $onChange = new OnChangeDefault();
+        $onChange->validate($data, $context);
+        $data = $onChange->preProcess($data, $context);
+        $onChange->beforeChange($data, $context);
+        $onChange->onChange($data, $context);
+
+        $this->assertEquals(1, $data);
+    }
+}

+ 50 - 1
tests/Service/OnChange/Organization/OnOrganizationChangeTest.php

@@ -5,6 +5,7 @@ use App\Entity\Billing\BillingSetting;
 use App\Entity\Organization\Organization;
 use App\Entity\Organization\Parameters;
 use App\Enum\Organization\LegalEnum;
+use App\Service\OnChange\OnChangeContext;
 use App\Service\OnChange\Organization\OnOrganizationChange;
 use PHPUnit\Framework\TestCase;
 
@@ -19,6 +20,54 @@ class OnOrganizationChangeTest extends TestCase
         $this->onOrganizationChange = new OnOrganizationChange();
     }
 
+    public function testBeforeChangeNoChange(): void
+    {
+        $onOrganizationChange =  $this
+            ->getMockBuilder(OnOrganizationChange::class)
+            ->onlyMethods(['onLegalStatusChange'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $onOrganizationChange
+            ->expects(self::never())
+            ->method('onLegalStatusChange')
+            ->willReturnSelf();
+
+        $previousOrganization = $this->getMockBuilder(Organization::class)->disableOriginalConstructor()->getMock();
+        $previousOrganization->expects(self::once())->method('getLegalStatus')->willReturn('ASSOCIATION_LAW_1901');
+
+        $context = $this->getMockBuilder(OnChangeContext::class)->disableOriginalConstructor()->getMock();
+        $context->method('previousData')->willReturn($previousOrganization);
+
+        $organization = $this->getMockBuilder(Organization::class)->disableOriginalConstructor()->getMock();
+        $organization->expects(self::once())->method('getLegalStatus')->willReturn('ASSOCIATION_LAW_1901');
+
+        $onOrganizationChange->beforeChange($organization, $context);
+    }
+
+    public function testBeforeChangeLegalStatusChanged(): void
+    {
+        $onOrganizationChange =  $this
+            ->getMockBuilder(OnOrganizationChange::class)
+            ->onlyMethods(['onLegalStatusChange'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $onOrganizationChange
+            ->expects(self::once())
+            ->method('onLegalStatusChange')
+            ->willReturnSelf();
+
+        $previousOrganization = $this->getMockBuilder(Organization::class)->disableOriginalConstructor()->getMock();
+        $previousOrganization->expects(self::once())->method('getLegalStatus')->willReturn('ASSOCIATION_LAW_1901');
+
+        $context = $this->getMockBuilder(OnChangeContext::class)->disableOriginalConstructor()->getMock();
+        $context->method('previousData')->willReturn($previousOrganization);
+
+        $organization = $this->getMockBuilder(Organization::class)->disableOriginalConstructor()->getMock();
+        $organization->expects(self::once())->method('getLegalStatus')->willReturn('LOCAL_AUTHORITY');
+
+        $onOrganizationChange->beforeChange($organization, $context);
+    }
+
     /**
      * @see OnOrganizationChange::onLegalStatusChange()
      */
@@ -36,4 +85,4 @@ class OnOrganizationChangeTest extends TestCase
         $this->assertFalse($this->organization->getParameters()->getShowAdherentList());
         $this->assertTrue($this->organization->getBillingSetting()->getApplyVat());
     }
-}
+}