. namespace core\router; use core\router\schema\response\response; use GuzzleHttp\Psr7\ServerRequest; use Psr\Http\Message\ResponseInterface; /** * Tests for the response_validator. * * @package core * @category test * @copyright 2024 Andrew Lyons * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @covers \core\router\response_validator */ final class response_validator_test extends \advanced_testcase { public function test_validate_response_without_moodle_route(): void { $validator = new response_validator(); $request = new ServerRequest('GET', 'http://example.com'); $response = new \GuzzleHttp\Psr7\Response(); $this->assertNull($validator->validate_response($request, $response)); } public function test_validate_response_with_route_no_responses(): void { $validator = new response_validator(); $route = new route(path: '/test'); $request = (new ServerRequest('GET', 'http://example.com/test')) ->withAttribute(route::class, $route); $response = new \GuzzleHttp\Psr7\Response(); $this->assertNull($validator->validate_response($request, $response)); } public function test_validate_response_with_route_and_response(): void { $validator = new response_validator(); $routeresponse = new class extends response { // phpcs:ignore public function __construct() { parent::__construct( statuscode: 200, description: 'Test response', ); } // phpcs:ignore public function validate( ResponseInterface $response, ): void { throw new \Exception('Test exception'); } }; $route = new route(path: '/test', responses: [200 => $routeresponse]); $request = (new ServerRequest('GET', 'http://example.com/test')) ->withAttribute(route::class, $route); $response = new \GuzzleHttp\Psr7\Response(); $this->expectException(\Exception::class); $this->expectExceptionMessage('Test exception'); $validator->validate_response($request, $response); } }