packages feed

aws-sns-verify-0.0.0.0: tests/Amazon/SNS/VerifySpec.hs

{-# LANGUAGE QuasiQuotes #-}

module Amazon.SNS.VerifySpec
  ( spec
  ) where

import Amazon.SNS.Verify.TestPrelude

import Amazon.SNS.Verify
import Data.Aeson.QQ

spec :: Spec
spec = around_ useCertServer $ do
  describe "verifySNSMessage" $ do
    it "successfully validates an SNS notification" $ do
      let
        payload = [aesonQQ|
          { Message: "Some message"
          , MessageId: "78d4d7a0-a3eb-5c4d-834f-8d5fa9813ab6"
          , Timestamp: "2022-05-18T14:52:26.952Z"
          , TopicArn: "arn:aws:sns:us-west-2:123456789012:MyTopic"
          , Type: "Notification"
          , Subject: "SynthesisTaskNotification { TaskId: 680a1f1b-f3ae-4474-aa8f-3b6dfe52e656, Status: COMPLETED }"
          , SignatureVersion: "1"
          , Signature: "Dg24trcOUiLjclt5JwyJS0JEOnEEbi6P30XS6KBxMCwzZ08a04UwjaFTW9Ae8xurhBS5YESz1fY28vTwvEmxh/20WmB3bWIDOMp9v5RI8XSZOvpMm+hdQJ43VqGhEDyAvRU6iCDLihDlZNc/sBCwl9X0H4kh/8vIElRif9gFBbYI94ZHGgqEV+Zc3gVKo9Udrl/MxNvMVadsO/+/oPVUeWibQr3xfGK95oc/ocuNAgi0MOxZmLVnibHu36KOTSvy2qSLonnRRFcbaauYZJ4js7oTq+1ujXNO72oPLaeG3pVJ2grqMc5z8tKQxFnSTE3es7wQarU/CLrbO8j0isbnWw=="
          , SigningCertURL: "http://localhost:3000"
          }
          |]
      x <- verifySNSMessage payload

      x `shouldBe` "Some message"

    it "successfully confirms a subscription" $ do
      let
        payload = [aesonQQ|
          { Message: "Some message"
          , MessageId: "78d4d7a0-a3eb-5c4d-834f-8d5fa9813ab6"
          , Timestamp: "2022-05-18T14:52:26.952Z"
          , Token: "test"
          , TopicArn: "arn:aws:sns:us-west-2:123456789012:MyTopic"
          , Type: "SubscriptionConfirmation"
          , SignatureVersion: "1"
          , SubscribeURL: "http://localhost:3000"

          , Signature: "fHExOb2eyGY3mCISjk72nTLRomG9kB+I8c01Jj8iAEUWG2De3QrdRciMXrlP/zEJEbCVDN1lzO91rMu02ng0Akj1s3tN8lRK1QgCRt/35ob9QG9j2xXMowbdEmibj03rILQAriXk1H+pvftBvr9imz+eZID8TZfpjKkVJtn5pvs7LjpOQaTLgZmDIVtsz+04sTQscaETy00kLbqmfknqd6zGmvB7ub/HDhjF3xojBLE+1HCUCgQoS6FAEs/ivbcTdXpqs8L5trStC1So1w/xlTkaGnDmcLpVtj7qk2HBnggJhw4ay8dF4LRpipc5w254dghIeY0YlwflW4l1aZHb3w=="
          , SigningCertURL: "http://localhost:3000"
          }
          |]

      verifySNSMessage payload
        `shouldThrow` (\case
                        SubscribeMessageResponded -> True
                        _ -> False
                      )