module Happstack.Auth.Core.ProfileURL where
import Control.Applicative ((<$>))
import Control.Monad (msum)
import Data.Data (Data, Typeable)
import Happstack.Auth.Core.Auth (AuthId(..))
import Happstack.Auth.Core.Profile (UserId(..))
import Test.QuickCheck (Arbitrary(..), Property, arbitrary, property, oneof)
import Web.Routes
data ProfileURL
= P_SetPersonality UserId
| P_SetAuthId AuthId
| P_PickProfile
deriving (Eq, Ord, Read, Show, Data, Typeable)
instance Arbitrary ProfileURL where
arbitrary = oneof $ [ P_SetPersonality . UserId <$> arbitrary
, P_SetAuthId . AuthId <$> arbitrary
, return P_PickProfile
]
instance PathInfo ProfileURL where
toPathSegments (P_SetPersonality userId) = "set_personality" : toPathSegments userId
toPathSegments (P_SetAuthId authId) = "set_authid" : toPathSegments authId
toPathSegments P_PickProfile = ["pick_profile"]
fromPathSegments =
msum [ do segment "set_personality"
userId <- fromPathSegments
return (P_SetPersonality userId)
, do segment "set_authid"
authId <- fromPathSegments
return (P_SetAuthId authId)
, do segment "pick_profile"
return P_PickProfile
]
authUrlInverse :: Property
authUrlInverse =
property (pathInfoInverse_prop :: ProfileURL -> Bool)