Files
octokit.py/tests/test_validation.py
T
Kyle Hornberg b38acfef98 Style
2020-01-17 08:54:24 -06:00

258 lines
12 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"
}
}
]
}