IPv6DB-0.1.0: tests/hspec.hs
{-# LANGUAGE OverloadedStrings #-}
import Data.Aeson
import Network.HTTP.Client
import Network.HTTP.Types.Status (statusCode)
import Data.Vector
import Test.Hspec
import Network.IPv6DB.Types
main :: IO ()
main = hspec $ do
describe "POST /ipv6db/v1/list/test0/addresses/abcd::1234" $
it "Creates the resource" $ do
mngr <- newManager defaultManagerSettings
initReq <- parseRequest "http://localhost:4446/ipv6db/v1/list/test0/addresses/abcd::1234"
let req = initReq
{ method = "POST"
, requestBody =
RequestBodyLBS $
encode (object [("ttl", Null),("source", object [("data",String "A B C D")])]) }
res <- httpLbs req mngr
statusCode (responseStatus res) `shouldBe` 204
describe "PUT /ipv6db/v1/list/test0/addresses/abcd::1234" $
it "Updates the resource" $ do
mngr <- newManager defaultManagerSettings
initReq <- parseRequest "http://localhost:4446/ipv6db/v1/list/test0/addresses/abcd::1234"
let req = initReq
{ method = "PUT"
, requestBody =
RequestBodyLBS $
encode (object [("ttl", Null),("source", object [("data",String "E F G H")])])
}
res <- httpLbs req mngr
statusCode (responseStatus res) `shouldBe` 204
describe "GET /ipv6db/v1/list/test0/addresses/abcd::1234" $
it "Gets the resource" $ do
mngr <- newManager defaultManagerSettings
req <- parseRequest "http://localhost:4446/ipv6db/v1/list/test0/addresses/abcd::1234"
res <- httpLbs req mngr
responseBody res `shouldBe` "{\"ttl\":null,\"list\":\"test0\",\"address\":\"abcd::1234\",\"source\":{\"data\":\"E F G H\"}}"
describe "DELETE /ipv6db/v1/list/test0/addresses/abcd::1234" $
it "Deletes the resource" $ do
mngr <- newManager defaultManagerSettings
initReq <- parseRequest "http://localhost:4446/ipv6db/v1/list/test0/addresses/abcd::1234"
let req = initReq { method = "DELETE" }
res <- httpLbs req mngr
statusCode (responseStatus res) `shouldBe` 204
describe "POST /ipv6db/v1/list/test0/addresses" $
it "Creates resources for the given list" $ do
mngr <- newManager defaultManagerSettings
initReq <- parseRequest "http://localhost:4446/ipv6db/v1/list/test0/addresses"
let req = initReq
{ method = "POST"
, requestBody =
RequestBodyLBS $
encode $
Array $
fromList
[ object
[ ("address","abcd::1234")
, ("ttl", Null)
, ("source", object [ ("data", String "E F G H") ])
]
, object
[ ("address","abcd::5678")
, ("ttl", Null)
, ("source", object [ ("data", String "I J K L") ])
]
]
}
res <- httpLbs req mngr
statusCode (responseStatus res) `shouldBe` 204
describe "PUT /ipv6db/v1/list/test0/addresses" $
it "Updates the resources that belong to the given list" $ do
mngr <- newManager defaultManagerSettings
initReq <- parseRequest "http://localhost:4446/ipv6db/v1/list/test0/addresses"
let req = initReq
{ method = "PUT"
, requestBody =
RequestBodyLBS $
encode $
Array $
fromList
[ object
[ ("address","abcd::1234")
, ("ttl", Null)
, ("source", object [ ("data", String "H G F E") ])
]
, object
[ ("address","abcd::5678")
, ("ttl", Null)
, ("source", object [ ("data", String "L K J I") ])
]
]
}
res <- httpLbs req mngr
statusCode (responseStatus res) `shouldBe` 204
describe "GET /ipv6db/v1/list/test0/addresses" $
it "Gets the resources that belong to the given list" $ do
mngr <- newManager defaultManagerSettings
initReq <- parseRequest "http://localhost:4446/ipv6db/v1/list/test0/addresses"
let req = initReq
{ requestBody =
RequestBodyLBS $
encode $
Array $
fromList
[ String "abcd::1234"
, String "abcd::5678"
]
}
res <- httpLbs req mngr
responseBody res `shouldBe` "[{\"ttl\":null,\"list\":\"test0\",\"address\":\"abcd::1234\",\"source\":{\"data\":\"H G F E\"}},{\"ttl\":null,\"list\":\"test0\",\"address\":\"abcd::5678\",\"source\":{\"data\":\"L K J I\"}}]"
describe "DELETE /ipv6db/v1/list/test0/addresses" $
it "Deletes the resources that belong to the given list" $ do
mngr <- newManager defaultManagerSettings
initReq <- parseRequest "http://localhost:4446/ipv6db/v1/list/test0/addresses"
let req = initReq
{ method = "DELETE"
, requestBody =
RequestBodyLBS $
encode $
Array $
fromList
[ String "abcd::1234"
, String "abcd::5678"
]
}
res <- httpLbs req mngr
statusCode (responseStatus res) `shouldBe` 204
describe "POST /ipv6db/v1/batch" $
it "Creates many resources on different lists" $ do
mngr <- newManager defaultManagerSettings
initReq <- parseRequest "http://localhost:4446/ipv6db/v1/batch"
let req = initReq
{ method = "POST"
, requestBody =
RequestBodyLBS $
encode $
Array $
fromList
[ object
[ ("list","test1")
, ("address","abcd::1234")
, ("ttl", Null)
, ("source", object [ ("data", String "E F G H") ])
]
, object
[ ("list","test2")
, ("address","abcd::5678")
, ("ttl", Null)
, ("source", object [ ("data", String "I J K L") ])
]
]
}
res <- httpLbs req mngr
statusCode (responseStatus res) `shouldBe` 204
describe "PUT /ipv6db/v1/batch" $
it "Updates many resources on different lists" $ do
mngr <- newManager defaultManagerSettings
initReq <- parseRequest "http://localhost:4446/ipv6db/v1/batch"
let req = initReq
{ method = "PUT"
, requestBody =
RequestBodyLBS $
encode $
Array $
fromList
[ object
[ ("list", "test1")
, ("address", "abcd::1234")
, ("ttl", Null)
, ("source", object [ ("data", String "1 2 3 4") ])
]
, object
[ ("list", "test2")
, ("address", "abcd::5678")
, ("ttl", Null)
, ("source", object [ ("data", String "5 6 7 8") ])
]
]
}
res <- httpLbs req mngr
statusCode (responseStatus res) `shouldBe` 204
describe "GET /ipv6db/v1/batch" $
it "Gets many resources on different lists" $ do
mngr <- newManager defaultManagerSettings
initReq <- parseRequest "http://localhost:4446/ipv6db/v1/batch"
let req = initReq
{ requestBody =
RequestBodyLBS $
encode $
Array $
fromList
[ object
[ ("list", "test1")
, ("address", "abcd::1234")
]
, object
[ ("list", "test2")
, ("address", "abcd::5678")
]
]
}
res <- httpLbs req mngr
responseBody res `shouldBe` "[{\"ttl\":null,\"list\":\"test1\",\"address\":\"abcd::1234\",\"source\":{\"data\":\"1 2 3 4\"}},{\"ttl\":null,\"list\":\"test2\",\"address\":\"abcd::5678\",\"source\":{\"data\":\"5 6 7 8\"}}]"
describe "DELETE /ipv6db/v1/batch" $
it "Deletes many resources on different lists" $ do
mngr <- newManager defaultManagerSettings
initReq <- parseRequest "http://localhost:4446/ipv6db/v1/batch"
let req = initReq
{ method = "DELETE"
, requestBody =
RequestBodyLBS $
encode $
Array $
fromList
[ object
[ ("list", "test1")
, ("address", "abcd::1234")
]
, object
[ ("list", "test2")
, ("address", "abcd::5678")
]
]
}
res <- httpLbs req mngr
statusCode (responseStatus res) `shouldBe` 204