data-rfc5280-0.1.0.0: test/Rfc5280/HasOIDSpec.hs
{-# LANGUAGE OverloadedStrings #-}
{- |
Module : Rfc5280.HasOIDSpec
Copyright : (c) 2026 Tim Emiola
Maintainer : Tim Emiola <adetokunbo@emio.la>
SPDX-License-Identifier: BSD3
Tests for 'Data.Rfc5280.HasOID'.
-}
module Rfc5280.HasOIDSpec (spec) where
import Data.Proxy (Proxy (..))
import Data.Rfc5280
( AuthorityKeyIdentifier
, BasicConstraints (..)
, CertificatePolicies
, ExtKeyUsage
, KeyUsage
, NonEmpty (..)
, SubjectKeyIdentifier
, renderConfig
)
import Data.Rfc5280.AuthorityInfoAccess (AuthorityInfoAccess)
import Data.Rfc5280.HasOID (Extension (..), HasOID (..), extensionOID)
import Data.Rfc5280.SubjectAltName (SubjectAltName)
import Test.Hspec
spec :: Spec
spec = describe "module Data.Rfc5280.HasOID" $ do
context "extensionOID" $ do
it "returns the OID for BasicConstraints" $
extensionOID (Proxy :: Proxy BasicConstraints) `shouldBe` (2 :| [5, 29, 19])
it "returns the OID for KeyUsage" $
extensionOID (Proxy :: Proxy KeyUsage) `shouldBe` (2 :| [5, 29, 15])
it "returns the OID for ExtKeyUsage" $
extensionOID (Proxy :: Proxy ExtKeyUsage) `shouldBe` (2 :| [5, 29, 37])
it "returns the OID for SubjectKeyIdentifier" $
extensionOID (Proxy :: Proxy SubjectKeyIdentifier) `shouldBe` (2 :| [5, 29, 14])
it "returns the OID for AuthorityKeyIdentifier" $
extensionOID (Proxy :: Proxy AuthorityKeyIdentifier) `shouldBe` (2 :| [5, 29, 35])
it "returns the OID for CertificatePolicies" $
extensionOID (Proxy :: Proxy CertificatePolicies) `shouldBe` (2 :| [5, 29, 32])
it "returns the OID for SubjectAltName" $
extensionOID (Proxy :: Proxy SubjectAltName) `shouldBe` (2 :| [5, 29, 17])
it "returns the OID for AuthorityInfoAccess" $
extensionOID (Proxy :: Proxy AuthorityInfoAccess) `shouldBe` (1 :| [3, 6, 1, 5, 5, 7, 1, 1])
context "Extension (RenderConfig)" $ do
it "prepends 'critical,' when extCritical is True" $
renderConfig (Extension True notCA) `shouldBe` "critical,CA:FALSE"
it "renders the value unchanged when extCritical is False" $
renderConfig (Extension False notCA) `shouldBe` "CA:FALSE"
notCA :: BasicConstraints
notCA = BasicConstraints{bcIsCA = False, bcPathLength = Nothing}