Olivier Massot пре 4 година
родитељ
комит
9f9a236c25

+ 13 - 9
ot_core/Classes/Domain/Repository/BaseApiRepository.php

@@ -101,12 +101,15 @@ abstract class BaseApiRepository implements LoggerAwareInterface
      * returns the records as an array (members)
      * returns the records as an array (members)
      *
      *
      * @param array $params
      * @param array $params
+     * @param string|null $forceUri
      * @return ApiPagedCollection
      * @return ApiPagedCollection
      * @throws ApiRequestException
      * @throws ApiRequestException
      */
      */
-    protected function getApiRecords($params = []): ApiPagedCollection
+    protected function getApiRecords(array $params = [], ?string $forceUri = null): ApiPagedCollection
     {
     {
-        $body = $this->getJsonDecoded($this->getApiUri(), $params);
+        $uri = $forceUri ?? $this->getApiUri();
+
+        $body = $this->getJsonDecoded($uri, $params);
 
 
         $page = (int)($params['page'] ?? 1);
         $page = (int)($params['page'] ?? 1);
 
 
@@ -133,24 +136,25 @@ abstract class BaseApiRepository implements LoggerAwareInterface
     /**
     /**
      * -- Needs to be reimplemented in subclasses --
      * -- Needs to be reimplemented in subclasses --
      * Convert response's members record to an actual Domain's object
      * Convert response's members record to an actual Domain's object
-     * @param array $member
+     * @param array $record
      * @return object
      * @return object
      */
      */
-    abstract protected function memberToObject(array $member);
+    abstract protected function memberToObject(array $record);
 
 
     /**
     /**
      * Send a request to the API and
      * Send a request to the API and
      * returns the first record (member)
      * returns the first record (member)
      *
      *
      * @param array $params
      * @param array $params
+     * @param string|null $forceUri
      * @return object
      * @return object
      * @throws ApiRequestException
      * @throws ApiRequestException
      */
      */
-    protected function getApiFirstRecord($params = []): object
+    protected function getApiFirstRecord($params = [], ?string $forceUri = null)
     {
     {
         $params['page'] = '1';
         $params['page'] = '1';
         $params['totalItems'] = '1';
         $params['totalItems'] = '1';
-        $collection = $this->getApiRecords($params);
+        $collection = $this->getApiRecords($params, $forceUri);
         return $collection->getMembers()[0];
         return $collection->getMembers()[0];
     }
     }
 
 
@@ -163,7 +167,7 @@ abstract class BaseApiRepository implements LoggerAwareInterface
      * @return array
      * @return array
      * @throws ApiRequestException
      * @throws ApiRequestException
      */
      */
-    protected function getJsonDecoded(string $uri, $params = [])
+    protected function getJsonDecoded(string $uri, $params = []): array
     {
     {
         return json_decode($this->getBody($uri, $params),true);
         return json_decode($this->getBody($uri, $params),true);
     }
     }
@@ -191,7 +195,7 @@ abstract class BaseApiRepository implements LoggerAwareInterface
      * @return ResponseInterface
      * @return ResponseInterface
      * @throws ApiRequestException
      * @throws ApiRequestException
      */
      */
-    protected function getResponse(string $uri, $params = [])
+    protected function getResponse(string $uri, $params = []): ResponseInterface
     {
     {
         $uri = $uri . '?_format=json';
         $uri = $uri . '?_format=json';
         if(!isset($params['itemsPerPage'])) {
         if(!isset($params['itemsPerPage'])) {
@@ -201,7 +205,7 @@ abstract class BaseApiRepository implements LoggerAwareInterface
             $uri = $uri . '&' . http_build_query($params);
             $uri = $uri . '&' . http_build_query($params);
         }
         }
         try {
         try {
-            if ($this->context->isDevelopment() || $this->context->isTesting()) {
+            if ($this->context->isDevelopment()) {
                 $this->logger->info('API Call: ' . $uri);
                 $this->logger->info('API Call: ' . $uri);
             }
             }
             return $this->client->request(static::HTTP_METHOD, $uri);
             return $this->client->request(static::HTTP_METHOD, $uri);

+ 3 - 2
ot_core/Classes/Domain/Repository/EventRepository.php

@@ -18,9 +18,10 @@ class EventRepository extends BaseApiRepository
      * @return object Event
      * @return object Event
      * @throws ApiRequestException
      * @throws ApiRequestException
      */
      */
-    public function findById(int $id) {
+    public function findById(int $id): object
+    {
         $params = ["filter[where][id]" => $id];
         $params = ["filter[where][id]" => $id];
-        return $this->getApiFirstRecord($this->getApiUri(), $params);
+        return $this->getApiFirstRecord($params);
     }
     }
 
 
     /**
     /**

+ 2 - 2
ot_core/Classes/Domain/Repository/MemberRepository.php

@@ -35,9 +35,9 @@ class MemberRepository extends BaseApiRepository
         $params['itemsPerPage'] = '200';
         $params['itemsPerPage'] = '200';
 
 
         if ($only_ca) {
         if ($only_ca) {
-            return $this->getApiRecords($this->getApiUriCa(), $params);
+            return $this->getApiRecords($params, $this->getApiUriCa());
         } else {
         } else {
-            return $this->getApiRecords($this->getApiUri(), $params);
+            return $this->getApiRecords($params);
         }
         }
     }
     }
 
 

+ 1 - 1
ot_core/Classes/Page/OtPageRepository.php

@@ -80,7 +80,7 @@ class OtPageRepository
      * @return array
      * @return array
      */
      */
     public function getRootPageFor($pageUid) {
     public function getRootPageFor($pageUid) {
-        $rootLine = $this->pageService->getRootLine($pageUid, false, true);
+        $rootLine = $this->pageService->getRootLine($pageUid);
 
 
         for (end($rootLine); key($rootLine)!==null; prev($rootLine)){
         for (end($rootLine); key($rootLine)!==null; prev($rootLine)){
             $page = current($rootLine);
             $page = current($rootLine);

+ 3 - 1
ot_core/Tests/Unit/Domain/Repository/AbstractApiRepositoryTestCase.php

@@ -35,7 +35,9 @@ abstract class AbstractApiRepositoryTestCase extends UnitTestCase
     public function setUp() {
     public function setUp() {
         // mock the application context
         // mock the application context
         $this->context = $this->prophesize(ApplicationContext::class);
         $this->context = $this->prophesize(ApplicationContext::class);
-        $this->context->isProduction()->willReturn(true);
+        $this->context->isProduction()->willReturn(false);
+        $this->context->isDevelopment()->willReturn(false);
+        $this->context->isTesting()->willReturn(true);
 
 
         $this->client = $this->prophesize(Client::class);
         $this->client = $this->prophesize(Client::class);
 
 

+ 8 - 7
ot_core/Tests/Unit/Domain/Repository/BaseApiRepositoryTest.php

@@ -3,6 +3,7 @@
 namespace Opentalent\OtCore\Tests\Unit\Domain\Repository;
 namespace Opentalent\OtCore\Tests\Unit\Domain\Repository;
 
 
 use GuzzleHttp\Client;
 use GuzzleHttp\Client;
+use Opentalent\OtCore\Domain\Repository\ApiPagedCollection;
 use Opentalent\OtCore\Domain\Repository\BaseApiRepository;
 use Opentalent\OtCore\Domain\Repository\BaseApiRepository;
 use Opentalent\OtCore\Exception\ApiRequestException;
 use Opentalent\OtCore\Exception\ApiRequestException;
 
 
@@ -13,11 +14,11 @@ use Opentalent\OtCore\Exception\ApiRequestException;
 class ConcreteBaseApiRepository extends BaseApiRepository {
 class ConcreteBaseApiRepository extends BaseApiRepository {
     protected function memberToObject(array $member) { return $member; }
     protected function memberToObject(array $member) { return $member; }
     public function injectClient($client) { parent::injectClient($client); }
     public function injectClient($client) { parent::injectClient($client); }
-    public function getResponse($uri, $params = []) { return parent::getResponse($uri, $params); }
-    public function getBody($uri, $params = []) { return parent::getBody($uri, $params); }
-    public function getJsonDecoded($uri, $params = []) { return parent::getJsonDecoded($uri, $params); }
-    public function getApiFirstRecord($uri, $params = []) { return parent::getApiFirstRecord($uri, $params); }
-    public function getApiRecords($uri, $params = []) { return parent::getApiRecords($uri, $params); }
+    public function getResponse($uri, $params = []): \Psr\Http\Message\ResponseInterface { return parent::getResponse($uri, $params); }
+    public function getBody($uri, $params = []): string { return parent::getBody($uri, $params); }
+    public function getJsonDecoded($uri, $params = []): array { return parent::getJsonDecoded($uri, $params); }
+    public function getApiFirstRecord($params = [], $forceUri = null) { return parent::getApiFirstRecord($params, $forceUri); }
+    public function getApiRecords($params = [], $forceUri = null): ApiPagedCollection { return parent::getApiRecords($params, $forceUri); }
 }
 }
 
 
 class BaseApiRepositoryTest extends AbstractApiRepositoryTestCase
 class BaseApiRepositoryTest extends AbstractApiRepositoryTestCase
@@ -140,7 +141,7 @@ class BaseApiRepositoryTest extends AbstractApiRepositoryTestCase
         $processed_uri = $base_uri . "?_format=json&filter%5Bwhere%5D%5Bid%5D=1&page=1&totalItems=1&itemsPerPage=8";
         $processed_uri = $base_uri . "?_format=json&filter%5Bwhere%5D%5Bid%5D=1&page=1&totalItems=1&itemsPerPage=8";
         $this->injectClientFor($processed_uri);
         $this->injectClientFor($processed_uri);
 
 
-        $actual = $this->repository->getApiFirstRecord($base_uri, $params);
+        $actual = $this->repository->getApiFirstRecord($params, $base_uri);
 
 
         $this->assertEquals('PortailOrganization', $actual['@type']);
         $this->assertEquals('PortailOrganization', $actual['@type']);
     }
     }
@@ -157,7 +158,7 @@ class BaseApiRepositoryTest extends AbstractApiRepositoryTestCase
         $processed_uri = $base_uri . "?_format=json&filter%5Bwhere%5D%5Bid%5D=1&itemsPerPage=8";
         $processed_uri = $base_uri . "?_format=json&filter%5Bwhere%5D%5Bid%5D=1&itemsPerPage=8";
         $this->injectClientFor($processed_uri);
         $this->injectClientFor($processed_uri);
 
 
-        $actual = $this->repository->getApiRecords($base_uri, $params);
+        $actual = $this->repository->getApiRecords($params, $base_uri);
 
 
         $this->assertEquals('PortailOrganization', $actual->getMembers()[0]['@type']);
         $this->assertEquals('PortailOrganization', $actual->getMembers()[0]['@type']);
     }
     }