Generate schema suitable for comparing for schema changes

This commit is contained in:
Matthew Jones 2018-09-18 13:03:38 -04:00 committed by Elijah DeLee
parent 9b992c971e
commit f737fc066f
3 changed files with 27 additions and 6 deletions

View File

@ -338,6 +338,12 @@ pyflakes: reports
pylint: reports
@(set -o pipefail && $@ | reports/$@.report)
genschema: reports
@if [ "$(VENV_BASE)" ]; then \
. $(VENV_BASE)/awx/bin/activate; \
fi; \
(set -o pipefail && py.test --genschema awx/conf/tests/functional awx/main/tests/functional/api awx/main/tests/docs --release=$(VERSION_TARGET) | tee reports/$@.report)
swagger: reports
@if [ "$(VENV_BASE)" ]; then \
. $(VENV_BASE)/awx/bin/activate; \

View File

@ -15,6 +15,12 @@ from awx.main.tests.factories import (
)
def pytest_addoption(parser):
parser.addoption(
"--genschema", action="store_true", default=False, help="execute schema validator"
)
def pytest_configure(config):
import sys
sys._called_from_test = True

View File

@ -49,7 +49,8 @@ class TestSwaggerGeneration():
data.update(response.accepted_renderer.get_customizations() or {})
data['host'] = None
data['modified'] = datetime.datetime.utcnow().isoformat()
if not pytest.config.getoption("--genschema"):
data['modified'] = datetime.datetime.utcnow().isoformat()
data['schemes'] = ['https']
data['consumes'] = ['application/json']
@ -139,11 +140,14 @@ class TestSwaggerGeneration():
for param in node[method].get('parameters'):
if param['in'] == 'body':
node[method]['parameters'].remove(param)
node[method].setdefault('parameters', []).append({
'name': 'data',
'in': 'body',
'schema': {'example': request_data},
})
if pytest.config.getoption("--genschema"):
pytest.skip("In schema generator skipping swagger generator", allow_module_level=True)
else:
node[method].setdefault('parameters', []).append({
'name': 'data',
'in': 'body',
'schema': {'example': request_data},
})
# Build response examples
if resp:
@ -168,4 +172,9 @@ class TestSwaggerGeneration():
'2018-02-01T08:00:00.000000Z',
data
)
data = re.sub(
'''(\s+"client_id": ")([a-zA-Z0-9]{40})("\,\s*)''',
'\\1xxxx\\3',
data
)
f.write(data)