packages feed

snap-extras 0.12.1.0 → 0.12.1.1

raw patch · 4 files changed

+112/−2 lines, 4 filesdep ~blaze-htmlPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: blaze-html

API changes (from Hackage documentation)

Files

changelog.md view
@@ -1,3 +1,6 @@+0.12.1.1+* Add missing test suite files to package.+ 0.12.1.0 * Backwards compatibility fixes for versions of base < 4.8. 
snap-extras.cabal view
@@ -1,5 +1,5 @@ Name:                snap-extras-Version:             0.12.1.0+Version:             0.12.1.1 Synopsis:            A collection of useful helpers and utilities for Snap web applications. Description:         This package contains a collection of helper functions                      that come in handy in most practical, real-world@@ -51,7 +51,7 @@       aeson                    >= 0.6   && < 1.2     , base                     >= 4     && < 5     , blaze-builder            >= 0.3   && < 0.5-    , blaze-html               >= 0.6   && < 0.9+    , blaze-html               >= 0.6   && < 0.10     , bytestring               >= 0.9.1 && < 0.11     , case-insensitive         >= 1.0   && < 1.3     , configurator             >= 0.2   && < 0.4@@ -114,6 +114,9 @@   Main-Is: Main.hs   Ghc-Options: -threaded -rtsopts -O0   Default-Language: Haskell2010+  Other-Modules:+    Snap.Extras.Tests.Arbitrary+    Snap.Extras.Tests.MethodOverride   Hs-Source-Dirs:     test/src   Build-Depends:
+ test/src/Snap/Extras/Tests/Arbitrary.hs view
@@ -0,0 +1,29 @@+module Snap.Extras.Tests.Arbitrary where++-------------------------------------------------------------------------------+import           Control.Applicative+import           Data.Char+import           Data.ByteString.Char8                  (ByteString, pack)+import           Snap.Core+-------------------------------------------------------------------------------+import           Test.QuickCheck+-------------------------------------------------------------------------------+++instance Arbitrary Method where+  arbitrary = oneof [ pure HEAD+                    , pure POST+                    , pure PUT+                    , pure DELETE+                    , pure TRACE+                    , pure OPTIONS+                    , pure CONNECT+                    , pure PATCH+                    , Method <$> (pack <$> cleanString)+                    ]+    where+      cleanString = do+        NonEmpty s <- arbitrary+        return s++
+ test/src/Snap/Extras/Tests/MethodOverride.hs view
@@ -0,0 +1,75 @@+{-# LANGUAGE OverloadedStrings #-}+module Snap.Extras.Tests.MethodOverride+    ( methodOverrideTests+    ) where++-------------------------------------------------------------------------------+import           Control.Applicative+import           Data.ByteString             (ByteString)+import qualified Data.ByteString.Char8       as B+import           Data.Char+import qualified Data.Map                    as M+import           Test.QuickCheck+import           Test.QuickCheck.Monadic+import           Test.Tasty+import           Test.Tasty.QuickCheck+-------------------------------------------------------------------------------+import           Snap.Core+import           Snap.Extras.MethodOverride+import           Snap.Extras.Tests.Arbitrary ()+import           Snap.Extras.TextUtils+import           Snap.Test+-------------------------------------------------------------------------------++methodOverrideTests = testGroup "Snap.Extras.MethodOverride"+    [ testProperty "leaves method alone with no override" $ \meth ->+       monadicIO $ assertOverride meth meth Nothing+    , testProperty "leaves non-POST alone even with override" $ \(NonPost meth) override ->+        monadicIO $ assertOverride  meth meth (Just $ showMethod override)+    , testProperty "leaves non-POST alone even with override and lowercased param" $ \(NonPost meth) override ->+        monadicIO $ assertOverride  meth meth (Just $ showDCMethod override)+    , testProperty "overrides POST" $ \meth ->+        monadicIO $ assertOverride meth POST (Just $ showMethod meth)+    , testProperty "overrides POST with lowercased method" $ \meth ->+         monadicIO $ assertOverride (lowerMeth meth) POST (Just $ showDCMethod meth)+    ]+++-------------------------------------------------------------------------------+newtype NonPost = NonPost Method deriving (Show)++instance Arbitrary NonPost where+  arbitrary = NonPost <$> (arbitrary `suchThat` notPost)+    where+      notPost (POST) = False+      notPost _ = True++-------------------------------------------------------------------------------+showDCMethod = B.map toLower . showMethod++-------------------------------------------------------------------------------+showMethod :: Method -> ByteString+showMethod (Method m) = m+showMethod m          = showBS m+++-------------------------------------------------------------------------------+lowerMeth (Method m) = Method (B.map toLower m)+lowerMeth m          = m+++-------------------------------------------------------------------------------+assertOverride expectedMeth givenMeth override = do+    actualMeth <- run $ evalHandler builder app+    assert $ expectedMeth == actualMeth+  where+    builder = do+      setRequestType $ RequestWithRawBody givenMeth ""+      case override of+        Just m -> setQueryString $ M.singleton "_method" [m]+        _      -> return ()+++-------------------------------------------------------------------------------+app = handleMethodOverride (getsRequest rqMethod)+