# テスト方針書

## 概要

本ドキュメントは、Shopware 6 eコマースプラットフォームにおけるテスト戦略、テスト環境、使用ツール、およびテスト実行方法を定義するものです。Shopwareは、PHPバックエンド（Symfony/Doctrineベース）とJavaScriptフロントエンド（Vue.js管理画面、Vanilla JS Storefront）で構成されており、それぞれに対応したテスト戦略を採用しています。

## テスト戦略

### テストレベル

| レベル | 目的 | 担当 |
| --- | --- | --- |
| 単体テスト | 個々のクラス・関数・コンポーネントの動作検証 | 開発者 |
| 結合テスト | モジュール間・サービス間の連携動作検証 | 開発者 |
| システムテスト | アプリケーション全体としての機能・性能検証 | QAチーム |
| 受入テスト | ビジネス要件・ユーザーシナリオの充足確認 | QAチーム / ステークホルダー |

### テスト種別

| 種別 | 概要 | 実施タイミング |
| --- | --- | --- |
| 機能テスト | 各機能が仕様通りに動作することを検証 | 開発時・PR時 |
| 性能テスト | phpbenchによるベンチマークテスト | リリース前・パフォーマンス改善時 |
| セキュリティテスト | 脆弱性スキャン、認証・認可テスト | リリース前 |
| 静的解析 | PHPStan（レベル指定）によるコード品質検証 | 開発時・PR時 |
| コードスタイルチェック | PHP-CS-Fixer、ESLint、Stylelintによる整形検証 | 開発時・PR時 |

## テスト環境

| 環境 | 用途 | 構成 |
| --- | --- | --- |
| 開発環境（ローカル） | 日常開発・単体テスト実行 | Docker (compose.yaml)、MySQL/MariaDB、PHP 8.2-8.5、Node.js 20+ |
| テスト環境 | 結合テスト・E2Eテスト実行 | E2E用設定（e2e.yaml）、レートリミッター無効化、Messengerの同期モード |
| ステージング環境 | リリース前検証 | 本番同等構成 |

## テストツール

### PHPバックエンド

| ツール | 用途 | バージョン |
| --- | --- | --- |
| PHPUnit | PHP単体・結合テスト | ^11.5.19 |
| PHPStan | 静的解析 | 2.1.31 |
| PHP-CS-Fixer | コードスタイルチェック | 3.91.2 |
| phpbench | パフォーマンスベンチマーク | ^1.2.15 |
| ergebnis/phpunit-slow-test-detector | 遅いテストの検出 | ^2.4 |
| shopware/dev-tools | 開発用ユーティリティ | ^1.3 |

### JavaScriptフロントエンド

| ツール | 用途 | バージョン |
| --- | --- | --- |
| Jest | JavaScript単体テスト | 29.7.0 |
| @shopware-ag/jest-preset-sw6-admin | Adminテスト用プリセット | 6.0.4 |
| @vue/test-utils | Vue.jsコンポーネントテスト | 2.4.6 |
| @vue/vue3-jest | Vue 3のJest統合 | 29.2.6 |
| jest-jasmine2 | テストランナー | 29.7.0 |
| jest-runner-groups | テストグループ実行 | 2.2.0 |
| jest-junit | JUnit形式レポート出力 | 15.0.0 / 16.0.0 |
| ESLint | JavaScriptコードスタイル | 8.56.0 / 8.57.1 |
| Stylelint | SCSS/CSSコードスタイル | 14.16.1 / 16.16.0 |

## カバレッジ目標

| 対象 | 目標値 |
| --- | --- |
| Storefront helper関数（行カバレッジ） | 85% |
| Storefront helper関数（分岐カバレッジ） | 85% |
| Storefront helper関数（関数カバレッジ） | 85% |

### カバレッジレポート形式

- **Administration**: text-summary（CI）、cobertura、html-spa
- **Storefront**: lcov、text、clover、cobertura

## テストデータ

### テストデータ準備方針

1. **エンティティスキーマ**: `entity-schema.json` を事前生成し、テスト実行前に `unit-setup` スクリプトで準備
2. **モックデータ**: 各テストファイル内でモックを定義、または `test/_mocks_/` ディレクトリに共通モックを配置
3. **E2E用設定**: `e2e.yaml` でレートリミッター無効化、メディアURL検証無効化、管理ワーカー無効化などの環境調整

### テストヘルパー・ユーティリティ

- `test/_helper_/`: テストユーティリティ関数
- `test/_setup_/`: テスト環境セットアップ
- `test/transformer/`: SVG等のカスタムトランスフォーマー

## 不具合管理

### 不具合管理プロセス

1. **報告**: GitHub Issues (https://github.com/shopware/shopware/issues)
2. **トリアージ**: 優先度・重要度の評価
3. **修正**: ブランチ作成、修正実装、テスト追加
4. **レビュー**: プルリクエストによるコードレビュー
5. **マージ**: trunk/masterへの統合
6. **リリース**: リリースノートへの記載

### 不具合分類

- **Critical**: システム停止、データ損失
- **High**: 主要機能の障害
- **Medium**: 機能の一部制限
- **Low**: 軽微な問題、UI/UX改善

## CI/CD連携

### テスト実行コマンド

#### PHPテスト
```bash
# 全テスト実行
composer phpunit

# テストスイート指定
vendor/bin/phpunit --testsuite migration,unit,integration,devops

# テストデータベース初期化
composer init:testdb
```

#### JavaScript（Administration）テスト
```bash
# 単体テスト実行
composer admin:unit

# ウォッチモード
composer admin:unit:watch

# テストセットアップのみ
npm run unit-setup
```

#### JavaScript（Storefront）テスト
```bash
# 単体テスト実行
composer storefront:unit

# ウォッチモード
composer storefront:unit:watch
```

### 静的解析・コードスタイル

```bash
# PHPStan静的解析
composer phpstan

# PHP-CS-Fixer（ドライラン）
composer ecs

# PHP-CS-Fixer（自動修正）
composer ecs-fix

# ESLint（全体）
composer eslint

# Stylelint
composer stylelint

# 全Lintの一括実行
composer lint
```

### CIモード対応

- **Jest CI モード**: `--ci` フラグによりレポーター切り替え（silent reporter + JUnit出力）
- **カバレッジ出力先**: `build/artifacts/jest/` 配下
- **JUnitレポート**: `administration.junit.xml`、`storefront.junit.xml`

### テスト成果物

| 成果物 | 出力先 |
| --- | --- |
| PHPUnit結果 | 標準出力 / JUnit XML |
| Jest結果（Administration） | `build/artifacts/jest/administration.junit.xml` |
| Jest結果（Storefront） | `build/artifacts/jest/storefront.junit.xml` |
| カバレッジレポート | `build/artifacts/jest/` |

## 備考

### テストディレクトリ構成

```
shopware-trunk/
├── tests/                              # PHPテスト（参照パス）
│   ├── unit/                           # 単体テスト
│   ├── integration/                    # 結合テスト
│   ├── migration/                      # マイグレーションテスト
│   ├── devops/                         # DevOpsテスト
│   └── performance/bench/              # パフォーマンステスト
├── src/
│   ├── Administration/Resources/app/administration/
│   │   ├── src/**/*.spec.js           # Vueコンポーネントテスト
│   │   └── test/                       # テストヘルパー・セットアップ
│   ├── Storefront/Resources/app/storefront/
│   │   └── test/                       # Storefrontプラグインテスト
│   │       └── plugin/                 # プラグイン単体テスト
│   └── Core/DevOps/Test/              # コアDevOpsテスト
```

### 後方互換性チェック

```bash
# BC Break チェック
composer bc-check
```

Roave Backward Compatibility Checkerを使用して、パブリックAPIの後方互換性を自動検証しています。

### タイムゾーン設定

テスト実行時のタイムゾーンは `UTC` に統一されています（`process.env.TZ = 'UTC'`）。

### プリコミットフック

```bash
# プリコミットフックのインストール
composer hook:pre-commit:install

# プリプッシュフックのインストール
composer hook:pre-push:install
```
