{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} module Ldap.Client.BindSpec (spec) where #if __GLASGOW_HASKELL__ < 710 import Data.Monoid (mempty) #endif import Test.Hspec import qualified Ldap.Asn1.Type as Ldap.Type import Ldap.Client as Ldap import SpecHelper (locally) spec :: Spec spec = do it "binds as ‘admin’" $ do res <- locally $ \l -> Ldap.bind l (Dn "cn=admin") (Password "secret") res `shouldBe` Right () it "tries to bind as ‘admin’ with the wrong password, unsuccessfully" $ do res <- locally $ \l -> Ldap.bind l (Dn "cn=admin") (Password "public") res `shouldBe` Left (Ldap.ResponseError (Ldap.ResponseErrorCode (Ldap.Type.BindRequest 3 (Ldap.Type.LdapDn (Ldap.Type.LdapString "cn=admin")) (Ldap.Type.Simple "public")) Ldap.InvalidCredentials (Dn "cn=admin") "InvalidCredentialsError")) it "binds as ‘pikachu’" $ do res <- locally $ \l -> do Ldap.bind l (Dn "cn=admin") (Password "secret") [Ldap.SearchEntry udn _] <- Ldap.search l (Dn "o=localhost") mempty (Attr "cn" := "pikachu") [] Ldap.bind l udn (Password "i-choose-you") res `shouldBe` Right ()