# 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 (750 tests, 2114 assertions)
```

Zweryfikowano: 2026-02-22 (ver. 0.304)

## 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
|   |   |-- 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
|   `-- 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
|   `-- 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

```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`
