From 0de83c3577ea75bad06fd4ef200e73e96e90e29d Mon Sep 17 00:00:00 2001
From: Julien LE GALL <julien.legall@libriciel.coop>
Date: Mon, 22 Apr 2024 17:15:21 +0200
Subject: [PATCH] corrections pour correspondre au rebase

---
 CHANGELOG.md                                  |  1 +
 class/AbstractWorkerRunner.php                |  1 -
 src/Services/Helios/HeliosReceptionWorker.php |  8 ++---
 .../Helios/HeliosReceptionWorkerTest.php      | 36 ++++++++++++++++---
 4 files changed, 35 insertions(+), 11 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2ecfb2a1a..c2d1459dd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@
 - Permettre de convertir les login/mot de passe de l'identification HTTP de l'ISO-8859-1 vers l'UTF-8 en spécifiant CONVERT_API_LOGINS_FROM_ISO #1071
 - Permettre de convertir les login/mot de passe contenus dans le nonce de l'ISO-8859-1 vers l'UTF-8 en spécifiant CONVERT_API_LOGINS_FROM_ISO #1071
 - Continuer la récupération des PES depuis le serveur DGFiP après un erreur de téléchargement #1183
+- Enregistrer les fichiers PES à récupérer depuis le serveur DGFiP dans une file Beanstalkd #1129
 
 ## 5.0.37 - 2024-04-03
 
diff --git a/class/AbstractWorkerRunner.php b/class/AbstractWorkerRunner.php
index f993b0f7a..0b1b54995 100644
--- a/class/AbstractWorkerRunner.php
+++ b/class/AbstractWorkerRunner.php
@@ -97,6 +97,5 @@ class AbstractWorkerRunner
                 $this->s2lowLogger->debug("RecoverableException " . $e->getMessage());
             }
         }
-        $this->worker->end();
     }
 }
diff --git a/src/Services/Helios/HeliosReceptionWorker.php b/src/Services/Helios/HeliosReceptionWorker.php
index d1955182f..1950fd898 100644
--- a/src/Services/Helios/HeliosReceptionWorker.php
+++ b/src/Services/Helios/HeliosReceptionWorker.php
@@ -64,22 +64,20 @@ class HeliosReceptionWorker implements IWorker
      */
     public function work($data)
     {
-        $sigtermHandler = SigTermHandler::getInstance();
         try {
             $this->ftpFileGetter->recupOneFile($data);
             if ($this->workerScript) {
                 $this->workerScript->putJobByClassName(HeliosAnalyseFichierRecuWorker::class, $data);
             }
-            if ($sigtermHandler->isSigtermCalled()) {
-                $this->ftpFileGetter->finTraitement();
-            }
         } catch (FTPFileRetrieveException $e) {
             // Dans ce cas, on va continuer à traiter les autres fichiers
+            // Car la RecoverableException reste dans la boucle de traitement du AbstractWorkerRunner
             $this->s2lowLogger->info("Probleme lors de la recuperation du fichier $data : " . $e->getMessage());
             throw new RecoverableException($e->getMessage());
         } catch (Exception $e) {
+            // Dans ce cas, on sort de la boucle de traitement du AbstractWorkerRunner
+            // car tous les autres types d'Exceptions ne sont pas catchées
             $this->s2lowLogger->info("Probleme lors de la recuperation du fichier $data : " . $e->getMessage());
-            $this->ftpFileGetter->finTraitement();
             throw $e;
         }
     }
diff --git a/tests/Services/Helios/HeliosReceptionWorkerTest.php b/tests/Services/Helios/HeliosReceptionWorkerTest.php
index b4d0e6dce..25f8459ec 100644
--- a/tests/Services/Helios/HeliosReceptionWorkerTest.php
+++ b/tests/Services/Helios/HeliosReceptionWorkerTest.php
@@ -4,11 +4,14 @@ declare(strict_types=1);
 
 namespace S2low\Tests\Services\Helios;
 
+use Exception;
+use RuntimeException;
 use PHPUnit\Framework\TestCase;
 use S2low\Services\Helios\DGFiPConnection\FTPFileRetrieveException;
 use S2low\Services\Helios\FTPHeliosReceiver;
 use S2low\Services\Helios\HeliosReceptionWorker;
 use S2lowLegacy\Class\helios\HeliosAnalyseFichierRecuWorker;
+use S2lowLegacy\Class\RecoverableException;
 use S2lowLegacy\Class\S2lowLogger;
 use S2lowLegacy\Class\WorkerScript;
 
@@ -35,6 +38,9 @@ class HeliosReceptionWorkerTest extends TestCase
         );
     }
 
+    /**
+     * @throws Exception
+     */
     public function testExecutionNormale(): void
     {
         // On récupère bien le fichier fileName
@@ -48,21 +54,41 @@ class HeliosReceptionWorkerTest extends TestCase
         $this->heliosReceptionWorker->work('fileName');
     }
 
+    /**
+     * @throws Exception
+     */
     public function testExecutionAvecFTPFileRetrieveException(): void
     {
         // Si l'exception FTPFileRetrieveException qui indique une erreur de récupération côté serveur est throw
         // lors de la récupération du fichier
         $this->FTPHeliosReceiver->expects(self::once())->method('recupOneFile')
-            ->willThrowException(new FTPFileRetrieveException());
+            ->willThrowException(new FTPFileRetrieveException('OupsieDaysy'));
         // On n'aura rien à envoyer dans la queue d'analyse des fichiers reçus
         $this->workerScript->expects(self::never())->method('putJobByClassName')
             ->with(HeliosAnalyseFichierRecuWorker::class, 'fileName');
-        // Mais on continuera le traitement des fichiers tout de même
-        $this->FTPHeliosReceiver->expects(self::never())->method('finTraitement');
+        // Et une RecoverableException est lancée
+        $this->expectException(RecoverableException::class);
+        $this->expectExceptionMessage('OupsieDaysy');
 
         $this->heliosReceptionWorker->work('fileName');
     }
 
-    // Pour l'instant, il n'est pas possible de tester que le déclenchement d'un autre type d'exception stoppera bien
-    // la réception ... Ce sera possible lorsqu'on changera le exit pour le changement d'une exception appropriée.
+    /**
+     * @throws Exception
+     */
+    public function testExecutionAvecAutreException(): void
+    {
+        // Si une Exception générique est throw
+        // lors de la récupération du fichier
+        $this->FTPHeliosReceiver->expects(self::once())->method('recupOneFile')
+            ->willThrowException(new RuntimeException('OupsieDaysy'));
+        // On n'aura rien à envoyer dans la queue d'analyse des fichiers reçus
+        $this->workerScript->expects(self::never())->method('putJobByClassName')
+            ->with(HeliosAnalyseFichierRecuWorker::class, 'fileName');
+        // Et l'exception est relancée
+        $this->expectException(RuntimeException::class);
+        $this->expectExceptionMessage('OupsieDaysy');
+
+        $this->heliosReceptionWorker->work('fileName');
+    }
 }
-- 
GitLab