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']}" | ||
|  |     ) |