299 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			299 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import boto3
 | |
| import pytest
 | |
| 
 | |
| from botocore.exceptions import ClientError
 | |
| from moto import mock_apigatewayv2
 | |
| 
 | |
| 
 | |
| @mock_apigatewayv2
 | |
| def test_get_routes_empty():
 | |
|     client = boto3.client("apigatewayv2", region_name="eu-west-1")
 | |
|     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
 | |
| 
 | |
|     resp = client.get_routes(ApiId=api_id)
 | |
|     resp.should.have.key("Items").equals([])
 | |
| 
 | |
| 
 | |
| @mock_apigatewayv2
 | |
| def test_create_route_minimal():
 | |
|     client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
 | |
|     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
 | |
|     resp = client.create_route(ApiId=api_id, RouteKey="GET /")
 | |
| 
 | |
|     resp.should.have.key("ApiKeyRequired").equals(False)
 | |
|     resp.should.have.key("AuthorizationType").equals("NONE")
 | |
|     resp.should.have.key("RouteId")
 | |
|     resp.should.have.key("RouteKey").equals("GET /")
 | |
| 
 | |
|     resp.shouldnt.have.key("AuthorizationScopes")
 | |
|     resp.shouldnt.have.key("AuthorizerId")
 | |
|     resp.shouldnt.have.key("ModelSelectionExpression")
 | |
|     resp.shouldnt.have.key("OperationName")
 | |
|     resp.shouldnt.have.key("RequestModels")
 | |
|     resp.shouldnt.have.key("RouteResponseSelectionExpression")
 | |
|     resp.shouldnt.have.key("Target")
 | |
| 
 | |
| 
 | |
| @mock_apigatewayv2
 | |
| def test_create_route_full():
 | |
|     client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
 | |
|     api_id = client.create_api(
 | |
|         Name="test-api",
 | |
|         ProtocolType="WEBSOCKET",
 | |
|         RouteSelectionExpression="${request.method}",
 | |
|     )["ApiId"]
 | |
|     resp = client.create_route(
 | |
|         ApiId=api_id,
 | |
|         ApiKeyRequired=True,
 | |
|         AuthorizerId="auth_id",
 | |
|         AuthorizationScopes=["scope1", "scope2"],
 | |
|         AuthorizationType="CUSTOM",
 | |
|         ModelSelectionExpression="mse",
 | |
|         OperationName="OP",
 | |
|         RequestModels={"req": "uest"},
 | |
|         RequestParameters={"action": {"Required": True}},
 | |
|         RouteKey="GET /",
 | |
|         RouteResponseSelectionExpression="$default",
 | |
|         Target="t",
 | |
|     )
 | |
| 
 | |
|     resp.should.have.key("ApiKeyRequired").equals(True)
 | |
|     resp.should.have.key("AuthorizationType").equals("CUSTOM")
 | |
|     resp.should.have.key("AuthorizationScopes").equals(["scope1", "scope2"])
 | |
|     resp.should.have.key("AuthorizerId").equals("auth_id")
 | |
|     resp.should.have.key("RouteId")
 | |
|     resp.should.have.key("RouteKey").equals("GET /")
 | |
| 
 | |
|     resp.should.have.key("ModelSelectionExpression").equals("mse")
 | |
|     resp.should.have.key("OperationName").equals("OP")
 | |
|     resp.should.have.key("RequestModels").equals({"req": "uest"})
 | |
|     resp.should.have.key("RequestParameters").equals({"action": {"Required": True}})
 | |
|     resp.should.have.key("RouteResponseSelectionExpression").equals("$default")
 | |
|     resp.should.have.key("Target").equals("t")
 | |
| 
 | |
| 
 | |
| @mock_apigatewayv2
 | |
| def test_delete_route():
 | |
|     client = boto3.client("apigatewayv2", region_name="eu-west-1")
 | |
|     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
 | |
|     route_id = client.create_route(ApiId=api_id, RouteKey="GET /")["RouteId"]
 | |
| 
 | |
|     client.delete_route(ApiId=api_id, RouteId=route_id)
 | |
| 
 | |
|     resp = client.get_routes(ApiId=api_id)
 | |
|     resp.should.have.key("Items").length_of(0)
 | |
| 
 | |
| 
 | |
| @mock_apigatewayv2
 | |
| def test_get_route():
 | |
|     client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
 | |
|     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
 | |
|     route_id = client.create_route(ApiId=api_id, RouteKey="GET /")["RouteId"]
 | |
| 
 | |
|     resp = client.get_route(ApiId=api_id, RouteId=route_id)
 | |
| 
 | |
|     resp.should.have.key("ApiKeyRequired").equals(False)
 | |
|     resp.should.have.key("AuthorizationType").equals("NONE")
 | |
|     resp.should.have.key("RouteId")
 | |
|     resp.should.have.key("RouteKey").equals("GET /")
 | |
| 
 | |
|     resp.shouldnt.have.key("AuthorizationScopes")
 | |
|     resp.shouldnt.have.key("AuthorizerId")
 | |
|     resp.shouldnt.have.key("ModelSelectionExpression")
 | |
|     resp.shouldnt.have.key("OperationName")
 | |
|     resp.shouldnt.have.key("RouteResponseSelectionExpression")
 | |
|     resp.shouldnt.have.key("Target")
 | |
| 
 | |
| 
 | |
| @mock_apigatewayv2
 | |
| def test_get_route_unknown():
 | |
|     client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
 | |
|     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
 | |
|     with pytest.raises(ClientError) as exc:
 | |
|         client.get_route(ApiId=api_id, RouteId="unknown")
 | |
| 
 | |
|     err = exc.value.response["Error"]
 | |
|     err["Code"].should.equal("NotFoundException")
 | |
|     err["Message"].should.equal("Invalid Route identifier specified unknown")
 | |
| 
 | |
| 
 | |
| @mock_apigatewayv2
 | |
| def test_get_routes():
 | |
|     client = boto3.client("apigatewayv2", region_name="eu-west-1")
 | |
|     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
 | |
|     client.create_route(ApiId=api_id, RouteKey="GET /")
 | |
| 
 | |
|     resp = client.get_routes(ApiId=api_id)
 | |
|     resp.should.have.key("Items").length_of(1)
 | |
| 
 | |
| 
 | |
| @mock_apigatewayv2
 | |
| def test_update_route_single_attribute():
 | |
|     client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
 | |
|     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
 | |
|     route_id = client.create_route(ApiId=api_id, RouteKey="GET /")["RouteId"]
 | |
| 
 | |
|     resp = client.update_route(ApiId=api_id, RouteId=route_id, RouteKey="POST /")
 | |
| 
 | |
|     resp.should.have.key("ApiKeyRequired").equals(False)
 | |
|     resp.should.have.key("AuthorizationType").equals("NONE")
 | |
|     resp.should.have.key("RouteId").equals(route_id)
 | |
|     resp.should.have.key("RouteKey").equals("POST /")
 | |
| 
 | |
| 
 | |
| @mock_apigatewayv2
 | |
| def test_update_route_all_attributes():
 | |
|     client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
 | |
|     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
 | |
|     route_id = client.create_route(ApiId=api_id, ApiKeyRequired=True, RouteKey="GET /")[
 | |
|         "RouteId"
 | |
|     ]
 | |
| 
 | |
|     resp = client.update_route(
 | |
|         ApiId=api_id,
 | |
|         RouteId=route_id,
 | |
|         ApiKeyRequired=False,
 | |
|         AuthorizationScopes=["scope"],
 | |
|         AuthorizerId="auth_id",
 | |
|         AuthorizationType="JWT",
 | |
|         ModelSelectionExpression="mse",
 | |
|         OperationName="OP",
 | |
|         RequestModels={"req": "uest"},
 | |
|         RequestParameters={"action": {"Required": True}},
 | |
|         RouteResponseSelectionExpression="$default",
 | |
|         Target="t",
 | |
|     )
 | |
| 
 | |
|     resp.should.have.key("ApiKeyRequired").equals(False)
 | |
|     resp.should.have.key("AuthorizationType").equals("JWT")
 | |
|     resp.should.have.key("AuthorizationScopes").equals(["scope"])
 | |
|     resp.should.have.key("AuthorizerId").equals("auth_id")
 | |
|     resp.should.have.key("RouteId")
 | |
|     resp.should.have.key("RouteKey").equals("GET /")
 | |
|     resp.should.have.key("ModelSelectionExpression").equals("mse")
 | |
|     resp.should.have.key("OperationName").equals("OP")
 | |
|     resp.should.have.key("RequestModels").equals({"req": "uest"})
 | |
|     resp.should.have.key("RequestParameters").equals({"action": {"Required": True}})
 | |
|     resp.should.have.key("RouteResponseSelectionExpression").equals("$default")
 | |
|     resp.should.have.key("Target").equals("t")
 | |
| 
 | |
| 
 | |
| @mock_apigatewayv2
 | |
| def test_delete_route_request_parameter():
 | |
|     client = boto3.client("apigatewayv2", region_name="us-east-1")
 | |
|     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
 | |
|     route_id = client.create_route(
 | |
|         ApiId=api_id,
 | |
|         RequestParameters={
 | |
|             "action": {"Required": True},
 | |
|             "route.request.header.authorization": {"Required": False},
 | |
|             "zparam": {"Required": False},
 | |
|         },
 | |
|         RouteKey="GET /",
 | |
|     )["RouteId"]
 | |
| 
 | |
|     request_params = client.get_route(ApiId=api_id, RouteId=route_id)[
 | |
|         "RequestParameters"
 | |
|     ]
 | |
|     request_params.keys().should.have.length_of(3)
 | |
| 
 | |
|     client.delete_route_request_parameter(
 | |
|         ApiId=api_id,
 | |
|         RouteId=route_id,
 | |
|         RequestParameterKey="route.request.header.authorization",
 | |
|     )
 | |
| 
 | |
|     request_params = client.get_route(ApiId=api_id, RouteId=route_id)[
 | |
|         "RequestParameters"
 | |
|     ]
 | |
|     request_params.keys().should.have.length_of(2)
 | |
|     request_params.should.have.key("action")
 | |
|     request_params.should.have.key("zparam")
 | |
| 
 | |
| 
 | |
| @mock_apigatewayv2
 | |
| def test_create_route_response_minimal():
 | |
|     client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
 | |
|     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
 | |
|     route_id = client.create_route(ApiId=api_id, RouteKey="GET /")["RouteId"]
 | |
| 
 | |
|     resp = client.create_route_response(
 | |
|         ApiId=api_id, RouteId=route_id, RouteResponseKey="$default"
 | |
|     )
 | |
| 
 | |
|     resp.should.have.key("RouteResponseId")
 | |
|     resp.should.have.key("RouteResponseKey").equals("$default")
 | |
| 
 | |
| 
 | |
| @mock_apigatewayv2
 | |
| def test_create_route_response():
 | |
|     client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
 | |
|     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
 | |
|     route_id = client.create_route(ApiId=api_id, RouteKey="GET /")["RouteId"]
 | |
| 
 | |
|     resp = client.create_route_response(
 | |
|         ApiId=api_id,
 | |
|         ModelSelectionExpression="mse",
 | |
|         ResponseModels={"test": "tfacctest5832545056931060873"},
 | |
|         RouteId=route_id,
 | |
|         RouteResponseKey="$default",
 | |
|     )
 | |
| 
 | |
|     resp.should.have.key("RouteResponseId")
 | |
|     resp.should.have.key("RouteResponseKey").equals("$default")
 | |
|     resp.should.have.key("ModelSelectionExpression").equals("mse")
 | |
|     resp.should.have.key("ResponseModels").equals(
 | |
|         {"test": "tfacctest5832545056931060873"}
 | |
|     )
 | |
| 
 | |
| 
 | |
| @mock_apigatewayv2
 | |
| def test_get_route_response():
 | |
|     client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
 | |
|     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
 | |
|     route_id = client.create_route(ApiId=api_id, RouteKey="GET /")["RouteId"]
 | |
| 
 | |
|     route_response_id = client.create_route_response(
 | |
|         ApiId=api_id, RouteId=route_id, RouteResponseKey="$default"
 | |
|     )["RouteResponseId"]
 | |
| 
 | |
|     resp = client.get_route_response(
 | |
|         ApiId=api_id, RouteId=route_id, RouteResponseId=route_response_id
 | |
|     )
 | |
| 
 | |
|     resp.should.have.key("RouteResponseId")
 | |
|     resp.should.have.key("RouteResponseKey").equals("$default")
 | |
| 
 | |
| 
 | |
| @mock_apigatewayv2
 | |
| def test_get_route_response_unknown():
 | |
|     client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
 | |
|     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
 | |
|     route_id = client.create_route(ApiId=api_id, RouteKey="GET /")["RouteId"]
 | |
| 
 | |
|     with pytest.raises(ClientError) as exc:
 | |
|         client.get_route_response(
 | |
|             ApiId=api_id, RouteId=route_id, RouteResponseId="unknown"
 | |
|         )
 | |
| 
 | |
|     err = exc.value.response["Error"]
 | |
|     err["Code"].should.equal("NotFoundException")
 | |
| 
 | |
| 
 | |
| @mock_apigatewayv2
 | |
| def test_delete_route_response_unknown():
 | |
|     client = boto3.client("apigatewayv2", region_name="ap-southeast-1")
 | |
|     api_id = client.create_api(Name="test-api", ProtocolType="HTTP")["ApiId"]
 | |
|     r_id = client.create_route(ApiId=api_id, RouteKey="GET /")["RouteId"]
 | |
|     rr_id = client.create_route_response(
 | |
|         ApiId=api_id, RouteId=r_id, RouteResponseKey="$default"
 | |
|     )["RouteResponseId"]
 | |
| 
 | |
|     client.delete_route_response(ApiId=api_id, RouteId=r_id, RouteResponseId=rr_id)
 | |
| 
 | |
|     with pytest.raises(ClientError) as exc:
 | |
|         client.get_route_response(ApiId=api_id, RouteId=r_id, RouteResponseId=rr_id)
 | |
| 
 | |
|     err = exc.value.response["Error"]
 | |
|     err["Code"].should.equal("NotFoundException")
 |