serverless-haskell-0.4.2: test/AWSLambda/Events/APIGatewaySpec.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
module AWSLambda.Events.APIGatewaySpec where
import AWSLambda.Events.APIGateway
import Control.Lens
import Data.Aeson
import Data.ByteString.Lazy (ByteString)
import qualified Data.HashMap.Strict as HashMap
import Data.Text (Text)
import Text.RawString.QQ
import Test.Hspec
spec :: Spec
spec = do
describe "APIGatewayProxyRequest" $
it "parses sample GET request" $
decode sampleGetRequestJSON `shouldBe` Just sampleGetRequest
describe "APIGatewayProxyResponse" $
it "parses sample text event" $
decode sampleOKResponseJSON `shouldBe` Just sampleOKResponse
sampleGetRequestJSON :: ByteString
sampleGetRequestJSON = [r|
{
"path": "/test/hello",
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, lzma, sdch, br",
"Accept-Language": "en-US,en;q=0.8",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "US",
"Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==",
"X-Forwarded-For": "192.168.100.1, 192.168.1.1",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"pathParameters": {
"proxy": "hello"
},
"requestContext": {
"accountId": "123456789012",
"resourceId": "us4z18",
"stage": "test",
"requestId": "41b45ea3-70b5-11e6-b7bd-69b5aaebc7d9",
"identity": {
"cognitoIdentityPoolId": "",
"accountId": "",
"cognitoIdentityId": "",
"caller": "",
"apiKey": "",
"sourceIp": "192.168.100.1",
"cognitoAuthenticationType": "",
"cognitoAuthenticationProvider": "",
"userArn": "",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"user": ""
},
"resourcePath": "/{proxy+}",
"httpMethod": "GET",
"apiId": "wt6mne2s9k"
},
"resource": "/{proxy+}",
"httpMethod": "GET",
"queryStringParameters": {
"name": "me"
},
"stageVariables": {
"stageVarName": "stageVarValue"
}
}
|]
sampleGetRequest :: APIGatewayProxyRequest Text
sampleGetRequest =
APIGatewayProxyRequest
{ _agprqResource = "/{proxy+}"
, _agprqPath = "/test/hello"
, _agprqHttpMethod = "GET"
, _agprqHeaders =
HashMap.fromList
[ ("X-Forwarded-Proto", "https")
, ("CloudFront-Is-Desktop-Viewer", "true")
, ( "Accept"
, "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
, ( "X-Amz-Cf-Id"
, "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==")
, ("Accept-Encoding", "gzip, deflate, lzma, sdch, br")
, ("CloudFront-Forwarded-Proto", "https")
, ("Accept-Language", "en-US,en;q=0.8")
, ("CloudFront-Is-Tablet-Viewer", "false")
, ("Upgrade-Insecure-Requests", "1")
, ("CloudFront-Viewer-Country", "US")
, ( "User-Agent"
, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48")
, ("CloudFront-Is-Mobile-Viewer", "false")
, ("Host", "wt6mne2s9k.execute-api.us-west-2.amazonaws.com")
, ("X-Forwarded-Port", "443")
, ("CloudFront-Is-SmartTV-Viewer", "false")
, ( "Via"
, "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)")
, ("X-Forwarded-For", "192.168.100.1, 192.168.1.1")
]
, _agprqQueryStringParameters = HashMap.fromList [("name", "me")]
, _agprqPathParameters = HashMap.fromList [("proxy", "hello")]
, _agprqStageVariables = HashMap.fromList [("stageVarName", "stageVarValue")]
, _agprqRequestContext =
ProxyRequestContext
{ _prcPath = Nothing
, _prcAccountId = "123456789012"
, _prcResourceId = "us4z18"
, _prcStage = "test"
, _prcRequestId = "41b45ea3-70b5-11e6-b7bd-69b5aaebc7d9"
, _prcIdentity =
RequestIdentity
{ _riCognitoIdentityPoolId = Just ""
, _riAccountId = Just ""
, _riCognitoIdentityId = Just ""
, _riCaller = Just ""
, _riApiKey = Just ""
, _riSourceIp = Just "192.168.100.1"
, _riCognitoAuthenticationType = Just ""
, _riCognitoAuthenticationProvider = Just ""
, _riUserArn = Just ""
, _riUserAgent = Just
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48"
, _riUser = Just ""
}
, _prcResourcePath = "/{proxy+}"
, _prcHttpMethod = "GET"
, _prcApiId = "wt6mne2s9k"
}
, _agprqBody = Nothing
}
sampleOKResponseJSON :: ByteString
sampleOKResponseJSON = [r|
{
"statusCode": 200,
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, lzma, sdch, br",
"Accept-Language": "en-US,en;q=0.8",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "US",
"Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==",
"X-Forwarded-For": "192.168.100.1, 192.168.1.1",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"body": "Hello World"
}
|]
sampleOKResponse :: APIGatewayProxyResponse Text
sampleOKResponse =
responseOK
& responseBody ?~ "Hello World"
& agprsHeaders .~ HashMap.fromList
[ ("X-Forwarded-Proto", "https")
, ("CloudFront-Is-Desktop-Viewer", "true")
, ( "Accept"
, "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
, ("X-Amz-Cf-Id", "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==")
, ("Accept-Encoding", "gzip, deflate, lzma, sdch, br")
, ("CloudFront-Forwarded-Proto", "https")
, ("Accept-Language", "en-US,en;q=0.8")
, ("CloudFront-Is-Tablet-Viewer", "false")
, ("Upgrade-Insecure-Requests", "1")
, ("CloudFront-Viewer-Country", "US")
, ( "User-Agent"
, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48")
, ("CloudFront-Is-Mobile-Viewer", "false")
, ("Host", "wt6mne2s9k.execute-api.us-west-2.amazonaws.com")
, ("X-Forwarded-Port", "443")
, ("CloudFront-Is-SmartTV-Viewer", "false")
, ("Via", "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)")
, ("X-Forwarded-For", "192.168.100.1, 192.168.1.1")
]