Testing

Testing your HTTP code with WPZylos HTTP.

Unit Testing

Testing Request

use PHPUnit\Framework\TestCase;
use WPZylos\Framework\Http\Request;

class RequestTest extends TestCase
{
    public function testInputReturnsValue(): void
    {
        $_POST = ['name' => 'John'];
        $request = Request::capture();

        $this->assertEquals('John', $request->input('name'));
    }

    public function testInputReturnsDefault(): void
    {
        $_POST = [];
        $request = Request::capture();

        $this->assertEquals('default', $request->input('name', 'default'));
    }

    protected function tearDown(): void
    {
        $_POST = [];
        $_GET = [];
    }
}

Testing Response

class ResponseTest extends TestCase
{
    public function testJsonSetsContentType(): void
    {
        $response = Response::json(['key' => 'value']);

        $this->assertStringContainsString('application/json', $response->getContentType());
    }
}

Testing FormRequest

class FormRequestTest extends TestCase
{
    public function testValidationPasses(): void
    {
        $_POST = ['email' => '[email protected]', 'name' => 'John'];
        $request = new CreateUserRequest();

        $this->assertTrue($request->passes());
        $this->assertEquals(['email' => '[email protected]', 'name' => 'John'], $request->validated());
    }

    public function testValidationFails(): void
    {
        $_POST = ['email' => 'invalid'];
        $request = new CreateUserRequest();

        $this->assertTrue($request->fails());
        $this->assertArrayHasKey('email', $request->errors());
    }
}

Mock Request

class MockRequest extends Request
{
    public static function createWithData(array $data): self
    {
        $request = new self();
        $request->data = $data;
        return $request;
    }
}

// Usage in tests
$request = MockRequest::createWithData(['name' => 'Test']);
$controller->store($request);

Running Tests

composer run test