Files
shopPRO/docs/TESTING.md
Jacek d3e3724cfb fix: Apilo email z danymi zamówienia + infinite retry co 30 min dla order jobów
- Email notyfikacji zawiera numer zamówienia, klienta, datę, kwotę
- Order joby (send_order, sync_payment, sync_status) ponawiane w nieskończoność co 30 min
- Rozróżnienie PONAWIANY vs TRWAŁY BŁĄD w emailu
- Cleanup stuck jobów po udanym wysłaniu zamówienia
- +2 testy infinite retry w CronJobRepositoryTest

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 11:23:02 +01:00

4.2 KiB

Testowanie shopPRO

Szybki start

# Pelny suite (PowerShell — rekomendowane)
./test.ps1

# Konkretny plik
./test.ps1 tests/Unit/Domain/Product/ProductRepositoryTest.php

# Konkretny test
./test.ps1 --filter testGetQuantityReturnsCorrectValue

# Alternatywne
composer test              # standard
./test.bat                 # testdox (czytelna lista)
./test-simple.bat          # kropki
./test-debug.bat           # debug
./test.sh                  # Git Bash

Aktualny stan

OK (820 tests, 2277 assertions)

Zweryfikowano: 2026-03-19 (ver. 0.342)

Konfiguracja

  • PHPUnit 9.6 via phpunit.phar
  • Bootstrap: tests/bootstrap.php
  • Config: phpunit.xml

Struktura testow

tests/
|-- bootstrap.php
|-- stubs/
|   |-- CacheHandler.php       (inline w bootstrap)
|   |-- Helpers.php            (Shared\Helpers\Helpers stub)
|   `-- ShopProduct.php        (shop\Product stub)
|-- Unit/
|   |-- Domain/
|   |   |-- Article/ArticleRepositoryTest.php
|   |   |-- Attribute/AttributeRepositoryTest.php
|   |   |-- Banner/BannerRepositoryTest.php
|   |   |-- Basket/BasketCalculatorTest.php
|   |   |-- Cache/CacheRepositoryTest.php
|   |   |-- Category/CategoryRepositoryTest.php
|   |   |-- Coupon/CouponRepositoryTest.php
|   |   |-- CronJob/CronJobTypeTest.php
|   |   |-- CronJob/CronJobRepositoryTest.php
|   |   |-- CronJob/CronJobProcessorTest.php
|   |   |-- Dictionaries/DictionariesRepositoryTest.php
|   |   |-- Integrations/IntegrationsRepositoryTest.php
|   |   |-- Languages/LanguagesRepositoryTest.php
|   |   |-- Layouts/LayoutsRepositoryTest.php
|   |   |-- Newsletter/NewsletterRepositoryTest.php
|   |   |-- Pages/PagesRepositoryTest.php
|   |   |-- PaymentMethod/PaymentMethodRepositoryTest.php
|   |   |-- Producer/ProducerRepositoryTest.php
|   |   |-- Product/ProductRepositoryTest.php
|   |   |-- ProductSet/ProductSetRepositoryTest.php
|   |   |-- Promotion/PromotionRepositoryTest.php
|   |   |-- Settings/SettingsRepositoryTest.php
|   |   |-- ShopStatus/ShopStatusRepositoryTest.php
|   |   |-- Transport/TransportRepositoryTest.php
|   |   |-- Update/UpdateRepositoryTest.php
|   |   `-- User/UserRepositoryTest.php
|   |-- Shared/
|   |   `-- Security/
|   |       `-- CsrfTokenTest.php
|   `-- admin/
|       `-- Controllers/
|           |-- ArticlesControllerTest.php
|           |-- DictionariesControllerTest.php
|           |-- IntegrationsControllerTest.php
|           |-- ProductArchiveControllerTest.php
|           |-- SettingsControllerTest.php
|           |-- ShopAttributeControllerTest.php
|           |-- ShopCategoryControllerTest.php
|           |-- ShopCouponControllerTest.php
|           |-- ShopPaymentMethodControllerTest.php
|           |-- ShopProducerControllerTest.php
|           |-- ShopProductControllerTest.php
|           |-- ShopProductSetsControllerTest.php
|           |-- ShopPromotionControllerTest.php
|           |-- ShopStatusesControllerTest.php
|           |-- ShopTransportControllerTest.php
|           `-- UsersControllerTest.php
|   |-- front/Controllers/
|   |   `-- ShopBasketControllerTest.php
|   `-- api/
|       |-- ApiRouterTest.php
|       `-- Controllers/
|           |-- OrdersApiControllerTest.php
|           |-- ProductsApiControllerTest.php
|           `-- DictionariesApiControllerTest.php
`-- Integration/                (puste — zarezerwowane)

Dodawanie nowych testow

  1. Plik w tests/Unit/Domain/<Module>/<Class>Test.php, tests/Unit/admin/Controllers/<Class>Test.php lub tests/Unit/api/Controllers/<Class>Test.php.
  2. Rozszerz PHPUnit\Framework\TestCase.
  3. Nazwy metod zaczynaj od test.
  4. Wzorzec AAA: Arrange, Act, Assert.

Mockowanie Medoo

$mockDb = $this->createMock(\medoo::class);
$mockDb->method('get')->willReturn(42);

$repo = new ProductRepository($mockDb);
$value = $repo->getQuantity(123);

$this->assertEquals(42, $value);

Bootstrap — stuby

tests/bootstrap.php rejestruje autoloader i definiuje stuby:

  • Redis, RedisConnection — klasy Redis (aby nie wymagac rozszerzenia)
  • Shared\Cache\CacheHandler — inline stub z get()/set()/exists()/delete()/deletePattern()
  • Shared\Helpers\Helpers — z tests/stubs/Helpers.php
  • shop\Product — z tests/stubs/ShopProduct.php