فهرست منبع

Merge branch 'feature/V8-6229-mettre-en-place-le-nouveau-systm' into develop

Olivier Massot 1 سال پیش
والد
کامیت
60ac2ba9bf

+ 2 - 0
.gitignore

@@ -4,3 +4,5 @@
 composer.lock
 coverage/
 *.log
+
+ot_core/composer.phar

+ 6 - 3
.gitlab-ci.yml

@@ -3,14 +3,17 @@ stages:
 
 before_script:
   - apt-get -yqq update
-  - apt-get -yqq install zip unzip
+  - apt-get -yqq install zip unzip libexif-dev
+  - docker-php-ext-install exif
+  - docker-php-ext-enable exif
   - curl -sS https://composer.github.io/installer.sig > installer.sig
   - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
   - php -r "if (hash_file('SHA384', 'composer-setup.php') === file_get_contents('installer.sig')) { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
   - php composer-setup.php
   - php -r "unlink('composer-setup.php'); unlink('installer.sig');"
-  - pecl -q install xdebug-3.1.5
+  - pecl -q install xdebug-3.3.2
   - docker-php-ext-enable xdebug
+  - echo zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20230831/xdebug.so >> /usr/local/etc/php/conf.d/xdebug.ini
   - echo xdebug.mode=coverage >> /usr/local/etc/php/conf.d/xdebug.ini
 
 cache:
@@ -21,7 +24,7 @@ unit:otcore:
   stage: test
 
   script:
-    - php composer.phar --quiet --no-interaction --working-dir=./ot_core install
+    - php composer.phar --no-interaction --working-dir=./ot_core install
     - ./ot_core/.Build/bin/phpunit -c ./ot_core/Tests/Build/UnitTests.xml --coverage-text --colors=never
 
   artifacts:

+ 18 - 13
composer.json

@@ -32,21 +32,25 @@
         "typo3/cms-dashboard": "^11.5",
         "typo3/cms-opendocs": "^11.5",
         "typo3/cms-recordlist": "^11.5",
-        "fluidtypo3/flux": "^10.0",
-        "fluidtypo3/vhs": "^7.0",
-        "georgringer/news": "^11.4",
         "helhum/typo3-console": "^7.1",
-        "causal/image_autoresize": "^2.2",
-        "guzzlehttp/guzzle": "^7.7",
-        "twig/twig": "^3.3",
-        "phpunit/phpunit": "^9.5",
         "sgalinski/lfeditor": "^7.1",
-        "waldhacker/hcaptcha": "^2.1",
-        "nimut/typo3-complete": "11.5",
-        "nimut/testing-framework": "^6.0",
-        "ext-json": "*",
-        "co-stack/logs": "*"
+        "opentalent/ot_core": "^1.0",
+        "opentalent/ot_admin": "^1.0",
+        "opentalent/ot_templating": "^1.0",
+        "opentalent/ot_stats": "^1.0",
+        "opentalent/ot_optimizer": "^1.0",
+        "opentalent/ot_connect": "^1.0"
     },
+    "repositories": [
+        {
+            "type": "path",
+            "url": "packages/*"
+        },
+        {
+            "type": "composer",
+            "url": "https://composer.typo3.org/"
+        }
+    ],
     "scripts": {
         "typo3-cms-scripts": [
             "typo3cms install:fixfolderstructure"
@@ -72,6 +76,7 @@
         }
     },
     "require-dev": {
-        "ssch/typo3-rector": "^1.3"
+        "ssch/typo3-rector": "^1.3",
+        "phpspec/prophecy": "^1.19"
     }
 }

+ 1 - 1
ot_admin/Classes/Command/UpdateSiteCommand.php

@@ -115,7 +115,7 @@ class UpdateSiteCommand extends Command
                     $this->siteController->updateSiteAction($org_id);
                 } catch (NoSuchOrganizationException $e) {
                     if ($delete) {
-                        $siteController->deleteSiteAction($org_id);
+                        $this->siteController->deleteSiteAction($org_id);
                     } else {
                         throw $e;
                     }

+ 9 - 3
ot_admin/composer.json

@@ -1,7 +1,8 @@
 {
-    "name": "opentalent/ot-admin",
+    "name": "opentalent/ot_admin",
     "type": "typo3-cms-extension",
     "description": "Admin commands for Typo3",
+    "version": "1.0",
     "authors": [
         {
             "name": "Olivier Massot",
@@ -9,8 +10,8 @@
         }
     ],
     "require": {
-        "typo3/cms-core": "^9.5 || ^10.4",
-        "twig/twig": "^2.13"
+        "typo3/cms-core": "^11.5 | ^12.4",
+        "opentalent/ot_core": "1.0"
     },
     "autoload": {
         "psr-4": {
@@ -25,5 +26,10 @@
     "replace": {
         "ot_admin": "self.version",
         "typo3-ter/ot-admin": "self.version"
+    },
+    "extra": {
+        "typo3/cms": {
+            "extension-key": "ot_admin"
+        }
     }
 }

+ 9 - 2
ot_connect/composer.json

@@ -1,7 +1,8 @@
 {
-    "name": "opentalent/ot-connect",
+    "name": "opentalent/ot_connect",
     "type": "typo3-cms-extension",
     "description": "Opentalent authentification plugin for Typo3",
+    "version": "1.0",
     "authors": [
         {
             "name": "Olivier Massot",
@@ -9,7 +10,8 @@
         }
     ],
     "require": {
-        "typo3/cms-core": "^9.5 || ^10.4"
+        "typo3/cms-core": "^11.5 | ^12.4",
+        "opentalent/ot_core": "1.0"
     },
     "autoload": {
         "psr-4": {
@@ -24,5 +26,10 @@
     "replace": {
         "ot_connect": "self.version",
         "typo3-ter/ot-connect": "self.version"
+    },
+    "extra": {
+        "typo3/cms": {
+            "extension-key": "ot_connect"
+        }
     }
 }

+ 17 - 1
ot_core/Classes/Controller/SelectedSiteController.php

@@ -8,6 +8,7 @@ use Opentalent\OtCore\Exception\NoSuchWebsiteException;
 use Opentalent\OtCore\Website\OtPageRepository;
 use Psr\Http\Message\ResponseInterface;
 use TYPO3\CMS\Core\Database\ConnectionPool;
+use TYPO3\CMS\Extbase\Mvc\Controller\Arguments;
 use TYPO3\CMS\Extbase\Mvc\Exception\StopActionException;
 use TYPO3\CMS\Extbase\Mvc\RequestInterface;
 use TYPO3\CMS\Extbase\Object\ObjectManager;
@@ -71,7 +72,7 @@ class SelectedSiteController extends ActionController
         }
 
         // [TESTS ONLY]
-        if ($this->preventPropagation) { return parent::callActionMethod($request); }
+        if ($this->preventPropagation) { return $this->callParentActionMethod($request); }
 
         // No site is selected, redirect to the warning page
         if ($this->actionMethodName != 'displayNoSelectedPageWarningAction' && $this->currentRootUid == null) {
@@ -80,8 +81,23 @@ class SelectedSiteController extends ActionController
             // $this->forward('displayNoSelectedPageWarning', 'SelectedSite', 'OtCore');
         }
 
+        return $this->callParentActionMethod($request);
+    }
+
+    protected function callParentActionMethod(RequestInterface $request): ResponseInterface
+    {
         return parent::callActionMethod($request);
     }
 
     protected function displayNoSelectedPageWarningAction() {}
+
+//    /**
+//     * [TESTS ONLY]
+//     * @param Arguments $arguments
+//     * @return void
+//     */
+//    public function injectArguments(Arguments $arguments): void
+//    {
+//        $this->arguments = $arguments;
+//    }
 }

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
ot_core/Tests/Build/.phpunit.result.cache


+ 115 - 43
ot_core/Tests/Unit/Controller/SelectedSiteControllerTest.php

@@ -5,51 +5,55 @@ namespace Opentalent\OtCore\Tests\Unit\Controller;
 use Nimut\TestingFramework\TestCase\UnitTestCase;
 use Opentalent\OtCore\Controller\SelectedSiteController;
 use Opentalent\OtCore\Exception\NoSiteSelected;
-use Opentalent\OtCore\Exception\NoSuchWebsiteException;
 use Opentalent\OtCore\Website\OtPageRepository;
 use Opentalent\OtCore\Website\OtWebsiteRepository;
-use Prophecy\Argument;
+use PHPUnit\Framework\MockObject\MockObject;
+use Psr\Http\Message\ResponseInterface;
+use TYPO3\CMS\Extbase\Mvc\RequestInterface;
 
-class SelectedSiteControllerTest extends UnitTestCase
-{
-    private $controller;
+class TestableSelectedSiteController extends SelectedSiteController {
+    public $currentWebsite;
+    public $currentRootUid;
 
-    public function setUp() {
-        $this->controller = new SelectedSiteController();
+    public function callActionMethod(RequestInterface $request): \Psr\Http\Message\ResponseInterface
+    {
+        return parent::callActionMethod($request);
     }
 
-    private function injectPageRepositoryWithSelectedUidAndMountpoints(?int $selectedUid, array $mountpoints = []) {
-        $otPageRepository = $this->prophesize(OtPageRepository::class);
-
-        if ($selectedUid != null) {
-            $otPageRepository->getCurrentBeRootUid()->willReturn($selectedUid);
-        } else {
-            $otPageRepository->getCurrentBeRootUid()->willThrow(new NoSiteSelected());
-        }
-        $otPageRepository->getCurrentBeUserMountpoints()->shouldBeCalled()->willReturn($mountpoints);
-        $this->controller->injectOtPageRepository($otPageRepository->reveal());
-
-        $otWebsiteRepository = $this->prophesize(OtWebsiteRepository::class);
-        $otWebsiteRepository->getWebsiteByPageUid(Argument::type('integer'))->willReturn(['uid' => 1, 'title' => 'Foo']);
-        $this->controller->injectOtWebsiteRepository($otWebsiteRepository->reveal());
-
+    public function callParentActionMethod(RequestInterface $request): \Psr\Http\Message\ResponseInterface
+    {
+        return parent::callParentActionMethod($request);
     }
+}
 
-    private function callActionMethodProxy() {
-        $reflection = new \ReflectionObject($this->controller);
-        $method = $reflection->getMethod('callActionMethod');
-        $method->setAccessible(true);
-
-        $argumentsProperty = $reflection->getProperty('preventPropagation');
-        $argumentsProperty->setAccessible(true);;
-        $argumentsProperty->setValue($this->controller, true);
+class SelectedSiteControllerTest extends UnitTestCase
+{
+    protected MockObject | OtPageRepository $otPageRepository;
+    protected MockObject | OtWebsiteRepository $otWebsiteRepository;
+
+    public function setUp(): void
+    {
+        $this->otPageRepository = $this
+            ->getMockBuilder(OtPageRepository::class)
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->otWebsiteRepository = $this
+            ->getMockBuilder(OtWebsiteRepository::class)
+            ->disableOriginalConstructor()
+            ->getMock();
+    }
 
-        $method->invokeArgs($this->controller, []);
+    public function getMockForMethod(string $methodName): MockObject | TestableSelectedSiteController
+    {
+        $controller = $this->getMockBuilder(TestableSelectedSiteController::class)
+            ->setMethodsExcept([$methodName, 'injectOtPageRepository', 'injectOtWebsiteRepository'])
+            ->getMock();
 
-        $currentRootUidProperty = $reflection->getProperty('currentRootUid');
-        $currentRootUidProperty->setAccessible(true);
+        $controller->injectOtPageRepository($this->otPageRepository);
+        $controller->injectOtWebsiteRepository($this->otWebsiteRepository);
 
-        return $currentRootUidProperty->getValue($this->controller);
+        return $controller;
     }
 
     /**
@@ -59,12 +63,38 @@ class SelectedSiteControllerTest extends UnitTestCase
      * @test
      */
     public function callActionMethodForSingleSite() {
+        $controller = $this->getMockForMethod('callActionMethod');
+
+        $this->otPageRepository->method('getCurrentBeRootUid')->willThrowException(new NoSiteSelected());
+
+        $this->otPageRepository
+            ->expects(self::once())
+            ->method('getCurrentBeUserMountpoints')
+            ->willReturn([1]);
 
-        $this->injectPageRepositoryWithSelectedUidAndMountpoints(null, [1]);
+        $this->otWebsiteRepository
+            ->expects(self::once())
+            ->method('getWebsiteByPageUid')
+            ->with(1)
+            ->willReturn(['uid' => 1, 'title' => 'Foo']);
 
-        $currentRootUid = $this->callActionMethodProxy();
+        $response = $this
+            ->getMockBuilder(ResponseInterface::class)
+            ->disableOriginalConstructor()
+            ->getMock();
 
-        $this->assertEquals(1, $currentRootUid);
+        $controller
+            ->expects(self::once())
+            ->method('callParentActionMethod')
+            ->willReturn($response);
+
+        $request = $this->getMockBuilder(RequestInterface::class)->disableOriginalConstructor()->getMock();
+
+        $result = $controller->callActionMethod($request);
+
+        $this->assertEquals($response, $result);
+        $this->assertEquals($controller->currentRootUid, 1);
+        $this->assertEquals($controller->currentWebsite, ['uid' => 1, 'title' => 'Foo']);
     }
 
     /**
@@ -74,12 +104,37 @@ class SelectedSiteControllerTest extends UnitTestCase
      * @test
      */
     public function callActionMethodForMultiSite() {
+        $controller = $this->getMockForMethod('callActionMethod');
+
+        $this->otPageRepository->method('getCurrentBeRootUid')->willReturn(2);
+
+        $this->otPageRepository
+            ->expects(self::once())
+            ->method('getCurrentBeUserMountpoints')
+            ->willReturn([1, 2]);
+
+        $this->otWebsiteRepository
+            ->method('getWebsiteByPageUid')
+            ->with(2, true)
+            ->willReturn(['uid' => 2, 'title' => 'Bar']);
 
-        $this->injectPageRepositoryWithSelectedUidAndMountpoints(2, [1, 2]);
+        $request = $this->getMockBuilder(RequestInterface::class)->disableOriginalConstructor()->getMock();
 
-        $currentRootUid = $this->callActionMethodProxy();
+        $response = $this
+            ->getMockBuilder(ResponseInterface::class)
+            ->disableOriginalConstructor()
+            ->getMock();
 
-        $this->assertEquals(2, $currentRootUid);
+        $controller
+            ->expects(self::once())
+            ->method('callParentActionMethod')
+            ->willReturn($response);
+
+        $result = $controller->callActionMethod($request);
+
+        $this->assertEquals($response, $result);
+        $this->assertEquals($controller->currentRootUid, 2);
+        $this->assertEquals($controller->currentWebsite, ['uid' => 2, 'title' => 'Bar']);
     }
 
     /**
@@ -89,11 +144,28 @@ class SelectedSiteControllerTest extends UnitTestCase
      * @test
      */
     public function callActionMethodForNoSite() {
+        $controller = $this->getMockForMethod('callActionMethod');
+
+        $this->otPageRepository->method('getCurrentBeRootUid')->willThrowException(new NoSiteSelected());
+
+        $this->otPageRepository
+            ->expects(self::once())
+            ->method('getCurrentBeUserMountpoints')
+            ->willReturn([1, 2]);
+
+        $this->otWebsiteRepository
+            ->expects(self::never())
+            ->method('getWebsiteByPageUid');
+
+        $controller
+            ->expects(self::never())
+            ->method('callParentActionMethod');
 
-        $this->injectPageRepositoryWithSelectedUidAndMountpoints(null, [1, 2]);
+        $request = $this->getMockBuilder(RequestInterface::class)->disableOriginalConstructor()->getMock();
 
-        $currentRootUid = $this->callActionMethodProxy();
+        $this->expectException(\Exception::class);
+        $this->expectExceptionMessage("No website selected");
 
-        $this->assertNull($currentRootUid);
+        $controller->callActionMethod($request);
     }
 }

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

@@ -8,6 +8,7 @@ use Opentalent\OtCore\Domain\Repository\BaseApiRepository;
 use Opentalent\OtCore\Service\OpentalentApiService;
 use Opentalent\OtCore\Tests\Unit\Fixtures\ApiResponseFixtures;
 use Prophecy\Argument;
+use Prophecy\PhpUnit\ProphecyTrait;
 use ReflectionClass;
 use TYPO3\CMS\Core\Core\ApplicationContext;
 
@@ -18,6 +19,8 @@ use TYPO3\CMS\Core\Core\ApplicationContext;
  */
 abstract class AbstractApiRepositoryTestCase extends UnitTestCase
 {
+    use ProphecyTrait;
+
     const TESTED_CLASS = '';
 
     protected $context;
@@ -36,7 +39,8 @@ abstract class AbstractApiRepositoryTestCase extends UnitTestCase
 
     protected $service;
 
-    public function setUp() {
+    public function setUp(): void
+    {
         // mock the application context
         $this->context = $this->prophesize(ApplicationContext::class);
         $this->context->isProduction()->willReturn(false);
@@ -61,6 +65,7 @@ abstract class AbstractApiRepositoryTestCase extends UnitTestCase
     protected function injectClientFor($uri, $http_method='GET') {
         // mock the Guzzle client
         $willReturn = $this->fixture->get($uri);
+
         $client = $this->prophesize(Client::class);
         $client->request($http_method, $uri, [])
             ->shouldBeCalled()

+ 3 - 2
ot_core/Tests/Unit/Domain/Repository/BaseApiRepositoryTest.php

@@ -2,10 +2,9 @@
 
 namespace Opentalent\OtCore\Tests\Unit\Domain\Repository;
 
-use GuzzleHttp\Client;
 use Opentalent\OtCore\Domain\Repository\ApiPagedCollection;
 use Opentalent\OtCore\Domain\Repository\BaseApiRepository;
-use Opentalent\OtCore\Exception\ApiRequestException;
+use Prophecy\PhpUnit\ProphecyTrait;
 
 /**
  * Proxy to reveal the private methods of the abstract class BaseApiRepository
@@ -19,6 +18,8 @@ class ConcreteBaseApiRepository extends BaseApiRepository {
 
 class BaseApiRepositoryTest extends AbstractApiRepositoryTestCase
 {
+    use ProphecyTrait;
+
     const TESTED_CLASS = 'Opentalent\OtCore\Tests\Unit\Domain\Repository\ConcreteBaseApiRepository';
 
     /**

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

@@ -2,11 +2,13 @@
 
 namespace Opentalent\OtCore\Tests\Unit\Domain\Repository;
 
-use Opentalent\OtCore\Domain\Repository\DonorRepository;
+use Prophecy\PhpUnit\ProphecyTrait;
 
 
 class DonorRepositoryTest extends AbstractApiRepositoryTestCase
 {
+    use ProphecyTrait;
+
     const TESTED_CLASS = "Opentalent\OtCore\Domain\Repository\DonorRepository";
 
     /**

+ 3 - 5
ot_core/Tests/Unit/Domain/Repository/EventRepositoryTest.php

@@ -2,8 +2,6 @@
 
 namespace Opentalent\OtCore\Tests\Unit\Domain\Repository;
 
-use Opentalent\OtCore\Domain\Repository\EventRepository;
-
 
 class EventRepositoryTest extends AbstractApiRepositoryTestCase
 {
@@ -49,7 +47,7 @@ class EventRepositoryTest extends AbstractApiRepositoryTestCase
     public function findByOrganizationIdWithParams() {
         $organization_id = 1;
 
-        $expected_uri = "api/public/events?_format=json&organizationId=1&page=1&itemsPerPage=1&filter%5Bwhere%5D%5BdatetimeStart%5D%5Bgte%5D=2021-01-01T00%3A00%3A00%2B00%3A00&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Blte%5D=2021-01-31T00%3A00%3A00%2B00%3A00&filter%5Border%5D%5B0%5D%5BdatetimeStart%5D=ASC";
+        $expected_uri = "api/public/events?_format=json&organizationId=1&page=1&itemsPerPage=1&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Bgte%5D=2021-01-01T00%3A00%3A00%2B00%3A00&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Blte%5D=2021-01-31T00%3A00%3A00%2B00%3A00&filter%5Border%5D%5B0%5D%5BdatetimeStart%5D=ASC";
         $this->injectClientFor($expected_uri);
 
         $actual = $this->repository->findByOrganizationId(
@@ -87,7 +85,7 @@ class EventRepositoryTest extends AbstractApiRepositoryTestCase
     public function findParentsByOrganizationIdWithParams() {
         $organization_id = 1;
 
-        $expected_uri = "api/public/events?_format=json&organizationId=1&page=1&itemsPerPage=1&filter%5Bwhere%5D%5BdatetimeStart%5D%5Bgte%5D=2021-01-01T00%3A00%3A00%2B00%3A00&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Blte%5D=2021-01-31T00%3A00%3A00%2B00%3A00&filter%5Border%5D%5B0%5D%5BdatetimeStart%5D=ASC&parent=1";
+        $expected_uri = "api/public/events?_format=json&organizationId=1&page=1&itemsPerPage=1&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Bgte%5D=2021-01-01T00%3A00%3A00%2B00%3A00&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Blte%5D=2021-01-31T00%3A00%3A00%2B00%3A00&filter%5Border%5D%5B0%5D%5BdatetimeStart%5D=ASC&parent=1";
         $this->injectClientFor($expected_uri);
 
         $actual = $this->repository->findParentsByOrganizationId(
@@ -125,7 +123,7 @@ class EventRepositoryTest extends AbstractApiRepositoryTestCase
     public function findChildrenByOrganizationIdWithParams() {
         $organization_id = 1;
 
-        $expected_uri = "api/public/events?_format=json&organizationId=1&itemsPerPage=1&filter%5Bwhere%5D%5BdatetimeStart%5D%5Bgte%5D=2021-01-01T00%3A00%3A00%2B00%3A00&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Blte%5D=2021-01-31T00%3A00%3A00%2B00%3A00&filter%5Border%5D%5B0%5D%5BdatetimeStart%5D=ASC&children=1";
+        $expected_uri = "api/public/events?_format=json&organizationId=1&itemsPerPage=1&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Bgte%5D=2021-01-01T00%3A00%3A00%2B00%3A00&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Blte%5D=2021-01-31T00%3A00%3A00%2B00%3A00&filter%5Border%5D%5B0%5D%5BdatetimeStart%5D=ASC&children=1";
         $this->injectClientFor($expected_uri);
 
         $actual = $this->repository->findChildrenByOrganizationId(

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

@@ -2,11 +2,13 @@
 
 namespace Opentalent\OtCore\Tests\Unit\Domain\Repository;
 
-use Opentalent\OtCore\Domain\Repository\MemberRepository;
+use Prophecy\PhpUnit\ProphecyTrait;
 
 
 class MemberRepositoryTest extends AbstractApiRepositoryTestCase
 {
+    use ProphecyTrait;
+
     const TESTED_CLASS = "Opentalent\OtCore\Domain\Repository\MemberRepository";
 
     /**

+ 3 - 0
ot_core/Tests/Unit/Domain/Repository/OrganizationRepositoryTest.php

@@ -3,10 +3,13 @@
 namespace Opentalent\OtCore\Tests\Unit\Domain\Repository;
 
 use Opentalent\OtCore\Domain\Repository\OrganizationRepository;
+use Prophecy\PhpUnit\ProphecyTrait;
 
 
 class OrganizationRepositoryTest extends AbstractApiRepositoryTestCase
 {
+    use ProphecyTrait;
+
     const TESTED_CLASS = "Opentalent\OtCore\Domain\Repository\OrganizationRepository";
 
     /**

+ 3 - 3
ot_core/Tests/Unit/Fixtures/ApiResponseFixtures.php

@@ -177,9 +177,9 @@ class ApiResponseFixtures
         'api/public/events?_format=json&organizationId=1&page=1&filter%5Border%5D%5B0%5D%5BdatetimeStart%5D=ASC&parent=1&itemsPerPage=8' => 'event',
         'api/public/events?_format=json&organizationId=1&filter%5Border%5D%5B0%5D%5BdatetimeStart%5D=ASC&children=1&itemsPerPage=8' => 'event',
         'api/public/events?_format=json&organizationId=1&filter%5Border%5D%5B0%5D%5BdatetimeStart%5D=ASC&filter%5Bwhere%5D%5Bid%5D=1&itemsPerPage=8' => 'event',
-        'api/public/events?_format=json&organizationId=1&page=1&itemsPerPage=1&filter%5Bwhere%5D%5BdatetimeStart%5D%5Bgte%5D=2021-01-01T00%3A00%3A00%2B00%3A00&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Blte%5D=2021-01-31T00%3A00%3A00%2B00%3A00&filter%5Border%5D%5B0%5D%5BdatetimeStart%5D=ASC' => 'event',
-        'api/public/events?_format=json&organizationId=1&page=1&itemsPerPage=1&filter%5Bwhere%5D%5BdatetimeStart%5D%5Bgte%5D=2021-01-01T00%3A00%3A00%2B00%3A00&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Blte%5D=2021-01-31T00%3A00%3A00%2B00%3A00&filter%5Border%5D%5B0%5D%5BdatetimeStart%5D=ASC&parent=1' => 'event',
-        'api/public/events?_format=json&organizationId=1&itemsPerPage=1&filter%5Bwhere%5D%5BdatetimeStart%5D%5Bgte%5D=2021-01-01T00%3A00%3A00%2B00%3A00&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Blte%5D=2021-01-31T00%3A00%3A00%2B00%3A00&filter%5Border%5D%5B0%5D%5BdatetimeStart%5D=ASC&children=1' => 'event',
+        'api/public/events?_format=json&organizationId=1&page=1&itemsPerPage=1&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Bgte%5D=2021-01-01T00%3A00%3A00%2B00%3A00&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Blte%5D=2021-01-31T00%3A00%3A00%2B00%3A00&filter%5Border%5D%5B0%5D%5BdatetimeStart%5D=ASC' => 'event',
+        'api/public/events?_format=json&organizationId=1&page=1&itemsPerPage=1&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Bgte%5D=2021-01-01T00%3A00%3A00%2B00%3A00&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Blte%5D=2021-01-31T00%3A00%3A00%2B00%3A00&filter%5Border%5D%5B0%5D%5BdatetimeStart%5D=ASC&parent=1' => 'event',
+        'api/public/events?_format=json&organizationId=1&itemsPerPage=1&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Bgte%5D=2021-01-01T00%3A00%3A00%2B00%3A00&filter%5Bwhere%5D%5BdatetimeEnd%5D%5Blte%5D=2021-01-31T00%3A00%3A00%2B00%3A00&filter%5Border%5D%5B0%5D%5BdatetimeStart%5D=ASC&children=1' => 'event',
         'api/public/donors?_format=json&organizationId=1&page=1&itemsPerPage=99' => 'donor',
         'api/public/donors?_format=json&organizationId=1&parent=1&page=1&itemsPerPage=99' => 'donor',
         'api/public/members?_format=json&filter%5Bwhere%5D%5BorganizationId%5D=1&itemsPerPage=20000' => 'member',

+ 5 - 1
ot_core/Tests/Unit/Service/OpentalentApiServiceTest.php

@@ -10,10 +10,13 @@ use Opentalent\OtCore\Service\OpentalentApiService;
 use Opentalent\OtCore\Tests\Unit\Fixtures\ApiResponseFixtures;
 use PHPUnit\TextUI\RuntimeException;
 use Prophecy\Argument;
+use Prophecy\PhpUnit\ProphecyTrait;
 use TYPO3\CMS\Core\Core\ApplicationContext;
 
 class OpentalentApiServiceTest extends UnitTestCase
 {
+    use ProphecyTrait;
+
     protected $context;
     /**
      * @var ApiResponseFixtures
@@ -26,7 +29,8 @@ class OpentalentApiServiceTest extends UnitTestCase
 
     protected $service;
 
-    public function setUp() {
+    public function setUp(): void
+    {
         // mock the application context
         $this->context = $this->prophesize(ApplicationContext::class);
         $this->context->isProduction()->willReturn(false);

+ 5 - 1
ot_core/Tests/Unit/Website/OtPageRepositoryTest.php

@@ -7,19 +7,23 @@ use Opentalent\OtCore\Website\OtPageRepository;
 use Nimut\TestingFramework\TestCase\UnitTestCase;
 use Opentalent\OtCore\Tests\Unit\Fixtures\PageFixtures;
 use Opentalent\OtCore\Tests\Unit\QueryBuilderProphet;
+use Prophecy\PhpUnit\ProphecyTrait;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Domain\Repository\PageRepository;
 
 
 class OtPageRepositoryTest extends UnitTestCase
 {
+    use ProphecyTrait;
+
     protected $pageService;
     protected $pageRepository;
     protected $connectionPool;
     protected $pageFixtures;
     protected $otPageRepository;
 
-    public function setUp() {
+    public function setUp(): void
+    {
         // Prophecies to be injected in the under test OtPageRepository
         $this->pageService = $this->prophesize(PageService::class);
         $this->pageRepository = $this->prophesize(PageRepository::class);

+ 5 - 1
ot_core/Tests/Unit/Website/OtWebsiteRepositoryTest.php

@@ -12,16 +12,20 @@ use Opentalent\OtCore\Tests\Unit\Fixtures\WebsiteFixtures;
 use Opentalent\OtCore\Tests\Unit\QueryBuilderProphet;
 use Opentalent\OtCore\Website\OtPageRepository;
 use Opentalent\OtCore\Website\OtWebsiteRepository;
+use Prophecy\PhpUnit\ProphecyTrait;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 
 class OtWebsiteRepositoryTest extends UnitTestCase
 {
+    use ProphecyTrait;
+
     protected $connectionPool;
     protected $pageFixtures;
     protected $websiteFixtures;
     protected $otWebsiteRepository;
 
-    public function setUp() {
+    public function setUp(): void
+    {
         // Prophecies to be injected in the under test OtPageRepository
         $this->connectionPool = $this->prophesize(ConnectionPool::class);
 

+ 16 - 7
ot_core/composer.json

@@ -1,6 +1,7 @@
 {
     "name": "opentalent/ot_core",
     "type": "typo3-cms-extension",
+    "version": "1.0",
     "description": "Core extension par Opentalent",
     "authors": [
         {
@@ -9,12 +10,19 @@
         }
     ],
     "require": {
-        "typo3/cms-core": "^11.5",
-        "fluidtypo3/vhs": "^6.1",
-        "fluidtypo3/flux": "^9.7",
-        "guzzlehttp/guzzle": "^6",
+        "typo3/cms-core": "^11.5 | ^12.4",
+        "fluidtypo3/flux": "^10.0",
+        "fluidtypo3/vhs": "^7.0",
+        "georgringer/news": "^11.4",
+        "causal/image_autoresize": "^2.4",
+        "guzzlehttp/guzzle": "^7.7",
+        "twig/twig": "^3.3",
+        "phpunit/phpunit": "^9.5",
+        "waldhacker/hcaptcha": "^2.1",
         "nimut/typo3-complete": "11.5",
-        "nimut/testing-framework": "^6.0"
+        "nimut/testing-framework": "^6.0",
+        "ext-json": "*",
+        "co-stack/logs": "*"
     },
     "replace": {
         "opentalent/ot_core": "self.version",
@@ -38,8 +46,6 @@
             "Opentalent\\OtCore\\Tests\\": "Tests"
         }
     },
-    "require-dev": {
-    },
     "scripts": {
         "post-autoload-dump": [
             "@prepare-extension-test-structure"
@@ -54,5 +60,8 @@
             "web-dir": ".Build/Web",
             "extension-key": "ot_core"
         }
+    },
+    "require-dev": {
+        "phpspec/prophecy-phpunit": "^2.2"
     }
 }

+ 9 - 2
ot_optimizer/composer.json

@@ -1,7 +1,8 @@
 {
-    "name": "opentalent/ot-optimizer",
+    "name": "opentalent/ot_optimizer",
     "type": "typo3-cms-extension",
     "description": "Optimize the Typo3 FE and BE behaviour for large amount of sites",
+    "version": "1.0",
     "authors": [
         {
             "name": "Olivier Massot",
@@ -9,7 +10,8 @@
         }
     ],
     "require": {
-        "typo3/cms-core": "^9.5"
+        "typo3/cms-core": "^11.5 | ^12.4",
+        "opentalent/ot_core": "1.0"
     },
     "autoload": {
         "psr-4": {
@@ -24,5 +26,10 @@
     "replace": {
         "ot_optimizer": "self.version",
         "typo3-ter/ot-optimizer": "self.version"
+    },
+    "extra": {
+        "typo3/cms": {
+            "extension-key": "ot_optimizer"
+        }
     }
 }

+ 8 - 3
ot_stats/composer.json

@@ -2,6 +2,7 @@
     "name": "opentalent/ot_stats",
     "type": "typo3-cms-extension",
     "description": "Statistiques d'utilisation par Opentalent",
+    "version": "1.0",
     "authors": [
         {
             "name": "Olivier Massot",
@@ -9,9 +10,8 @@
         }
     ],
     "require": {
-        "typo3/cms-core": "^11.5",
-        "fluidtypo3/vhs": "^6",
-        "fluidtypo3/flux": "^9"
+        "typo3/cms-core": "^11.5 | ^12.4",
+        "opentalent/ot_core": "1.0"
     },
     "replace": {
         "ot_stats": "self.version",
@@ -21,5 +21,10 @@
         "psr-4": {
             "Opentalent\\OtStats\\": "Classes"
         }
+    },
+    "extra": {
+        "typo3/cms": {
+            "extension-key": "ot_stats"
+        }
     }
 }

+ 8 - 7
ot_templating/composer.json

@@ -2,6 +2,7 @@
     "name": "opentalent/ot_templating",
     "type": "typo3-cms-extension",
     "description": "Gabarits Typo3 par Opentalent",
+    "version": "1.0",
     "authors": [
         {
             "name": "Olivier Massot",
@@ -9,13 +10,8 @@
         }
     ],
     "require": {
-        "typo3/cms-core": "^11.5",
-        "fluidtypo3/vhs": "^6",
-        "fluidtypo3/flux": "^9",
-        "co-stack/logs": "*",
-        "guzzlehttp/guzzle": "^7",
-        "ext-json": "^1.6",
-        "sgalinski/lfeditor": "^7"
+        "typo3/cms-core": "^11.5 | ^12.4",
+        "opentalent/ot_core": "1.0"
     },
     "replace": {
         "ot_templating": "self.version",
@@ -30,5 +26,10 @@
         "psr-4": {
             "Opentalent\\OtTemplating\\Tests\\": "Tests"
         }
+    },
+    "extra": {
+        "typo3/cms": {
+            "extension-key": "ot_templating"
+        }
     }
 }

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است