-- | @Servant.QuickCheck@ provides utilities related to using QuickCheck over an API. -- Rather than specifying properties that individual handlers must satisfy, -- you can state properties that ought to hold true of the entire API. -- -- While the API must be described with @servant@ types, the server being -- tested itself need not be implemented with @servant-server@ (or indeed, -- written in Haskell). -- -- The documentation of the <#useful-preds Useful predicates> sections is -- meant to serve as a set of helpful pointers for learning more about best -- practices concerning REST APIs. module Servant.QuickCheck ( -- * Property testing serverSatisfies -- ** Predicates -- *** #useful-preds# Useful predicates -- | The predicates below are often useful. Some check RFC compliance; some are -- best practice, and some are useful to check that APIs follow in-house -- best-practices. Included in the documentation for each is a list of -- references to any relevant RFCs and other links, as well as what type of -- predicate it is (__RFC Compliance__, __Best Practice__, __Optional__). -- -- RFCs distinguish between the force of requirements (e.g. __MUST__ vs. -- __SHOULD__). __RFC Compliance__ includes any absolute requirements present -- in RFCs. The __Best Practices__ includes, in addition to RFC -- recommendations, recommendations found elsewhere or generally accepted. , not500 , notLongerThan , onlyJsonObjects , honoursAcceptHeader , notAllowedContainsAllowHeader , unauthorizedContainsWWWAuthenticate , getsHaveLastModifiedHeader , getsHaveCacheControlHeader , headsHaveCacheControlHeader , createContainsValidLocation -- * Html Predicates , htmlIncludesDoctype -- *** Predicate utilities and types , (<%>) , Predicates , ResponsePredicate(..) , RequestPredicate(..) -- * Equality testing , serversEqual -- ** Response equality -- | Often the normal equality of responses is not what we want. For example, -- if responses contain a @Date@ header with the time of the response, -- responses will fail to be equal even though they morally are. This datatype -- represents other means of checking equality -- *** Useful @ResponseEquality@s , bodyEquality , jsonEquality , allEquality -- ** Response equality type , ResponseEquality(..) -- * Test setup helpers -- | Helpers to setup and teardown @servant@ servers during tests. , withServantServer , withServantServerAndContext , defaultArgs -- ** Re-exports -- | Types and constructors from other packages that are generally needed for -- using @servant-quickcheck@. , BaseUrl(..) , Scheme(..) , Args(..) , Proxy(..) ) where import Data.Proxy (Proxy (..)) import Servant.Client (BaseUrl (..), Scheme (..)) import Servant.QuickCheck.Internal import Test.QuickCheck (Args (..), stdArgs) -- | QuickCheck @Args@ with 1000 rather than 100 test cases. -- -- /Since 0.0.0.0/ defaultArgs :: Args defaultArgs = stdArgs { maxSuccess = 1000 }