95 lines
5.5 KiB
Python
95 lines
5.5 KiB
Python
import boto3
|
|
import pytest
|
|
import sure # noqa # pylint: disable=unused-import
|
|
|
|
from botocore.exceptions import ClientError
|
|
from moto import mock_apigatewayv2
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_reimport_api_standard_fields():
|
|
client = boto3.client("apigatewayv2", region_name="eu-west-1")
|
|
api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
|
|
|
|
resp = client.reimport_api(
|
|
ApiId=api_id,
|
|
Body="---\nopenapi: 3.0.1\ninfo:\n title: tf-acc-test-2983214806752144669_DIFFERENT\n version: 2.0\nx-amazon-apigateway-cors:\n allow_methods:\n - delete\n allow_origins:\n - https://www.google.de\npaths:\n \"/test\":\n get:\n x-amazon-apigateway-integration:\n type: HTTP_PROXY\n httpMethod: GET\n payloadFormatVersion: '1.0'\n uri: https://www.google.de\n",
|
|
)
|
|
|
|
resp.should.have.key("CorsConfiguration").equals({})
|
|
resp.should.have.key("Name").equals("tf-acc-test-2983214806752144669_DIFFERENT")
|
|
resp.should.have.key("Version").equals("2.0")
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_reimport_api_failonwarnings():
|
|
client = boto3.client("apigatewayv2", region_name="eu-west-1")
|
|
api_id = client.create_api(Name="test-import-api", ProtocolType="HTTP")["ApiId"]
|
|
|
|
with pytest.raises(ClientError) as exc:
|
|
client.reimport_api(
|
|
ApiId=api_id,
|
|
Body='{\n "openapi": "3.0.1",\n "info": {\n "title": "Title test",\n "version": "2.0",\n "description": "Description test"\n },\n "paths": {\n "/update": {\n "get": {\n "x-amazon-apigateway-integration": {\n "type": "HTTP_PROXY",\n "httpMethod": "GET",\n "payloadFormatVersion": "1.0",\n "uri": "https://www.google.de"\n },\n "responses": {\n "200": {\n "description": "Response description",\n "content": {\n "application/json": {\n "schema": {\n "$ref": "#/components/schemas/ModelThatDoesNotExist"\n }\n }\n }\n }\n }\n }\n }\n }\n}\n',
|
|
FailOnWarnings=True,
|
|
)
|
|
err = exc.value.response["Error"]
|
|
err["Code"].should.equal("BadRequestException")
|
|
err["Message"].should.equal(
|
|
"Warnings found during import:\n\tParse issue: attribute paths.'/update'(get).responses.200.content.schema.#/components/schemas/ModelThatDoesNotExist is missing"
|
|
)
|
|
|
|
# Title should not have been updated
|
|
resp = client.get_api(ApiId=api_id)
|
|
resp.should.have.key("Name").equals("test-import-api")
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_reimport_api_do_not_failonwarnings():
|
|
client = boto3.client("apigatewayv2", region_name="eu-west-1")
|
|
api_id = client.create_api(Name="test-import-api", ProtocolType="HTTP")["ApiId"]
|
|
|
|
client.reimport_api(
|
|
ApiId=api_id,
|
|
Body='{\n "openapi": "3.0.1",\n "info": {\n "title": "Title test",\n "version": "2.0",\n "description": "Description test"\n },\n "paths": {\n "/update": {\n "get": {\n "x-amazon-apigateway-integration": {\n "type": "HTTP_PROXY",\n "httpMethod": "GET",\n "payloadFormatVersion": "1.0",\n "uri": "https://www.google.de"\n },\n "responses": {\n "200": {\n "description": "Response description",\n "content": {\n "application/json": {\n "schema": {\n "$ref": "#/components/schemas/ModelThatDoesNotExist"\n }\n }\n }\n }\n }\n }\n }\n }\n}\n',
|
|
FailOnWarnings=False,
|
|
)
|
|
|
|
# Title should have been updated
|
|
resp = client.get_api(ApiId=api_id)
|
|
resp.should.have.key("Name").equals("Title test")
|
|
|
|
|
|
@mock_apigatewayv2
|
|
def test_reimport_api_routes_and_integrations():
|
|
client = boto3.client("apigatewayv2", region_name="eu-west-1")
|
|
resp = client.create_api(Name="test-import-api", ProtocolType="HTTP")
|
|
api_id = resp["ApiId"]
|
|
|
|
client.reimport_api(
|
|
ApiId=api_id,
|
|
Body='{\n "openapi": "3.0.1",\n "info": {\n "title": "tf-acc-test-121780722915762033_DIFFERENT",\n "version": "1.0"\n },\n "paths": {\n "/test": {\n "get": {\n "x-amazon-apigateway-integration": {\n "type": "HTTP_PROXY",\n "httpMethod": "GET",\n "payloadFormatVersion": "1.0",\n "uri": "https://www.google.de"\n }\n }\n }\n }\n}\n',
|
|
)
|
|
|
|
resp = client.get_integrations(ApiId=api_id)
|
|
resp.should.have.key("Items").length_of(1)
|
|
integration = resp["Items"][0]
|
|
integration.should.have.key("ConnectionType").equals("INTERNET")
|
|
integration.should.have.key("IntegrationId")
|
|
integration.should.have.key("IntegrationMethod").equals("GET")
|
|
integration.should.have.key("IntegrationType").equals("HTTP_PROXY")
|
|
integration.should.have.key("IntegrationUri").equals("https://www.google.de")
|
|
integration.should.have.key("PayloadFormatVersion").equals("1.0")
|
|
integration.should.have.key("TimeoutInMillis").equals(30000)
|
|
|
|
resp = client.get_routes(ApiId=api_id)
|
|
resp.should.have.key("Items").length_of(1)
|
|
route = resp["Items"][0]
|
|
route.should.have.key("ApiKeyRequired").equals(False)
|
|
route.should.have.key("AuthorizationScopes").equals([])
|
|
route.should.have.key("RequestParameters").equals({})
|
|
route.should.have.key("RouteId")
|
|
route.should.have.key("RouteKey").equals("GET /test")
|
|
route.should.have.key("Target").should.equal(
|
|
f"integrations/{integration['IntegrationId']}"
|
|
)
|