packages feed

drone-1.0.1: test/Drone/Endpoint/UserSpec.hs

{-# LANGUAGE OverloadedLabels  #-}
{-# LANGUAGE OverloadedStrings #-}

module Drone.Endpoint.UserSpec
    ( spec
    ) where

import           Drone.Endpoints.User
import qualified Drone.Test.Client    as Test
import           Drone.Test.Fixture
import           Lens.Micro           ((^.))
import           Network.HTTP.Req     (defaultHttpConfig, responseBody, runReq)
import           Test.Hspec           (Spec, describe, it, shouldBe)

spec :: Fixtures -> Spec
spec golden = do
  describe "getSelf: endpoint GET /api/user" $
    it "should return User as response body" $ do
      response <- runReq defaultHttpConfig $ getSelf Test.client
      (responseBody response) `shouldBe` golden ^. #user
  describe "getUser: endpoint GET /api/user/%s" $
    it "should return User as response body" $ do
      response <- runReq defaultHttpConfig $ getUser Test.client "octocat"
      (responseBody response) `shouldBe` golden ^. #user
  describe "getUsers: endpoint GET /api/users" $
    it "should return [User] as response body" $ do
      response <- runReq defaultHttpConfig $ getUsers Test.client
      (responseBody response) `shouldBe` golden ^. #users
  describe "createUser: endpoint GET /api/users" $
    it "should return [User] as response body" $ do
      response <- runReq defaultHttpConfig $ createUser Test.client (golden ^. #user)
      (responseBody response) `shouldBe` golden ^. #user
  describe "updateUser: endpoint GET /api/user/%s" $
    it "should return User as response body" $ do
      response <- runReq defaultHttpConfig $ updateUser Test.client (golden ^. #user)
      (responseBody response) `shouldBe` golden ^. #user
  describe "deleteUser: endpoint GET /api/user/%s" $
    it "should return User as response body" $ do
      response <- runReq defaultHttpConfig $ deleteUser Test.client "octocat"
      (responseBody response) `shouldBe` ()