Skip to main content

Vedro Spec Validator plugin

Project description

vedro-spec-validator is a Vedro plugin that allows to validate mocks via OpenAPI spec/docs.

Version Compatibility Notice

  • For versions of this package 0.1.0 and later, only version 2 of the d42 package is compatible.

Installation

Quick

For a quick installation, you can use a plugin manager as follows:

$ vedro plugin install vedro-spec-validator

Manual

To install manually, follow these steps:

  1. Install the package using pip:
$ pip3 install vedro-spec-validator
  1. Next, activate the plugin in your vedro.cfg.py configuration file:
# ./vedro.cfg.py
import vedro
import vedro_spec_validator

class Config(vedro.Config):

    class Plugins(vedro.Config.Plugins):

        class SpecValidator(vedro_spec_validator.SpecValidator):
            enabled = True

Usage

Decorate your mocked function with @validate_spec(), providing a link to a YAML or JSON OpenAPI spec.

import jj
from jj.mock import mocked
from vedro_spec_validator import validate_spec

@validate_spec(spec_link="http://example.com/api/users/spec.yml")
async def your_mocked_function():
    matcher = jj.match("GET", "/users")
    response = jj.Response(status=200, json=[])
    
    mock = await mocked(matcher, response)

Keys

  1. The is_strict key allows you to choose between strict and non-strict comparison. Non-strict comparison (False by default) allows you to mock only some fields from the spec, even if they are required. Strict validation (True) requires you to mock all required fields from the spec.

Example OpenAPI spec with required fields:

openapi: 3.0.0
paths:
  /user:
    get:
      ...
        properties:
          user_name:
            type: string
          email:
            type: string
          age:
            type: integer
        required: 
          - user_name
          - email
          - age

With is_strict=True:

from vedro_spec_validator import validate_spec

@validate_spec(spec_link="http://example.com/api/users/spec.yml", is_strict=True)
async def your_mocked_function():
    matcher = jj.match("GET", "/user")
    payload = {
        "user_name": "Foo",
        "email": "test@test.com",
        "age": 30  # All required fields from the spec must be present
    }
    response = jj.Response(json=payload)
    return await mocked(matcher, response)

With is_strict=False:

from vedro_spec_validator import validate_spec

@validate_spec(spec_link="http://example.com/api/users/spec.yml", is_strict=False)
async def your_mocked_function():
    matcher = jj.match("GET", "/user")
    payload = {
        "user_name": "Foo"  # Required fields like "email" and "age" can be omitted
    }
    response = jj.Response(json=payload)
    return await mocked(matcher, response)
  1. The prefix key allows you to specify a path prefix that should be removed from the mock function's paths before they are matched against the OpenAPI spec.
from vedro_spec_validator import validate_spec


@validate_spec(spec_link="http://example.com/api/users/spec.yml", prefix='/__mocked_api__')  # Goes to validate `/user` instead of `/__mocked_api__/user`
async def your_mocked_function():
    matcher = jj.match("GET", "/__mocked_api__/user")
    # The prefix is removed, so the actual path matched against the OpenAPI spec is `/user`
    ...
  1. The is_raise_error key allows you to control whether an error should be raised when a validation mismatch occurs. By default (False), no exception is raised, but mismatches will be logged to a file.

With is_raise_error=False:

from vedro_spec_validator import validate_spec


@validate_spec(spec_link="http://example.com/api/users/spec.yml", is_raise_error=False)
async def your_mocked_function():
    ...

Output will be written to a file:

# /spec_validator/validation_results/your_mocked_function/scenarios/path/to/test/test_scenario.py.txt

subject: scenario subject
valera.ValidationException
- ... # missmatches

With is_raise_error=True:

from vedro_spec_validator import validate_spec


@validate_spec(spec_link="http://example.com/api/users/spec.yml", is_raise_error=True)
async def your_mocked_function():
    ...

An exception will be raised on the first validation error, causing the test to fail with the following trace:

ValidationException: There are some mismatches in your_mocked_function:
valera.ValidationException
- ... # missmatches
 
 
# --seed ...
# 1 scenario, 0 passed, 1 failed, 0 skipped (2.35s)

Process finished with exit code 1
  1. The force_strict key enforces strict validation against the OpenAPI spec, treating all fields as required, even if they are marked as optional in the spec. This is useful in cases where the specification accidentally marks all fields as optional. False by default.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vedro_spec_validator-0.1.7.tar.gz (16.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vedro_spec_validator-0.1.7-py3-none-any.whl (18.8 kB view details)

Uploaded Python 3

File details

Details for the file vedro_spec_validator-0.1.7.tar.gz.

File metadata

  • Download URL: vedro_spec_validator-0.1.7.tar.gz
  • Upload date:
  • Size: 16.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for vedro_spec_validator-0.1.7.tar.gz
Algorithm Hash digest
SHA256 6cff44aaf643b93a60ab40a65dafdef20963450f7dbeb77dcd1196df7ed37a0e
MD5 1158bddc19e23f015007abeacb36a533
BLAKE2b-256 5169231f29a404600b7bd78e84e366b7bb1ba043e246c1a93a92b9b1617a5946

See more details on using hashes here.

File details

Details for the file vedro_spec_validator-0.1.7-py3-none-any.whl.

File metadata

File hashes

Hashes for vedro_spec_validator-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 025c3e13d185069d9616bfadf07e76411e8d497c145947a3da3257579a637cb4
MD5 2df4bafe5f9d94b9db457d92c1a626fe
BLAKE2b-256 8c1a0414940d3f5e518f0d18a1ffb0dc97f5dfdd4920918fa35f9898c10d8b00

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page