# Issue #19: テストテンプレート改善

## 優先度: 中

## 概要

`railway new node` で自動生成されるテストファイルのテンプレートが不完全で、そのまま実行すると ValidationError で失敗する。最低限動作するサンプルデータを含めるべき。

## 現状の問題

### 生成されるテストテンプレート

```python
# tests/nodes/test_generate_report.py
def test_generate_report_basic(self):
    """TODO: Define expected behavior and implement test."""
    # Arrange
    input_data = your_input_here  # ← 未定義変数

    # Act
    result = generate_report(input_data)

    # Assert
    assert result == expected_output
```

### 実行結果

```bash
$ pytest tests/nodes/test_generate_report.py -v
E   NameError: name 'your_input_here' is not defined
```

または、Contractを使用する場合:

```bash
$ pytest tests/nodes/test_generate_report.py -v
E   pydantic.ValidationError: 1 validation error for UsersFetchResult
```

## 期待する動作

自動生成されたテストがそのまま実行可能（skip またはパス）であること。

### 改善案1: pytest.skip() を使用

```python
def test_generate_report_basic(self):
    """TODO: Define expected behavior and implement test."""
    pytest.skip("Implement this test based on your node's specification")
```

### 改善案2: 動作するサンプルデータを含める

`--output` オプション指定時、出力型に応じたサンプルデータを生成:

```python
# --output ReportResult の場合
def test_generate_report_basic(self):
    """Test basic functionality."""
    # Arrange - サンプル入力（必要に応じて修正）
    # input_data = YourInputContract(...)

    # Act
    result = generate_report()  # or generate_report(input_data)

    # Assert
    assert isinstance(result, ReportResult)
    # TODO: Add specific assertions
```

### 改善案3: 入力型も考慮したテンプレート

`--input data:UsersFetchResult --output ReportResult` の場合:

```python
def test_generate_report_basic(self):
    """Test basic functionality."""
    # Arrange
    data = UsersFetchResult(
        users=[],  # TODO: Add test data
        total=0,
    )

    # Act
    result = generate_report(data)

    # Assert
    assert isinstance(result, ReportResult)
```

## 実装計画

### 1. テストテンプレートの改善

`railway/cli/new.py` の `_get_node_test_template()` を修正:

```python
def _get_typed_node_test_template(
    name: str,
    output_type: str | None,
    inputs: dict[str, str] | None,
) -> str:
    """Generate test template for typed node."""
    # 入力がある場合はサンプルインスタンス生成のヒントを追加
    # pytest.skip() をデフォルトに
```

### 2. 入力型に応じたサンプル生成

Contractの基本フィールド型に応じたデフォルト値を提案:

| 型 | デフォルト値 |
|---|---|
| `str` | `""` |
| `int` | `0` |
| `float` | `0.0` |
| `bool` | `False` |
| `list` | `[]` |
| `dict` | `{}` |

### 3. テスト追加

```python
def test_generated_test_runs_without_error():
    """Generated test should at least be runnable (skip is OK)."""
    # railway new node → テストファイル生成 → pytest実行 → エラーなし
```

## 受け入れ条件

- [ ] `railway new node --output Type` で生成されたテストが即座に実行可能
- [ ] テストはskipまたはpassのいずれかで終了（エラー終了しない）
- [ ] `--input` 指定時、適切なサンプルデータのヒントがコメントで含まれる
- [ ] 既存のテスト生成機能に影響がない

## 関連

- レビュー3（2026-01-19）: コード生成体験 7/10
- Issue #05: CLI拡張（完了済み）
- TDDワークフローの初期体験
