diff --git a/Makefile b/Makefile index 4337c13c22..421c849028 100644 --- a/Makefile +++ b/Makefile @@ -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; \ diff --git a/awx/main/tests/conftest.py b/awx/main/tests/conftest.py index 0c3cb513ec..1435c4efa1 100644 --- a/awx/main/tests/conftest.py +++ b/awx/main/tests/conftest.py @@ -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 diff --git a/awx/main/tests/docs/test_swagger_generation.py b/awx/main/tests/docs/test_swagger_generation.py index fc6bfa25a1..cecd1016ea 100644 --- a/awx/main/tests/docs/test_swagger_generation.py +++ b/awx/main/tests/docs/test_swagger_generation.py @@ -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)