Separate tests into groups

Also test content of insert redirect
This commit is contained in:
Joe Nelson
2014-08-25 16:53:44 -07:00
parent 731260e9ee
commit f34f8d8c35
3 changed files with 114 additions and 36 deletions
+49
View File
@@ -0,0 +1,49 @@
{-# LANGUAGE OverloadedStrings, QuasiQuotes #-}
module Feature.InsertSpec where
import Test.Hspec
import Test.Hspec.Wai
import Test.Hspec.Wai.JSON
import Network.Wai.Test (SResponse(simpleBody))
import SpecHelper
import qualified Data.Aeson as JSON
import Data.Aeson ((.:))
import Data.Maybe (fromJust)
import Control.Applicative ((<$>), (<*>))
import Control.Monad (mzero)
data IncPK = IncPK {
incId :: Int
, incNullableStr :: Maybe String
, incStr :: String
, incInsert :: String
} deriving (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
spec :: Spec
spec = around appWithFixture $
describe "Posting new record" $
context "with no pk supplied" $
context "into a table with auto-incrementing pk" $
it "succeeds with 201 and link" $ do
post "/auto_incrementing_pk" [json| { "non_nullable_string":"not null"} |]
`shouldRespondWith` ResponseMatcher {
matchBody = Nothing,
matchStatus = 201,
matchHeaders = [("Location", "/auto_incrementing_pk?id=eq.1")]
}
r <- get "/auto_incrementing_pk?id=eq.1"
let [record] = fromJust (JSON.decode $ simpleBody r :: Maybe [IncPK])
liftIO $ do
incStr record `shouldBe` "not null"
incNullableStr record `shouldBe` Nothing
-36
View File
@@ -9,26 +9,6 @@ import SpecHelper
import Network.HTTP.Types
import qualified Data.Aeson as JSON
import Data.Aeson ((.:))
import Control.Applicative ((<$>), (<*>))
import Control.Monad (mzero)
data IncPK = IncPK {
incId :: Int
, incNullableStr :: Maybe String
, incStr :: String
, incInsert :: String
} deriving (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
spec :: Spec
spec = around appWithFixture $ do
describe "GET /" $ do
@@ -92,19 +72,3 @@ spec = around appWithFixture $ do
context "with response under server size limit" $
it "returns whole range with status 200" $
get "/auto_incrementing_pk" `shouldRespondWith` 206
describe "Posting new record" $
context "into a table with auto-incrementing pk" $ do
it "does not require pk in the payload" $
post "/auto_incrementing_pk" [json|
{ "non_nullable_string":"not null"} |]
`shouldRespondWith` 201
it "links to the created resource" $
post "/auto_incrementing_pk" [json|
{ "non_nullable_string":"not null"} |]
`shouldRespondWith` ResponseMatcher {
matchBody = Nothing,
matchStatus = 201,
matchHeaders = [("Location", "/auto_incrementing_pk?id=eq.2")]
}
+65
View File
@@ -0,0 +1,65 @@
{-# LANGUAGE OverloadedStrings, QuasiQuotes #-}
module Feature.StructureSpec where
import Test.Hspec
import Test.Hspec.Wai
import Test.Hspec.Wai.JSON
import SpecHelper
import Network.HTTP.Types
spec :: Spec
spec = around appWithFixture $ do
describe "GET /" $
it "lists views in schema" $
get "/" `shouldRespondWith`
[json| [{"schema":"1","name":"auto_incrementing_pk","insertable":true}] |]
{matchStatus = 200}
describe "Table info" $
it "is available with OPTIONS verb" $
-- {{{ big json object
request methodOptions "/auto_incrementing_pk" "" `shouldRespondWith` [json|
{
"pkey":["id"],
"columns":{
"inserted_at":{
"precision":null,
"updatable":true,
"schema":"1",
"name":"inserted_at",
"type":"timestamp with time zone",
"maxLen":null,
"nullable":true,
"position":4},
"id":{
"precision":32,
"updatable":true,
"schema":"1",
"name":"id",
"type":"integer",
"maxLen":null,
"nullable":false,
"position":1},
"non_nullable_string":{
"precision":null,
"updatable":true,
"schema":"1",
"name":"non_nullable_string",
"type":"character varying",
"maxLen":null,
"nullable":false,
"position":3},
"nullable_string":{
"precision":null,
"updatable":true,
"schema":"1",
"name":"nullable_string",
"type":"character varying",
"maxLen":null,
"nullable":true,
"position":2}}
}
|]
-- }}}