82 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import boto3
 | |
| import json
 | |
| import os
 | |
| import pytest
 | |
| 
 | |
| from botocore.exceptions import ClientError
 | |
| from moto import mock_apigateway
 | |
| 
 | |
| 
 | |
| @mock_apigateway
 | |
| 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")
 | |
|     resp.should.have.key("contentType").equals("application/octet-stream")
 | |
|     resp.should.have.key("contentDisposition").match('attachment; filename="swagger')
 | |
| 
 | |
|     body = json.loads(resp["body"].read().decode("utf-8"))
 | |
| 
 | |
|     body["info"].should.have.key("title").equals("Swagger Petstore - OpenAPI 3.0")
 | |
|     body["paths"].should.have.length_of(15)
 | |
| 
 | |
|     body["paths"]["/pet/{petId}"].should.have.length_of(3)
 | |
|     set(body["paths"]["/pet/{petId}"].keys()).should.equal({"DELETE", "GET", "POST"})
 | |
| 
 | |
| 
 | |
| @mock_apigateway
 | |
| 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"]
 | |
|     err["Code"].should.equal("NotFoundException")
 | |
|     err["Message"].should.equal("Invalid stage identifier specified")
 | |
| 
 | |
| 
 | |
| @mock_apigateway
 | |
| 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"]
 | |
|     err["Code"].should.equal("BadRequestException")
 | |
|     err["Message"].should.equal("No API exporter for type 'a'")
 |