Files
octokit.py/tests/test_validation.py
T
2020-04-13 16:29:41 -05:00

219 lines
11 KiB
Python

import pytest
from octokit import errors
from octokit.base import Base
class TestBase(object):
def test_validate_required_parameters(self):
attrs = {"owner": "me", "repo": "my_repo"}
assert Base().validate(attrs, self.parameter_only_definition)
def test_raise_error_for_missing_required_parameter(self):
attrs = {"owner": "me"}
with pytest.raises(errors.OctokitParameterError) as e:
Base().validate(attrs, self.definition)
assert "repo is a required parameter" == str(e.value)
def test_raise_error_for_missing_required_request_body_property(self):
attrs = {"owner": "me", "repo": "my_repo"}
with pytest.raises(errors.OctokitParameterError) as e:
Base().validate(attrs, self.definition)
assert "name is a required parameter" == str(e.value)
attrs = {"owner": "me", "repo": "my_repo", "name": "blah"}
with pytest.raises(errors.OctokitParameterError) as e:
Base().validate(attrs, self.definition)
assert "head_sha is a required parameter" == str(e.value)
def test_validate_parameters_and_request_body_properties(self):
attrs = {"owner": "me", "repo": "my_repo", "name": "blah", "head_sha": "master"}
assert Base().validate(attrs, self.definition)
def test_validate_nested_request_body_properties(self):
attrs = {"owner": "me", "repo": "my_repo", "name": "blah", "head_sha": "master", "output": {}}
with pytest.raises(errors.OctokitParameterError) as e:
Base().validate(attrs, self.definition)
assert "title is a required parameter" == str(e.value)
attrs = {"owner": "me", "repo": "my_repo", "name": "blah", "head_sha": "master", "output": {"title": "here"}}
with pytest.raises(errors.OctokitParameterError) as e:
Base().validate(attrs, self.definition)
assert "summary is a required parameter" == str(e.value)
attrs = {
"owner": "me",
"repo": "my_repo",
"name": "blah",
"head_sha": "master",
"output": {"title": "here", "summary": "there"},
}
assert Base().validate(attrs, self.definition)
@property
def definition(self):
return {
"parameters": [
{
"name": "accept",
"description": "This API is under preview and subject to change.",
"in": "header",
"schema": {"type": "string", "default": "application/vnd.github.antiope-preview+json"},
"required": True,
},
{
"name": "owner",
"description": "owner parameter",
"in": "path",
"required": True,
"schema": {"type": "string"},
},
{
"name": "repo",
"description": "repo parameter",
"in": "path",
"required": True,
"schema": {"type": "string"},
},
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": 'The name of the check. For example, "code-coverage".',
},
"head_sha": {"type": "string", "description": "The SHA of the commit."},
"details_url": {"type": "string"},
"external_id": {
"type": "string",
"description": "A reference for the run on the integrator's system.",
},
"status": {
"type": "string",
"enum": ["queued", "in_progress", "completed"],
"default": "queued",
},
"started_at": {"type": "string"},
"conclusion": {
"type": "string",
"enum": [
"success",
"failure",
"neutral",
"cancelled",
"timed_out",
"action_required",
],
},
"completed_at": {"type": "string"},
"output": {
"type": "object",
"properties": {
"title": {"type": "string", "description": "The title of the check run."},
"summary": {"type": "string"},
"text": {"type": "string"},
"annotations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {"type": "string"},
"start_line": {
"type": "integer",
"description": "The start line of the annotation.",
},
"end_line": {
"type": "integer",
"description": "The end line of the annotation.",
},
"start_column": {"type": "integer"},
"end_column": {"type": "integer"},
"annotation_level": {
"type": "string",
"enum": ["notice", "warning", "failure"],
},
"message": {"type": "string"},
"title": {"type": "string"},
"raw_details": {"type": "string"},
},
"required": [
"path",
"start_line",
"end_line",
"annotation_level",
"message",
],
},
},
"images": {
"type": "array",
"items": {
"type": "object",
"properties": {
"alt": {
"type": "string",
"description": "The alternative text for the image.",
},
"image_url": {
"type": "string",
"description": "The full URL of the image.",
},
"caption": {
"type": "string",
"description": "A short image description.",
},
},
"required": ["alt", "image_url"],
},
},
},
"required": ["title", "summary"],
},
"actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {"type": "string"},
"description": {"type": "string"},
"identifier": {"type": "string"},
},
"required": ["label", "description", "identifier"],
},
},
},
"required": ["name", "head_sha"],
}
}
}
},
}
@property
def parameter_only_definition(self):
return {
"parameters": [
{
"name": "accept",
"description": "This API is under preview and subject to change.",
"in": "header",
"schema": {"type": "string", "default": "application/vnd.github.antiope-preview+json"},
"required": True,
},
{
"name": "owner",
"description": "owner parameter",
"in": "path",
"required": True,
"schema": {"type": "string"},
},
{
"name": "repo",
"description": "repo parameter",
"in": "path",
"required": True,
"schema": {"type": "string"},
},
]
}