83 lines
2.9 KiB
Python
83 lines
2.9 KiB
Python
import json
|
|
import os
|
|
|
|
import boto3
|
|
import pytest
|
|
from botocore.exceptions import ClientError
|
|
|
|
from moto import mock_aws
|
|
|
|
|
|
@mock_aws
|
|
def test_import_rest_api__api_is_created():
|
|
client = boto3.client("apigateway", region_name="us-west-2")
|
|
|
|
path = os.path.dirname(os.path.abspath(__file__))
|
|
with open(path + "/resources/petstore-swagger-v3.yaml", "rb") as api_json:
|
|
response = client.import_rest_api(body=api_json.read())
|
|
api_id = response["id"]
|
|
|
|
root_id = client.get_resources(restApiId=api_id)["items"][4]["id"]
|
|
client.get_method(restApiId=api_id, resourceId=root_id, httpMethod="POST")
|
|
|
|
client.put_integration(
|
|
restApiId=api_id, resourceId=root_id, httpMethod="POST", type="MOCK"
|
|
)
|
|
client.put_integration_response(
|
|
restApiId=api_id, resourceId=root_id, httpMethod="POST", statusCode="200"
|
|
)
|
|
|
|
deployment_id = client.create_deployment(restApiId=api_id, stageName="dep")["id"]
|
|
|
|
client.create_stage(restApiId=api_id, stageName="stg", deploymentId=deployment_id)
|
|
|
|
resp = client.get_export(restApiId=api_id, stageName="stg", exportType="swagger")
|
|
assert resp["contentType"] == "application/octet-stream"
|
|
assert 'attachment; filename="swagger' in resp["contentDisposition"]
|
|
|
|
body = json.loads(resp["body"].read().decode("utf-8"))
|
|
|
|
assert body["info"]["title"] == "Swagger Petstore - OpenAPI 3.0"
|
|
assert len(body["paths"]) == 15
|
|
|
|
assert len(body["paths"]["/pet/{petId}"]) == 3
|
|
assert set(body["paths"]["/pet/{petId}"].keys()) == {"DELETE", "GET", "POST"}
|
|
|
|
|
|
@mock_aws
|
|
def test_export_api__unknown_api():
|
|
client = boto3.client("apigateway", region_name="us-west-2")
|
|
|
|
with pytest.raises(ClientError) as exc:
|
|
client.get_export(restApiId="unknown", stageName="l", exportType="a")
|
|
err = exc.value.response["Error"]
|
|
assert err["Code"] == "NotFoundException"
|
|
assert err["Message"] == "Invalid stage identifier specified"
|
|
|
|
|
|
@mock_aws
|
|
def test_export_api__unknown_export_type():
|
|
client = boto3.client("apigateway", region_name="us-east-1")
|
|
|
|
path = os.path.dirname(os.path.abspath(__file__))
|
|
with open(path + "/resources/petstore-swagger-v3.yaml", "rb") as api_json:
|
|
response = client.import_rest_api(body=api_json.read())
|
|
api_id = response["id"]
|
|
|
|
root_id = client.get_resources(restApiId=api_id)["items"][4]["id"]
|
|
client.get_method(restApiId=api_id, resourceId=root_id, httpMethod="POST")
|
|
|
|
client.put_integration(
|
|
restApiId=api_id, resourceId=root_id, httpMethod="POST", type="MOCK"
|
|
)
|
|
client.put_integration_response(
|
|
restApiId=api_id, resourceId=root_id, httpMethod="POST", statusCode="200"
|
|
)
|
|
client.create_deployment(restApiId=api_id, stageName="dep")
|
|
|
|
with pytest.raises(ClientError) as exc:
|
|
client.get_export(restApiId=api_id, stageName="dep", exportType="a")
|
|
err = exc.value.response["Error"]
|
|
assert err["Code"] == "BadRequestException"
|
|
assert err["Message"] == "No API exporter for type 'a'"
|