packages feed

restman-0.7.2.2: test/UISpec.hs

{-# language OverloadedStrings #-}
module UISpec (tests) where

import Data.Maybe (isNothing)

import Test.Tasty
import Test.Tasty.HUnit

import qualified Data.ByteString as BS
import qualified Data.CaseInsensitive as CI

import qualified Network.HTTP.Client as HC

import Brick.Widgets.Edit (getEditContents)
import Graphics.Vty.Image (imageWidth)

import HTTP.Client (Header, UseDefaultHeaders(..))
import Types (AppS(..))
import UI (mkInitialState)

tests :: TestTree
tests = testGroup "UI"
  [ mkInitialStateTests
  ]

mkInitialStateTests :: TestTree
mkInitialStateTests = testGroup "mkInitialState"
  [ testCase "focus starts at UrlEditor" $ do
      mgr <- HC.newManager HC.defaultManagerSettings
      let s = mkInitialState mgr "GET" ReplaceDefaultHeaders [] Nothing Nothing
      show (focus s) @?= "UrlEditor"
  , testCase "useDefaultHeaders is False for ReplaceDefaultHeaders" $ do
      mgr <- HC.newManager HC.defaultManagerSettings
      let s = mkInitialState mgr "GET" ReplaceDefaultHeaders [] Nothing Nothing
      useDefaultHeaders s @?= False
  , testCase "useDefaultHeaders is True for AppendCustomToDefaultHeaders" $ do
      mgr <- HC.newManager HC.defaultManagerSettings
      let s = mkInitialState mgr "GET" AppendCustomToDefaultHeaders [] Nothing Nothing
      useDefaultHeaders s @?= True
  , testCase "methodEditor contains the supplied method" $ do
      mgr <- HC.newManager HC.defaultManagerSettings
      let s = mkInitialState mgr "POST" ReplaceDefaultHeaders [] Nothing Nothing
      getEditContents (methodEditor s) @?= ["POST"]
  , testCase "urlEditor is empty when no URI is supplied" $ do
      mgr <- HC.newManager HC.defaultManagerSettings
      let s = mkInitialState mgr "GET" ReplaceDefaultHeaders [] Nothing Nothing
      getEditContents (urlEditor s) @?= [""]
  , testCase "urlEditor contains the supplied URI" $ do
      mgr <- HC.newManager HC.defaultManagerSettings
      let s = mkInitialState mgr "GET" ReplaceDefaultHeaders [] Nothing (Just "http://example.com")
      getEditContents (urlEditor s) @?= ["http://example.com"]
  , testCase "customHeaders starts empty" $ do
      mgr <- HC.newManager HC.defaultManagerSettings
      let s = mkInitialState mgr "GET" ReplaceDefaultHeaders [] Nothing Nothing
      customHeaders s @?= []
  , testCase "overlayState starts as Nothing" $ do
      mgr <- HC.newManager HC.defaultManagerSettings
      let s = mkInitialState mgr "GET" ReplaceDefaultHeaders [] Nothing Nothing
      assertBool "expected overlayState to be Nothing" (isNothing (overlayState s))
  , testCase "headerEditor starts as Nothing" $ do
      mgr <- HC.newManager HC.defaultManagerSettings
      let s = mkInitialState mgr "GET" ReplaceDefaultHeaders [] Nothing Nothing
      assertBool "expected headerEditor to be Nothing" (isNothing (headerEditor s))
  , testCase "payload is Nothing when not supplied" $ do
      mgr <- HC.newManager HC.defaultManagerSettings
      let s = mkInitialState mgr "GET" ReplaceDefaultHeaders [] Nothing Nothing
      assertBool "expected payload to be Nothing" (isNothing (payload s))
  , testCase "payload is preserved when supplied" $ do
      mgr <- HC.newManager HC.defaultManagerSettings
      let s = mkInitialState mgr "GET" ReplaceDefaultHeaders [] (Just "request body") Nothing
      payload s @?= Just "request body"
  , testCase "lastResponse starts as zero-width image" $ do
      mgr <- HC.newManager HC.defaultManagerSettings
      let s = mkInitialState mgr "GET" ReplaceDefaultHeaders [] Nothing Nothing
      imageWidth (lastResponse s) @?= 0
  , testCase "supplied headers are initially active" $ do
      mgr <- HC.newManager HC.defaultManagerSettings
      let hdr = (CI.mk ("X-Custom" :: BS.ByteString), "val" :: BS.ByteString)
          s = mkInitialState mgr "GET" ReplaceDefaultHeaders [hdr] Nothing Nothing
      customHeaders s @?= [(True, hdr)]
  , testCase "multiple supplied headers count is preserved" $ do
      mgr <- HC.newManager HC.defaultManagerSettings
      let hdrs :: [Header]
          hdrs = [(CI.mk "X-A", "1"), (CI.mk "X-B", "2")]
          s = mkInitialState mgr "GET" ReplaceDefaultHeaders hdrs Nothing Nothing
      length (customHeaders s) @?= 2
  ]