import json import jsonschema import pytest DEFAULT_REQUEST_HEADERS = { "Content-type": "application/json", "Accept": ["application/json"] } LG_ROUTERS_SCHEMA = { "$schema": "http://json-schema.org/draft-07/schema#", "definitions": { "pop-info": { "type": "object", "properties": { "name": {"type": "string"}, "abbreviation": {"type": "string"}, "country": {"type": "string"}, "country code": {"type": "string"}, "city": {"type": "string"}, "longitude": {"type": "number"}, "latitude": {"type": "number"} }, "required": [ "name", "abbreviation", "country", "country code", "city", "longitude", "latitude" ], "additionalProperties": False }, "router": { "type": "object", "properties": { "equipment name": {"type": "string"}, "type": { "type": "string", "enum": ["INTERNAL", "CORE"] }, "pop": {"$ref": "#/definitions/pop-info"} }, "required": ["equipment name", "type", "pop"], "additionalProperties": False } }, "type": "array", "items": {"$ref": "#/definitions/router"} } def test_public_routers(client): rv = client.get( '/lg/routers/public', headers=DEFAULT_REQUEST_HEADERS) assert rv.status_code == 200 assert rv.is_json response_data = json.loads(rv.data.decode('utf-8')) jsonschema.validate(response_data, LG_ROUTERS_SCHEMA) assert response_data # test data is non-empty # no internal routers should be present assert all(r['type'] == 'CORE' for r in response_data) def test_internal_routers(client): rv = client.get( '/lg/routers/all', headers=DEFAULT_REQUEST_HEADERS) assert rv.status_code == 200 assert rv.is_json response_data = json.loads(rv.data.decode('utf-8')) jsonschema.validate(response_data, LG_ROUTERS_SCHEMA) assert response_data # test data is non-empty # response should contain both public & internal routers assert any(r['type'] == 'INTERNAL' for r in response_data) assert any(r['type'] == 'CORE' for r in response_data) @pytest.mark.parametrize('bad_endpoint', [ # bad access param keyword '/lg/routers/ALL', '/lg/routers/any', '/lg/routers/internal', # no access param keyword '/lg/routers', '/lg/routers/', # other endpoints '/lg', '/lg/', '/lg/something' ]) def test_internal_routers(client, bad_endpoint): rv = client.get( bad_endpoint, headers=DEFAULT_REQUEST_HEADERS) assert rv.status_code == 404