fix: fix tests
This commit is contained in:
parent
3391904cff
commit
a671937868
@ -136,6 +136,7 @@ dependencies:
|
|||||||
- constraints
|
- constraints
|
||||||
- memory
|
- memory
|
||||||
- pqueue
|
- pqueue
|
||||||
|
- deepseq
|
||||||
|
|
||||||
other-extensions:
|
other-extensions:
|
||||||
- GeneralizedNewtypeDeriving
|
- GeneralizedNewtypeDeriving
|
||||||
|
|||||||
19
src/Audit.hs
19
src/Audit.hs
@ -20,6 +20,9 @@ import qualified Network.Wai as Wai
|
|||||||
import qualified Network.Socket as Wai
|
import qualified Network.Socket as Wai
|
||||||
|
|
||||||
import qualified Net.IP as IP
|
import qualified Net.IP as IP
|
||||||
|
import qualified Net.IPv6 as IPv6
|
||||||
|
|
||||||
|
import Control.Exception (ErrorCall(..), evaluate)
|
||||||
|
|
||||||
{-# ANN module ("HLint: ignore Use newtype instead of data" :: String) #-}
|
{-# ANN module ("HLint: ignore Use newtype instead of data" :: String) #-}
|
||||||
|
|
||||||
@ -30,18 +33,19 @@ data AuditRemoteException
|
|||||||
instance Exception AuditRemoteException
|
instance Exception AuditRemoteException
|
||||||
|
|
||||||
|
|
||||||
getRemote :: (MonadHandler m, MonadThrow m, HasAppSettings (HandlerSite m)) => m IP
|
getRemote :: forall m. (MonadHandler m, MonadCatch m, HasAppSettings (HandlerSite m)) => m IP
|
||||||
getRemote = do
|
getRemote = handle testHandler $ do
|
||||||
ipFromHeader <- getsYesod $ view _appIpFromHeader
|
ipFromHeader <- getsYesod $ view _appIpFromHeader
|
||||||
wai <- waiRequest
|
wai <- waiRequest
|
||||||
|
|
||||||
if
|
ip <- if
|
||||||
| ipFromHeader
|
| ipFromHeader
|
||||||
, Just ip <- byHeader wai
|
, Just ip <- byHeader wai
|
||||||
-> return ip
|
-> return ip
|
||||||
| otherwise
|
| otherwise
|
||||||
-> byRemoteHost wai
|
-> byRemoteHost wai
|
||||||
|
|
||||||
|
liftIO $ evaluate $!! ip
|
||||||
where
|
where
|
||||||
byHeader wai = listToMaybe $ do
|
byHeader wai = listToMaybe $ do
|
||||||
(h, v) <- Wai.requestHeaders wai
|
(h, v) <- Wai.requestHeaders wai
|
||||||
@ -58,6 +62,15 @@ getRemote = do
|
|||||||
in return $ IP.ipv6 w1 w2 w3 w4 w5 w6 w7 w8
|
in return $ IP.ipv6 w1 w2 w3 w4 w5 w6 w7 w8
|
||||||
_other -> throwM ARUnsupportedSocketKind
|
_other -> throwM ARUnsupportedSocketKind
|
||||||
|
|
||||||
|
testHandler :: ErrorCall -> m IP
|
||||||
|
-- ^ `Yesod.Core.Unsafe.runFakeHandler` does not set a `Wai.remoteHost`
|
||||||
|
--
|
||||||
|
-- We catch only the specific error call used by
|
||||||
|
-- `Yesod.Core.Unsafe.runFakeHandler` and replace it with `IPv6.any` as a
|
||||||
|
-- placeholder value for testing.
|
||||||
|
testHandler (ErrorCall "runFakeHandler-remoteHost") = return $ IP.fromIPv6 IPv6.any
|
||||||
|
testHandler err = throwM err
|
||||||
|
|
||||||
|
|
||||||
data AuditException
|
data AuditException
|
||||||
= AuditRemoteException AuditRemoteException
|
= AuditRemoteException AuditRemoteException
|
||||||
|
|||||||
@ -356,7 +356,7 @@ postMDelR tid ssh csh mnm = do
|
|||||||
, drSuccessMessage = SomeMessage $ MsgMaterialDeleted mnm
|
, drSuccessMessage = SomeMessage $ MsgMaterialDeleted mnm
|
||||||
, drSuccess = SomeRoute $ CourseR tid ssh csh MaterialListR
|
, drSuccess = SomeRoute $ CourseR tid ssh csh MaterialListR
|
||||||
, drAbort = SomeRoute $ CourseR tid ssh csh $ MaterialR mnm MShowR
|
, drAbort = SomeRoute $ CourseR tid ssh csh $ MaterialR mnm MShowR
|
||||||
, drDelete = \_ -> id -- TODO: audit
|
, drDelete = const id -- TODO: audit
|
||||||
}
|
}
|
||||||
|
|
||||||
-- | Serve all material-files
|
-- | Serve all material-files
|
||||||
|
|||||||
@ -24,5 +24,5 @@ courseDeleteRoute drRecords = DeleteRoute
|
|||||||
, drSuccessMessage = SomeMessage MsgCourseDeleted
|
, drSuccessMessage = SomeMessage MsgCourseDeleted
|
||||||
, drAbort = error "drAbort undefined"
|
, drAbort = error "drAbort undefined"
|
||||||
, drSuccess = error "drSuccess undefined"
|
, drSuccess = error "drSuccess undefined"
|
||||||
, drDelete = \_ -> id -- TODO: audit
|
, drDelete = const id -- TODO: audit
|
||||||
}
|
}
|
||||||
|
|||||||
@ -79,5 +79,5 @@ sheetDeleteRoute drRecords = DeleteRoute
|
|||||||
, drSuccessMessage = SomeMessage MsgSheetDeleted
|
, drSuccessMessage = SomeMessage MsgSheetDeleted
|
||||||
, drAbort = error "drAbort undefined"
|
, drAbort = error "drAbort undefined"
|
||||||
, drSuccess = error "drSuccess undefined"
|
, drSuccess = error "drSuccess undefined"
|
||||||
, drDelete = \_ -> id -- TODO: audit
|
, drDelete = const id -- TODO: audit
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,6 +12,13 @@ import Database.Persist.Sql
|
|||||||
|
|
||||||
import qualified Data.Text.Encoding as Text
|
import qualified Data.Text.Encoding as Text
|
||||||
|
|
||||||
|
import Control.DeepSeq (NFData)
|
||||||
|
|
||||||
|
import Net.IPv6.Instances ()
|
||||||
|
|
||||||
|
|
||||||
|
deriving instance Generic IP
|
||||||
|
|
||||||
|
|
||||||
instance PersistField IP where
|
instance PersistField IP where
|
||||||
toPersistValue = PersistDbSpecific . encodeUtf8 . IP.encode
|
toPersistValue = PersistDbSpecific . encodeUtf8 . IP.encode
|
||||||
@ -21,3 +28,5 @@ instance PersistField IP where
|
|||||||
fromPersistValue _ = Left "IP-address values must be converted from PersistDbSpecific, PersistText, or PersistByteString"
|
fromPersistValue _ = Left "IP-address values must be converted from PersistDbSpecific, PersistText, or PersistByteString"
|
||||||
instance PersistFieldSql IP where
|
instance PersistFieldSql IP where
|
||||||
sqlType _ = SqlOther "inet"
|
sqlType _ = SqlOther "inet"
|
||||||
|
|
||||||
|
instance NFData IP
|
||||||
|
|||||||
16
src/Net/IPv6/Instances.hs
Normal file
16
src/Net/IPv6/Instances.hs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
||||||
|
module Net.IPv6.Instances
|
||||||
|
(
|
||||||
|
) where
|
||||||
|
|
||||||
|
import ClassyPrelude
|
||||||
|
|
||||||
|
import Net.IPv6 (IPv6)
|
||||||
|
import qualified Net.IPv6 as IPv6
|
||||||
|
|
||||||
|
import Control.DeepSeq (NFData)
|
||||||
|
|
||||||
|
|
||||||
|
deriving instance Generic IPv6
|
||||||
|
|
||||||
|
instance NFData IPv6
|
||||||
Reference in New Issue
Block a user