]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Тесты и правки окружения
authorVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 20 Jan 2026 11:19:53 +0000 (14:19 +0300)
committerVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 20 Jan 2026 11:19:53 +0000 (14:19 +0300)
erp24/config/env.php
erp24/tests/unit/services/OrderControlReportServiceTest.php

index a86dee18196aa25d510270cb87b0176ff1a47995..a3c5057a7fe165cd9b7211eac0e43088d8a30e65 100644 (file)
@@ -1,7 +1,23 @@
 <?php
 
+/**
+ * Загрузка переменных окружения из .env файла
+ *
+ * ВАЖНО: Используем createUnsafeImmutable() вместо createImmutable()
+ * потому что createImmutable() в Dotenv v5 НЕ вызывает putenv() автоматически.
+ * Это приводит к тому, что getenv() возвращает false, хотя $_ENV заполнен.
+ *
+ * createUnsafeImmutable() включает PutenvAdapter, который:
+ * - Заполняет $_ENV
+ * - Заполняет $_SERVER
+ * - Вызывает putenv() для каждой переменной
+ *
+ * "Unsafe" означает только то, что putenv() не thread-safe в многопоточных SAPI,
+ * но для PHP-FPM (prefork модель) это безопасно.
+ */
+
 try {
-    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/../');
+    $dotenv = Dotenv\Dotenv::createUnsafeImmutable(__DIR__ . '/../');
     $dotenv->load();
 
     // Обязательные переменные окружения
@@ -19,17 +35,10 @@ try {
     $dotenv->ifPresent('DB_PORT')->isInteger();
     $dotenv->ifPresent('DB_REMOTE_PORT')->isInteger();
 
-    foreach ($_ENV as $key => $value) {
-        if (is_scalar($value)) {
-            putenv("$key=$value");
-        } else {
-            Yii::warning("Переменная окружения $key имеет нескалярное значение и не может быть установлена через putenv");
-        }
-    }
 } catch (\Dotenv\Exception\InvalidPathException $e) {
     putenv("APP_ENV=development");
-    Yii::error('Файл .env не найден: ' . $e->getMessage());
+    error_log('[ENV ERROR] Файл .env не найден: ' . $e->getMessage());
 } catch (\Dotenv\Exception\ValidationException $e) {
-    Yii::error('Ошибка валидации .env: ' . $e->getMessage());
+    error_log('[ENV ERROR] Ошибка валидации .env: ' . $e->getMessage());
     throw $e; // Прекращаем выполнение при отсутствии обязательных переменных
 }
index 28e2b6570488c00d20ddd8a2de265680d5d8c25e..305d13d8f7faeb977f18494f9b99f187a2736d67 100644 (file)
@@ -150,18 +150,27 @@ class OrderControlReportServiceTest extends Unit
     {
         $result = new ControlReportResult();
 
-        $result->hungInDelivery = [
-            new OrderIssue(OrderIssue::TYPE_HUNG_IN_DELIVERY, 1, 'FW-1'),
-        ];
-        $result->successNoCheck = [
-            new OrderIssue(OrderIssue::TYPE_SUCCESS_NO_CHECK, 2, 'YM-2'),
-        ];
-        $result->cancelNoProcess = [
-            new OrderIssue(OrderIssue::TYPE_CANCEL_NO_PROCESS, 3, 'FW-3'),
-        ];
-        $result->successMissingData = [
-            new OrderIssue(OrderIssue::TYPE_SUCCESS_MISSING_DATA, 4, 'FW-4'),
-        ];
+        $issue1 = new OrderIssue(OrderIssue::TYPE_HUNG_IN_DELIVERY, 1, 'FW-1');
+        $issue1->mpStatus = 'В доставке';
+        $issue1->rmkStatus = 'Курьеру';
+
+        $issue2 = new OrderIssue(OrderIssue::TYPE_SUCCESS_NO_CHECK, 2, 'YM-2');
+        $issue2->mpStatus = 'Доставлен';
+        $issue2->rmkStatus = 'Новый';
+
+        $issue3 = new OrderIssue(OrderIssue::TYPE_CANCEL_NO_PROCESS, 3, 'FW-3');
+        $issue3->mpStatus = 'Отменён';
+        $issue3->rmkStatus = 'Новый';
+
+        $issue4 = new OrderIssue(OrderIssue::TYPE_SUCCESS_MISSING_DATA, 4, 'FW-4');
+        $issue4->mpStatus = 'Доставлен';
+        $issue4->rmkStatus = 'Успех';
+        $issue4->issueReason = 'no_seller_id';
+
+        $result->hungInDelivery = [$issue1];
+        $result->successNoCheck = [$issue2];
+        $result->cancelNoProcess = [$issue3];
+        $result->successMissingData = [$issue4];
         $result->calculateTotal();
 
         $message = $this->service->formatTelegramControlReport($result);
@@ -178,9 +187,12 @@ class OrderControlReportServiceTest extends Unit
     public function testFormatTelegramControlReportUsesCodeBlock(): void
     {
         $result = new ControlReportResult();
-        $result->hungInDelivery = [
-            new OrderIssue(OrderIssue::TYPE_HUNG_IN_DELIVERY, 1, 'FW-1'),
-        ];
+
+        $issue = new OrderIssue(OrderIssue::TYPE_HUNG_IN_DELIVERY, 1, 'FW-1');
+        $issue->mpStatus = 'В доставке';
+        $issue->rmkStatus = 'Курьеру';
+
+        $result->hungInDelivery = [$issue];
         $result->calculateTotal();
 
         $message = $this->service->formatTelegramControlReport($result);