<?php

use App\Services\{{service}};

uses()->group('{{capability}}', 'unit');

/*
 * Test Template for Pest Unit Tests
 * 
 * Copy this file and replace:
 * - {{capability}} with the capability name
 * - {{service}} with the class being tested
 * 
 * Mark pending tests with ->todo() during Red Phase
 * Remove ->todo() and implement during Green Phase
 */

describe('{{service}}', function () {
    
    beforeEach(function () {
        $this->service = new {{service}}();
    });
    
    /*
     * Test: {{method_description}}
     * 
     * Tests the core logic of {{method_name}}
     */
    it('{{method_description}}', function () {
        // Arrange
        $input = [
            // Test input data
        ];
        
        $expected = [
            // Expected output
        ];
        
        // Act
        $result = $this->service->{{method_name}}($input);
        
        // Assert
        expect($result)->toBe($expected);
    })->todo();
    
    /*
     * Test: Edge case handling
     */
    it('handles {{edge_case}} gracefully', function () {
        // Arrange
        $edgeCaseInput = null;
        
        // Act & Assert
        expect(fn () => $this->service->{{method_name}}($edgeCaseInput))
            ->toThrow(\InvalidArgumentException::class);
    })->todo();
    
    /*
     * Test: Calculation accuracy
     */
    it('calculates {{calculation}} correctly', function () {
        // Arrange
        $a = 10;
        $b = 20;
        
        // Act
        $result = $this->service->calculate($a, $b);
        
        // Assert
        expect($result)->toBe(30);
    })->todo();
    
});

/*
 * Data providers for parameterized tests
 */
dataset('valid_inputs', function () {
    return [
        'case 1' => [['input' => 'value1'], 'expected1'],
        'case 2' => [['input' => 'value2'], 'expected2'],
        'case 3' => [['input' => 'value3'], 'expected3'],
    ];
});

/*
 * Example parameterized test
 */
it('processes valid inputs correctly', function ($input, $expected) {
    $result = $this->service->process($input);
    expect($result)->toBe($expected);
})->with('valid_inputs')->todo();
