112 lines
3.8 KiB
Haskell
112 lines
3.8 KiB
Haskell
module Feature.Query.ServerTimingSpec where
|
|
|
|
import Network.Wai (Application)
|
|
|
|
import Network.HTTP.Types
|
|
import Test.Hspec
|
|
import Test.Hspec.Wai
|
|
import Test.Hspec.Wai.JSON
|
|
|
|
import Protolude hiding (get)
|
|
import SpecHelper
|
|
|
|
spec :: SpecWith ((), Application)
|
|
spec =
|
|
describe "Show Duration on Server-Timing header" $ do
|
|
|
|
context "responds with Server-Timing header" $ do
|
|
it "works with get request" $ do
|
|
request methodGet "/organizations?id=eq.6"
|
|
[]
|
|
""
|
|
`shouldRespondWith`
|
|
[json|[{"id":6,"name":"Oscorp","referee":3,"auditor":4,"manager_id":6}]|]
|
|
{ matchStatus = 200
|
|
, matchHeaders = matchContentTypeJson : map matchServerTimingHasTiming ["jwt", "parse", "plan", "transaction", "response"]
|
|
}
|
|
|
|
it "works with post request" $
|
|
request methodPost "/organizations?select=*"
|
|
[("Prefer","return=representation")]
|
|
[json|{"id":7,"name":"John","referee":null,"auditor":null,"manager_id":6}|]
|
|
`shouldRespondWith`
|
|
[json|[{"id":7,"name":"John","referee":null,"auditor":null,"manager_id":6}]|]
|
|
{ matchStatus = 201
|
|
, matchHeaders = matchContentTypeJson : map matchServerTimingHasTiming ["jwt", "parse", "plan", "transaction", "response"]
|
|
}
|
|
|
|
it "works with patch request" $
|
|
request methodPatch "/no_pk?b=eq.0" mempty
|
|
[json| { b: "1" } |]
|
|
`shouldRespondWith`
|
|
""
|
|
{ matchStatus = 204
|
|
, matchHeaders = matchHeaderAbsent hContentType : map matchServerTimingHasTiming ["jwt", "parse", "plan", "transaction", "response"]
|
|
}
|
|
|
|
it "works with put request" $
|
|
request methodPut "/tiobe_pls?name=eq.Python"
|
|
[("Prefer", "return=representation")]
|
|
[json| [ { "name": "Python", "rank": 19 } ]|]
|
|
`shouldRespondWith`
|
|
[json| [ { "name": "Python", "rank": 19 } ]|]
|
|
{ matchStatus = 200
|
|
, matchHeaders = map matchServerTimingHasTiming ["jwt", "parse", "plan", "transaction", "response"]
|
|
}
|
|
|
|
it "works with delete request" $
|
|
request methodDelete "/items?id=eq.1"
|
|
[]
|
|
""
|
|
`shouldRespondWith`
|
|
""
|
|
{ matchStatus = 204
|
|
, matchHeaders = matchHeaderAbsent hContentType : map matchServerTimingHasTiming ["jwt", "parse", "plan", "transaction", "response"]
|
|
}
|
|
|
|
it "works with rpc call" $
|
|
request methodPost "/rpc/ret_point_overloaded"
|
|
[]
|
|
[json|{"x": 1, "y": 2}|]
|
|
`shouldRespondWith`
|
|
[json|{"x": 1, "y": 2}|]
|
|
{ matchStatus = 200
|
|
, matchHeaders = map matchServerTimingHasTiming ["jwt", "parse", "plan", "transaction", "response"]
|
|
}
|
|
|
|
it "works with root spec" $
|
|
request methodHead "/"
|
|
[]
|
|
""
|
|
`shouldRespondWith`
|
|
""
|
|
{ matchStatus = 200
|
|
, matchHeaders = map matchServerTimingHasTiming ["jwt", "parse", "plan", "transaction", "response"]
|
|
}
|
|
|
|
it "works with OPTIONS method" $ do
|
|
request methodOptions "/organizations"
|
|
[]
|
|
""
|
|
`shouldRespondWith`
|
|
""
|
|
{ matchStatus = 200
|
|
, matchHeaders = map matchServerTimingHasTiming ["jwt", "parse", "response"]
|
|
}
|
|
request methodOptions "/rpc/getallprojects"
|
|
[]
|
|
""
|
|
`shouldRespondWith`
|
|
""
|
|
{ matchStatus = 200
|
|
, matchHeaders = map matchServerTimingHasTiming ["jwt", "parse", "response"]
|
|
}
|
|
request methodOptions "/"
|
|
[]
|
|
""
|
|
`shouldRespondWith`
|
|
""
|
|
{ matchStatus = 200
|
|
, matchHeaders = map matchServerTimingHasTiming ["jwt", "parse", "response"]
|
|
}
|