module Fedi.TestSpec where

import Control.Monad.IO.Class
import Data.Aeson qualified as A
import Fedi qualified
import Test.Hspec

-- * Tests

spec :: Spec
spec = do
  describe "Fedi" do
    httpSignature

httpSignature :: Spec
httpSignature = do
  describe "HTTP Signature" do
    describe "Sign" do
      it "Sign a simple message" do
        details <- readDetails
        signed <- Fedi.sign details.privatePem "hello world"
        shouldBe
          (Fedi.ppSignedMessage signed)
          "rXu4VgqPA5izfSSznnuHVk68gFqjLmn2gM85LqNsyXgRhk1V6WnLCtSaMR3ZaqefaU37D1Nj2xUnPu6x54HqkW99Iwe64HAddKFdMNtkcyh523+FF9t8CuRcT7l97RfbqcZSkH6D7eF8+eDa/ItpP+uwdGBDzlk8gkgRwXMP63cLVd9gboNOqvFXx11OZLBWHHMCkJuKDbzuu+46fkPXDKnDojuDLLrfd9cWqee3w3qkvigZ2T/2s3iiXrvt4rOb5Gi0oLmXh6/mqDHBIDinkyXb72vEP/HhzZMv+OSa/6tZ+F1DWf9RYlh0tItfnU4qIamRusr/YYC3KDQJzkzPZQ=="
      it "Verify a simple message" do
        details <- readDetails
        let
          signedMessage =
            "rXu4VgqPA5izfSSznnuHVk68gFqjLmn2gM85LqNsyXgRhk1V6WnLCtSaMR3ZaqefaU37D1Nj2xUnPu6x54HqkW99Iwe64HAddKFdMNtkcyh523+FF9t8CuRcT7l97RfbqcZSkH6D7eF8+eDa/ItpP+uwdGBDzlk8gkgRwXMP63cLVd9gboNOqvFXx11OZLBWHHMCkJuKDbzuu+46fkPXDKnDojuDLLrfd9cWqee3w3qkvigZ2T/2s3iiXrvt4rOb5Gi0oLmXh6/mqDHBIDinkyXb72vEP/HhzZMv+OSa/6tZ+F1DWf9RYlh0tItfnU4qIamRusr/YYC3KDQJzkzPZQ=="
          message = "hello world"
        result <- Fedi.verifyPub (Fedi.pemToBS details.publicPem) signedMessage message
        shouldBe
          result
          True

readDetails :: IO Fedi.UserDetails
readDetails = Fedi.readUserDetailsFile "test/public/details.json"