135 lines
3.9 KiB
Markdown
135 lines
3.9 KiB
Markdown
# Testing Patterns
|
|
|
|
**Analysis Date:** 2026-05-10
|
|
|
|
## Test Framework
|
|
|
|
**Runner:**
|
|
- PHPUnit (~5.7) — present only in select PrestaShop-shipped modules, NOT at project root
|
|
- Mockery — used by `modules/ps_facetedsearch/`
|
|
|
|
**Assertion Library:**
|
|
- PHPUnit built-in assertions
|
|
- Mockery for mocks: `Mockery::mock(Configuration::class)`
|
|
|
|
**Run Commands:**
|
|
- **No project-level test command exists.** Custom modules (`modules/crosssellpro/`, `modules/caraty/`) have no test suites.
|
|
- For modules that ship tests:
|
|
```bash
|
|
cd modules/ps_facetedsearch && php vendor/bin/phpunit -c tests/php/phpunit.xml
|
|
cd modules/gamification && php vendor/bin/phpunit
|
|
```
|
|
|
|
## Test File Organization
|
|
|
|
**Location:**
|
|
- Per-module: `modules/<module>/tests/`
|
|
- No root-level `tests/` directory
|
|
- No collocated tests
|
|
|
|
**Examples (third-party PrestaShop modules):**
|
|
- `modules/ps_facetedsearch/tests/php/FacetedSearch/Filters/BlockTest.php`
|
|
- `modules/gamification/tests/unit/AdviceTest.php`
|
|
- `modules/gamification/tests/functional/`
|
|
|
|
**Naming:**
|
|
- `*Test.php` suffix
|
|
- PSR-4 namespace under `Tests\`
|
|
|
|
**Custom modules in this project:**
|
|
- `modules/crosssellpro/` — **NO tests directory**
|
|
- `modules/caraty/` — **NO tests directory**
|
|
|
|
## Test Structure
|
|
|
|
Example from `modules/ps_facetedsearch/tests/php/FacetedSearch/Filters/BlockTest.php`:
|
|
```php
|
|
namespace PrestaShop\Module\FacetedSearch\Tests\Filters;
|
|
|
|
use Mockery;
|
|
use Mockery\Adapter\Phpunit\MockeryTestCase;
|
|
|
|
class BlockTest extends MockeryTestCase
|
|
{
|
|
protected function setUp()
|
|
{
|
|
$mock = Mockery::mock(Configuration::class);
|
|
$mock->shouldReceive('get')->andReturnUsing(function ($arg) { /* … */ });
|
|
}
|
|
}
|
|
```
|
|
|
|
PHPUnit config example (`modules/gamification/phpunit.xml`):
|
|
```xml
|
|
<phpunit bootstrap="tests/autoload.php">
|
|
<testsuites>
|
|
<testsuite name="Unit tests"><directory>tests/unit/</directory></testsuite>
|
|
<testsuite name="Functional tests"><directory>tests/functional/</directory></testsuite>
|
|
</testsuites>
|
|
<logging>
|
|
<log type="coverage-clover" target="build/clover.xml"/>
|
|
</logging>
|
|
</phpunit>
|
|
```
|
|
|
|
## Mocking
|
|
|
|
**Framework:**
|
|
- Mockery (in modules that test, e.g. `ps_facetedsearch`)
|
|
|
|
**Pattern:**
|
|
```php
|
|
$mock = Mockery::mock(Configuration::class);
|
|
$mock->shouldReceive('get')->andReturn('value');
|
|
```
|
|
|
|
## Static Analysis
|
|
|
|
**PHPStan:**
|
|
- Configured in 40+ PrestaShop modules via `prestashop/php-dev-tools`
|
|
- Standard config — `modules/<module>/tests/phpstan/phpstan.neon`:
|
|
```neon
|
|
includes:
|
|
- %currentWorkingDirectory%/vendor/prestashop/php-dev-tools/phpstan/ps-module-extension.neon
|
|
parameters:
|
|
paths:
|
|
- ../../<module>.php
|
|
level: 5
|
|
```
|
|
- **No project-root PHPStan config.**
|
|
|
|
**PHP-CS-Fixer:**
|
|
- Some module `composer.json` scripts reference it: `"lint": ["php-cs-fixer fix --no-interaction --dry-run --diff"]`
|
|
- **No project-root config.**
|
|
|
|
## Coverage
|
|
|
|
- No project-wide coverage target
|
|
- `modules/gamification/phpunit.xml` writes Clover output to `build/clover.xml`
|
|
- No CI enforcement detected
|
|
|
|
## Test Types
|
|
|
|
**Unit tests:** Present in some PS modules (`modules/gamification/tests/unit/`).
|
|
**Functional tests:** Present in `modules/gamification/tests/functional/`, `modules/ps_facetedsearch/tests/php/`.
|
|
**E2E:** None detected.
|
|
|
|
## Inferred Testing Strategy for This Project
|
|
|
|
Custom code (`modules/crosssellpro/`, `modules/caraty/`, `import-product.php`, `buy-by-phone.php`) is tested **manually** in browser:
|
|
- Verify cross-sell carousel renders on cart page (`/cart`) and checkout summary
|
|
- Verify "add to cart" works for products without combinations
|
|
- Verify products with combinations link to product detail page
|
|
- Smoke-test admin via `iadmin/`
|
|
- No regression suite — every change is risk
|
|
|
|
**If adding tests in the future:**
|
|
- Use PrestaShop's `prestashop/php-dev-tools` package per-module pattern
|
|
- Place under `modules/crosssellpro/tests/` mirroring PS conventions
|
|
- Mock `Db`, `Context`, `Module` core dependencies via Mockery
|
|
|
|
---
|
|
|
|
*Testing analysis: 2026-05-10*
|
|
*Update when test patterns change*
|