{-# 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 ]