NAME

Test::Mojo::Role::OpenAPI::Modern - Test::Mojo role providing access to an OpenAPI document and parser

VERSION

version 0.001

SYNOPSIS

my $openapi = OpenAPI::Modern->new(
  openapi_uri => '/api',
  openapi_schema => YAML::PP->new(boolean => 'JSON::PP')->load_string(<<'YAML'));
---
openapi: 3.1.0
info:
  title: Test API
  version: 1.2.3
paths:
  /foo/{foo_id}:
    parameters:
    - name: foo_id
      in: path
      required: true
      schema:
        pattern: ^[a-z]+$
    post:
      operationId: my_foo_request
      requestBody:
        required: true
        content:
          application/json:
            schema: {}
      responses:
        200:
          description: success
          content:
            application/json:
              schema:
                type: object
                required: [ status ]
                properties:
                  status:
                    const: ok
YAML

my $t = Test::Mojo->new('MyApp')
  ->with_roles('+OpenAPI::Modern')
  ->openapi($openapi);

$t->post_ok('/foo/hello')
  ->status_is(200)
  ->json_is('/status', 'ok')
  ->request_valid
  ->response_valid;

DESCRIPTION

Provides methods on a Test::Mojo object suitable for using OpenAPI::Modern to validate the request and response.

ACCESSORS/METHODS

openapi

The OpenAPI::Modern object to use for validation. This object stores the OpenAPI schema used to describe requests and responses in your application, as well as the underlying JSON::Schema::Modern object used for the validation itself. See that documentation for information on how to customize your validation and provide the specification document.

request_valid

Passes $t->tx->req to "validate_request" in OpenAPI::Modern, as in "validate_request" in Mojolicious::Plugin::OpenAPI::Modern, producing a boolean test result.

response_valid

Passes $t->tx->res to "validate_response" in OpenAPI::Modern as in "validate_response" in Mojolicious::Plugin::OpenAPI::Modern, producing a boolean test result.

FUTURE FEATURES

Lots of features are still to come, including:

  • request_invalid, response_invalid test methods, including a mechanism for providing the expected validation error(s)

  • stashing the validation results on the test object for reuse or diagnostic printing

  • integration with Mojolicious::Plugin::OpenAPI::Modern, including sharing the openapi object and customization options that are set in the application

SEE ALSO

SUPPORT

Bugs may be submitted through https://github.com/karenetheridge/Test-Mojo-Role-OpenAPI-Modern/issues.

There is also an irc channel available for users of this distribution, at #mojo on irc.libera.chat.

I am also usually active on irc, as 'ether' at irc.perl.org and irc.libera.chat.

AUTHOR

Karen Etheridge <ether@cpan.org>

COPYRIGHT AND LICENCE

This software is copyright (c) 2023 by Karen Etheridge.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.