# Testowanie shopPRO ## Szybki start ```bash # 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 ```text 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//Test.php`, `tests/Unit/admin/Controllers/Test.php` lub `tests/Unit/api/Controllers/Test.php`. 2. Rozszerz `PHPUnit\Framework\TestCase`. 3. Nazwy metod zaczynaj od `test`. 4. Wzorzec AAA: Arrange, Act, Assert. ## Mockowanie Medoo ```php $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`