8. Mocking DataΒΆ
Writing a contract enables you to create a mock server or a client by just
writing the Arbitrary
instances for datatypes used in the contract.
Lets create a mock server for the contract mentioned in Quick start by writing arbitrary instances for our datatypes.
instance Arbitrary UserData where
arbitrary = UserData <$> arbitrary
<*> arbitrary
<*> arbitrary
instance Arbitrary UserToken where
arbitrary = UserToken <$> arbitrary
<*> arbitrary
instance Arbitrary Text where
arbitrary = elements ["Foo", "Bar", "Baz"]
Now we can create a Wai.Application
for our mock server as
mockApp :: Wai.Application
mockApp = mockServer serverSettings (MockServer mockServerSettings :: MockServer MyApiService)
mockServer
takes ServerSettings
and MockServer
as arguments.
MockServer
lets you decide what kind of mock data is to be returned
(ApiOut
, ApiError
or OtherError
). It returns ApiOut
(SuccessData
) by default.
Now you can run this Wai.Application
on some port to bring up your mock
server.
main :: IO ()
main = run 8000 mockApp
You can even mock the requests. To create a mock Request
for route User
declared in Quick start, we can write:
req <- mockClient (Res :: Resource GET User)
We can use this req
while calling client
function to make a
Request
.