|
1 | 1 | {-# LANGUAGE OverloadedStrings #-} |
| 2 | + |
2 | 3 | module Yesod.Paginator.WidgetsSpec |
3 | 4 | ( spec |
4 | | - ) |
5 | | -where |
| 5 | + ) where |
6 | 6 |
|
| 7 | +import Data.Functor ((<&>)) |
7 | 8 | import SpecHelper |
| 9 | +import Test.QuickCheck |
8 | 10 |
|
9 | 11 | spec :: Spec |
10 | | -spec = withApp $ do |
| 12 | +spec = do |
| 13 | + withApp $ do |
11 | 14 | describe "simple" $ it "works" $ do |
12 | 15 | get $ SimpleR 10 3 3 |
13 | 16 |
|
@@ -189,3 +192,42 @@ spec = withApp $ do |
189 | 192 | , "<li class=\"next disabled\"><a>»</a></li>" |
190 | 193 | , "</ul>" |
191 | 194 | ] |
| 195 | + |
| 196 | + it "inserts" $ do |
| 197 | + let paramName = PageParamName "p" |
| 198 | + pageNumber = 1 :: Int |
| 199 | + setPageParameters paramName pageNumber [] `shouldBe` [("p", "1")] |
| 200 | + |
| 201 | + it "updates" $ do |
| 202 | + let paramName = PageParamName "p" |
| 203 | + pageNumber = 1 :: Int |
| 204 | + setPageParameters paramName pageNumber [("p", "foo")] |
| 205 | + `shouldBe` [("p", "1")] |
| 206 | + |
| 207 | + it "doesn't remove not-ours elements" $ property $ \(Params paramName pageNumber params) -> do |
| 208 | + let outputKeys = |
| 209 | + fst <$> setPageParameters paramName pageNumber params |
| 210 | + inputKeys = fst <$> params |
| 211 | + in all (`elem` outputKeys) inputKeys |
| 212 | + |
| 213 | + it "doesn't add not-ours elements" $ property $ \(Params paramName pageNumber params) -> do |
| 214 | + let outputKeys = fst <$> setPageParameters paramName pageNumber params |
| 215 | + inputKeys = fst <$> params |
| 216 | + in all (`elem` (unPageParamName paramName : inputKeys)) outputKeys |
| 217 | + |
| 218 | +data Params = Params |
| 219 | + { paramsPageParamName :: PageParamName |
| 220 | + , paramsPageNumber :: Int |
| 221 | + , paramsParams :: [(Text, Text)] |
| 222 | + } |
| 223 | + deriving Show |
| 224 | + |
| 225 | +instance Arbitrary Params where |
| 226 | + arbitrary = do |
| 227 | + params <- listOf $ liftArbitrary2 genText genText |
| 228 | + pageNumber <- getPositive <$> arbitrary |
| 229 | + pageParamName <- PageParamName <$> genText |
| 230 | + pure $ Params pageParamName pageNumber params |
| 231 | + where |
| 232 | + genText :: Gen Text |
| 233 | + genText = listOf (choose ('a', 'z')) <&> pack |
0 commit comments