atelier-kyo-manager テスト80%達成指示書
作成日: 2026-05-29 目標: Test軸 55-60% → 80%+ 実行環境: Windows デスクトップ版 Claude Code
現状
- テスト数: 1494件(全通過、0失敗)
- Test軸: 推定55-60%
- ソースファイル: 189ファイル(うち未テスト約136ファイル)
- テストファイル: 66ファイル
目標
Test軸80%以上。そのためには追加200-300テストが必要。
実行手順
0. プロジェクト移動
cd /home/yn4416/projects/atelier-kyo-manager
1. テスト実行コマンド
# 全テスト実行
python3 -m pytest -q --tb=no
# 個別ファイル実行
python3 -m pytest tests/FILE.py -v --tb=short
# テスト数確認
python3 -m pytest --co -q 2>&1 | tail -3
2. 既存テストパターン
以下のファイルを読んでパターンを理解すること:
tests/conftest.py— フィクスチャ(app, client, db等)tests/test_models_extra_coverage.py— モデルテストの最新パターンtests/test_routes_coverage.py— ルートテストの最新パターンtests/test_config_utils_coverage.py— ユーティリティテストパターン
3. テスト追加対象(優先度順)
Tier 1: モデル・フォーム(簡単・高効果)
| ファイル | 推定テスト数 | 内容 |
|---|---|---|
app/forms.py | 15-20 | フォームバリデーション |
app/models/listing_template.py | 10-15 | テンプレートモデル |
app/models/listing_progress.py | 10-15 | 進捗モデル |
app/models/faq_template.py | 10-15 | FAQモデル |
app/models/result_models.py | 10-15 | 結果モデル |
app/core/timezone.py | 10 | タイムゾーン処理 |
| 小計 | 65-90 |
Tier 2: ユーティリティ(中難度)
| ファイル | 推定テスト数 | 内容 |
|---|---|---|
app/utils/scout_currency.py | 15-20 | 通貨変換 |
app/utils/scout_config.py | 10-15 | 設定管理 |
app/utils/scout_models.py | 15-20 | データモデル |
app/utils/llm_protocol.py | 10-15 | LLM通信プロトコル |
app/utils/shipping_agent.py | 10-15 | 配送計算 |
app/utils/buyma_catalog_manager.py | 10-15 | カタログ管理 |
app/utils/buyma_catalog_storage.py | 10-15 | カタログ永続化 |
app/utils/observability.py | 10 | オブザーバビリティ |
app/utils/presentation.py | 10-15 | 表示フォーマット |
app/utils/validation.py | (既存テストあり、追加) | |
| 小計 | 100-140 |
Tier 3: サービス・ルート(やや複雑)
| ファイル | 推定テスト数 | 内容 |
|---|---|---|
app/services/chatbot_service.py | 15-20 | チャットボット |
app/services/image_service.py | 10-15 | 画像処理 |
app/services/pipeline_service.py | (既存あり、追加) | |
app/routes/misc.py | 10-15 | その他ルート |
app/integrations/forward2me_client.py | 10-15 | 外部API連携 |
app/commands.py | 10-15 | CLIコマンド |
| 小計 | 55-80 |
Tier 4: エージェント・ブラウザ(モック必須)
| ファイル | 推定テスト数 | 内容 |
|---|---|---|
app/extractors/product_info_extractor.py | 15-20 | 抽出ロジック |
app/extractors/moncler_extractor.py | 10-15 | Moncler抽出 |
app/agents/plugins/base.py | 10-15 | プラグイン基底 |
app/agents/plugins/farfetch_plp_v1.py | 10 | Farfetch PLP |
app/agents/plugins/gucci_plp_v1.py | 10 | Gucci PLP |
app/agents/plugins/moncler_plp_v1.py | 10 | Moncler PLP |
| 小計 | 65-80 |
4. テスト作成ルール
- 1ファイル = 1テストファイル(対応する名前にする)
app/utils/scout_currency.py→tests/test_scout_currency.py
- 構造:
"""Tests for app/utils/scout_currency.py""" import pytest from app.utils.scout_currency import ... class TestScoutCurrency: def test_convert_jpy_to_eur(self): result = convert_currency(1000, 'JPY', 'EUR') assert result > 0 - DBテスト:
conftest.pyのappフィクスチャを使うdef test_model_persistence(self, app, db): with app.app_context(): obj = Model(field='value') db.session.add(obj) db.session.commit() assert Model.query.count() == 1 - ルートテスト:
clientフィクスチャを使うdef test_get_route(self, client): resp = client.get('/path') assert resp.status_code == 200 - 外部APIは必ずモック化:
from unittest.mock import patch, MagicMock @patch('app.utils.scout_currency.requests.get') def test_with_mock(self, mock_get): mock_get.return_value.json.return_value = {'rate': 150.0} ... - Playwright/Seleniumは絶対モック化(async汚染を防ぐ)
5. 検証
各ファイル作成後:
python3 -m pytest tests/NEW_FILE.py -v --tb=short
全ファイル完了後:
python3 -m pytest -q --tb=no 2>&1 | tail -5
目標: 1700+ テスト、0失敗
6. コミット
git add tests/
git commit -m "テスト追加: Test軸80%達成(+N件)"
git push
注意事項
- ソースファイル(
app/)は修正しない。テストファイルのみ作成・修正 conftest.pyは必要に応じてフィクスチャを追加してもよい- 外部API・ブラウザ操作は必ずモック化
- テストは冪等性を持たせる(実行順序に依存しない)
- 日本語コメント不要。英語でOK