43 lines
1.7 KiB
Haskell
43 lines
1.7 KiB
Haskell
|
|
module Nuthatch.Test.Identity
|
|||
|
|
( tests
|
|||
|
|
) where
|
|||
|
|
|
|||
|
|
import Hedgehog (Property, assert, forAll, property, (===))
|
|||
|
|
import qualified Hedgehog.Gen as Gen
|
|||
|
|
import qualified Hedgehog.Range as Range
|
|||
|
|
import Nuthatch.Paths (encodeUserId)
|
|||
|
|
import Nuthatch.Types
|
|||
|
|
import Test.Tasty (TestTree, testGroup)
|
|||
|
|
import Test.Tasty.HUnit ((@?=), testCase)
|
|||
|
|
import Test.Tasty.Hedgehog (testProperty)
|
|||
|
|
|
|||
|
|
tests :: TestTree
|
|||
|
|
tests = testGroup "identities"
|
|||
|
|
[ testProperty "root labels parse back to the same root" propRootLabels
|
|||
|
|
, testProperty "mutation kind labels parse back to the same kind" propKindLabels
|
|||
|
|
, testCase "issuer and subject identity encoding remains stable" $
|
|||
|
|
encodeUserId "https://issuer.example" "subject-α"
|
|||
|
|
@?= UserId "e0240ab33521a1882fb647a79f7fd3c74c9b6348b29bdb14e572204517882859"
|
|||
|
|
, testProperty "issuer and subject inputs are separated" propUserIdentitySeparation
|
|||
|
|
]
|
|||
|
|
|
|||
|
|
propRootLabels :: Property
|
|||
|
|
propRootLabels = property $ do
|
|||
|
|
root <- forAll (Gen.element [Personal, Shared])
|
|||
|
|
parseRoot (rootLabel root) === Just root
|
|||
|
|
|
|||
|
|
propKindLabels :: Property
|
|||
|
|
propKindLabels = property $ do
|
|||
|
|
kind <- forAll (Gen.element [Put, Delete])
|
|||
|
|
parseKind (kindLabel kind) === Just kind
|
|||
|
|
|
|||
|
|
propUserIdentitySeparation :: Property
|
|||
|
|
propUserIdentitySeparation = property $ do
|
|||
|
|
issuer <- forAll genIdentityPart
|
|||
|
|
subject <- forAll genIdentityPart
|
|||
|
|
otherIssuer <- forAll (Gen.filter (/= issuer) genIdentityPart)
|
|||
|
|
other <- forAll (Gen.filter (/= subject) genIdentityPart)
|
|||
|
|
assert (encodeUserId issuer subject /= encodeUserId otherIssuer subject)
|
|||
|
|
assert (encodeUserId issuer subject /= encodeUserId issuer other)
|
|||
|
|
where
|
|||
|
|
genIdentityPart = Gen.text (Range.linear 1 32) Gen.alphaNum
|