The database returns an array of key-value strings like `"k1=eq.hello world"`. Haskell URL-encodes the portion after the equal sign and joins them with `&`. Includes updates to tests in Feature.InsertSpec: The CompoundPK has been modified to have one Int and one String. We attempt to add a key with a String that has spaces and other special characters. This requires that the returned Location header is properly URL-encoded.
56 lines
1.4 KiB
Haskell
56 lines
1.4 KiB
Haskell
module TestTypes (
|
|
IncPK(..)
|
|
, CompoundPK(..)
|
|
-- , incFromList
|
|
-- , compoundFromList
|
|
) where
|
|
|
|
import qualified Data.Aeson as JSON
|
|
import Data.Aeson ((.:))
|
|
-- import Data.Maybe (fromJust)
|
|
import Control.Applicative
|
|
import Control.Monad (mzero)
|
|
|
|
import Prelude
|
|
|
|
data IncPK = IncPK {
|
|
incId :: Int
|
|
, incNullableStr :: Maybe String
|
|
, incStr :: String
|
|
, incInsert :: String
|
|
} deriving (Eq, Show)
|
|
|
|
instance JSON.FromJSON IncPK where
|
|
parseJSON (JSON.Object r) = IncPK <$>
|
|
r .: "id" <*>
|
|
r .: "nullable_string" <*>
|
|
r .: "non_nullable_string" <*>
|
|
r .: "inserted_at"
|
|
parseJSON _ = mzero
|
|
|
|
-- incFromList :: [(String, SqlValue)] -> IncPK
|
|
-- incFromList row = IncPK
|
|
-- (fromSql . fromJust $ lookup "id" row)
|
|
-- (fromSql . fromJust $ lookup "nullable_string" row)
|
|
-- (fromSql . fromJust $ lookup "non_nullable_string" row)
|
|
-- (fromSql . fromJust $ lookup "inserted_at" row)
|
|
|
|
data CompoundPK = CompoundPK {
|
|
compoundK1 :: Int
|
|
, compoundK2 :: String
|
|
, compoundExtra :: Maybe Int
|
|
} deriving (Eq, Show)
|
|
|
|
instance JSON.FromJSON CompoundPK where
|
|
parseJSON (JSON.Object r) = CompoundPK <$>
|
|
r .: "k1" <*>
|
|
r .: "k2" <*>
|
|
r .: "extra"
|
|
parseJSON _ = mzero
|
|
|
|
-- compoundFromList :: [(String, SqlValue)] -> CompoundPK
|
|
-- compoundFromList row = CompoundPK
|
|
-- (fromSql . fromJust $ lookup "k1" row)
|
|
-- (fromSql . fromJust $ lookup "k2" row)
|
|
-- (fromSql . fromJust $ lookup "extra" row)
|