{-# LANGUAGE QuasiQuotes #-}

module Network.OIDC.WellKnownSpec where

import Data.Aeson qualified as Aeson
import Network.OIDC.WellKnown (OpenIDConfiguration (..))
import Test.Hspec
import URI.ByteString.QQ

spec :: Spec
spec = do
  describe "parseJSON OpenIDConfiguration" $ do
    it "parse openidConfiguration response" $ do
      let response =
            "{"
              <> "\"issuer\": \"https://foo.com\","
              <> "\"authorization_endpoint\": \"https://foo.com/auth\","
              <> "\"token_endpoint\": \"https://foo.com/token\","
              <> "\"userinfo_endpoint\": \"https://foo.com/userinfo\","
              <> "\"jwks_uri\": \"https://foo.com/jwks\","
              <> "\"device_authorization_endpoint\": \"https://foo.com/device-code\""
              <> "}"
      let expected =
            OpenIDConfiguration
              { issuer = [uri|https://foo.com|]
              , authorizationEndpoint = [uri|https://foo.com/auth|]
              , tokenEndpoint = [uri|https://foo.com/token|]
              , userinfoEndpoint = [uri|https://foo.com/userinfo|]
              , jwksUri = [uri|https://foo.com/jwks|]
              , deviceAuthorizationEndpoint = [uri|https://foo.com/device-code|]
              }
      Aeson.eitherDecode response `shouldBe` Right expected