-
Notifications
You must be signed in to change notification settings - Fork 46
/
Copy pathtest_backends.py
158 lines (123 loc) · 5.13 KB
/
test_backends.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
"""Test suite focusing on validation backend features."""
__author__ = "Jens Finkhaeuser"
__copyright__ = "Copyright (c) 2018 Jens Finkhaeuser"
__license__ = "MIT"
__all__ = ()
import pytest
from prance import BaseParser
from prance import ValidationError
from prance.util import validation_backends
from . import none_of
def test_bad_backend():
with pytest.raises(ValueError):
BaseParser("tests/specs/petstore.yaml", backend="does_not_exist")
@pytest.mark.skipif(none_of("flex"), reason="Missing dependencies: flex")
def test_flex_issue_5_integer_keys():
# Must succeed with default (flex) parser; note the parser does not stringify the response code
parser = BaseParser("tests/specs/issue_5.yaml", backend="flex")
assert 200 in parser.specification["paths"]["/test"]["post"]["responses"]
@pytest.mark.skipif(none_of("flex"), reason="Missing dependencies: flex")
def test_flex_validate_success():
parser = BaseParser("tests/specs/petstore.yaml", backend="flex")
@pytest.mark.skipif(none_of("flex"), reason="Missing dependencies: flex")
def test_flex_validate_failure():
with pytest.raises(ValidationError):
parser = BaseParser("tests/specs/missing_reference.yaml", backend="flex")
@pytest.mark.skipif(
none_of("swagger-spec-validator"),
reason="Missing dependencies: swagger-spec-validator",
)
def test_swagger_spec_validator_issue_5_integer_keys():
# Must fail in implicit strict mode.
with pytest.raises(ValidationError):
BaseParser("tests/specs/issue_5.yaml", backend="swagger-spec-validator")
# Must fail in explicit strict mode.
with pytest.raises(ValidationError):
BaseParser(
"tests/specs/issue_5.yaml", backend="swagger-spec-validator", strict=True
)
# Must succeed in non-strict/lenient mode
parser = BaseParser(
"tests/specs/issue_5.yaml", backend="swagger-spec-validator", strict=False
)
assert "200" in parser.specification["paths"]["/test"]["post"]["responses"]
@pytest.mark.skipif(
none_of("swagger-spec-validator"),
reason="Missing dependencies: swagger-spec-validator",
)
def test_swagger_spec_validator_validate_success():
parser = BaseParser("tests/specs/petstore.yaml", backend="swagger-spec-validator")
@pytest.mark.skipif(
none_of("swagger-spec-validator"),
reason="Missing dependencies: swagger-spec-validator",
)
def test_swagger_spec_validator_validate_failure():
with pytest.raises(ValidationError):
parser = BaseParser(
"tests/specs/missing_reference.yaml", backend="swagger-spec-validator"
)
@pytest.mark.skipif(
none_of("openapi-spec-validator"),
reason="Missing dependencies: openapi-spec-validator",
)
def test_openapi_spec_validator_issue_5_integer_keys():
# Must fail in implicit strict mode.
with pytest.raises(ValidationError):
BaseParser("tests/specs/issue_5.yaml", backend="openapi-spec-validator")
# Must fail in explicit strict mode.
with pytest.raises(ValidationError):
BaseParser(
"tests/specs/issue_5.yaml", backend="openapi-spec-validator", strict=True
)
# Must succeed in non-strict/lenient mode
parser = BaseParser(
"tests/specs/issue_5.yaml", backend="openapi-spec-validator", strict=False
)
assert "200" in parser.specification["paths"]["/test"]["post"]["responses"]
@pytest.mark.skipif(
none_of("openapi-spec-validator"),
reason="Missing dependencies: openapi-spec-validator",
)
def test_openapi_spec_validator_issue_36_error_reporting():
with pytest.raises(ValidationError, match=r"Strict mode enabled"):
BaseParser("tests/specs/issue_36.yaml")
@pytest.mark.skipif(
none_of("openapi-spec-validator"),
reason="Missing dependencies: openapi-spec-validator",
)
def test_openapi_spec_validator_validate_success():
parser = BaseParser("tests/specs/petstore.yaml", backend="openapi-spec-validator")
@pytest.mark.skipif(
none_of("openapi-spec-validator"),
reason="Missing dependencies: openapi-spec-validator",
)
def test_openapi_spec_validator_validate_failure():
with pytest.raises(ValidationError):
parser = BaseParser(
"tests/specs/missing_reference.yaml", backend="openapi-spec-validator"
)
@pytest.mark.skipif(
none_of("openapi-spec-validator"),
reason="Missing dependencies: openapi-spec-validator",
)
def test_openapi_spec_validator_issue_20_spec_version_handling():
# The spec is OpenAPI 3, but broken. Need to set 'strict' to False to stringify keys
with pytest.raises(ValidationError):
parser = BaseParser(
"tests/specs/issue_20.yaml", backend="openapi-spec-validator", strict=False
)
# Lazy parsing should let us validate what's happening
parser = BaseParser(
"tests/specs/issue_20.yaml",
backend="openapi-spec-validator",
strict=False,
lazy=True,
)
assert not parser.valid
assert parser.version_parsed == ()
with pytest.raises(ValidationError):
parser.parse()
# After parsing, the specs are not valid, but the correct version is
# detected.
assert not parser.valid
assert parser.version_parsed == (3, 0, 0)