The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

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

VERSION

version 0.003

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
    ->with_roles('+OpenAPI::Modern')
    ->new('MyApp', { ... })
    ->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.

If not provided, the object is constructed using configuration values passed to the application under the openapi key (see "new" in Test::Mojo), as for Mojolicious::Plugin::OpenAPI::Modern, or re-uses the object from the application itself if that plugin is applied.

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.

request_validation_result

Returns the JSON::Schema::Modern::Result object for the validation result for the last request, or calculates it if not already available.

Does not emit a test result.

response_validation_result

Returns the JSON::Schema::Modern::Result object for the validation result for the last response, or calculates it if not already available.

Does not emit a 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.