117 lines
2.9 KiB
Python
117 lines
2.9 KiB
Python
"""
|
|
Tests covering the YAML linter.
|
|
"""
|
|
|
|
from yamlschema import lint_buffer
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.mark.parametrize('schema, obj', [
|
|
({"type": "number"},
|
|
"---\n1.0"),
|
|
({"type": "integer"},
|
|
"---\n3"),
|
|
({"type": "string"},
|
|
"---\nfoo bar baz"),
|
|
({"type": "string",
|
|
"maxLength": 15},
|
|
"---\nfoo bar baz"),
|
|
({"type": "string",
|
|
"minLength": 10},
|
|
"---\nfoo bar baz"),
|
|
({"type": "string",
|
|
"pattern": "^foo.*"},
|
|
"---\nfoo bar baz"),
|
|
({"type": "object",
|
|
"additionalProperties": True},
|
|
"---\nfoo: bar\nbaz: qux"),
|
|
({"type": "object",
|
|
"properties": {"foo": {"type": "string"}}},
|
|
"---\nfoo: bar\nbaz: qux"),
|
|
({"type": "object",
|
|
"properties": {"foo": {"type": "string"}},
|
|
"additionalProperties": False},
|
|
"---\nfoo: bar"),
|
|
({"type": "object",
|
|
"properties": {"foo": {"type": "object"}}},
|
|
"---\nfoo: {}"),
|
|
({"type": "object",
|
|
"properties": {"foo": {
|
|
"type": "array",
|
|
"items": {"type": "object"}}}},
|
|
"---\nfoo: [{}, {}, {foo: bar}]"),
|
|
])
|
|
def test_lint_document_ok(schema, obj):
|
|
assert not list(lint_buffer(schema, obj))
|
|
|
|
|
|
@pytest.mark.parametrize('msg, schema, obj', [
|
|
# Numerics
|
|
("Floats are not ints",
|
|
{"type": "integer"},
|
|
"---\n1.0"),
|
|
("Ints are not floats",
|
|
{"type": "number"},
|
|
"---\n1"),
|
|
|
|
# Numerics - range limits. Integer edition
|
|
("1 is the limit of the range",
|
|
{"type": "integer",
|
|
"exclusiveMaximum": 1},
|
|
"---\n1"),
|
|
("1 is the limit of the range",
|
|
{"type": "integer",
|
|
"exclusiveMinimum": 1},
|
|
"---\n1"),
|
|
("1 is out of the range",
|
|
{"type": "integer",
|
|
"minimum": 2},
|
|
"---\n1"),
|
|
("1 is out of the range",
|
|
{"type": "integer",
|
|
"maximum": 0},
|
|
"---\n1"),
|
|
("1 is out of the range",
|
|
{"type": "integer",
|
|
"exclusiveMinimum": 1},
|
|
"---\n1"),
|
|
|
|
# Numerics - range limits. Number/Float edition
|
|
("1 is the limit of the range",
|
|
{"type": "number",
|
|
"exclusiveMaximum": 1},
|
|
"---\n1.0"),
|
|
("1 is the limit of the range",
|
|
{"type": "number",
|
|
"exclusiveMinimum": 1},
|
|
"---\n1.0"),
|
|
("1 is out of the range",
|
|
{"type": "number",
|
|
"minimum": 2},
|
|
"---\n1.0"),
|
|
("1 is out of the range",
|
|
{"type": "number",
|
|
"maximum": 0},
|
|
"---\n1.0"),
|
|
("1 is out of the range",
|
|
{"type": "number",
|
|
"exclusiveMinimum": 1},
|
|
"---\n1.0"),
|
|
|
|
# String shit
|
|
("String too short",
|
|
{"type": "string", "minLength": 1},
|
|
"---\n''"),
|
|
("String too long",
|
|
{"type": "string", "maxLength": 1},
|
|
"---\nfoo"),
|
|
("String does not match pattern",
|
|
{"type": "string", "pattern": "bar"},
|
|
"---\nfoo"),
|
|
("String does not fully match pattern",
|
|
{"type": "string", "pattern": "foo"},
|
|
"---\nfooooooooo"),
|
|
])
|
|
def test_lint_document_fails(msg, schema, obj):
|
|
assert list(lint_buffer(schema, obj)), msg
|