baikai-0.3.0.0: test/InteractiveSpec.hs
module InteractiveSpec (tests) where
import Baikai.Interactive
import Baikai.Prelude
import System.Exit (ExitCode (..))
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit (testCase, (@?=))
tests :: TestTree
tests =
testGroup
"Baikai.Interactive"
[ requestDefaultTest,
providerRenderingTest,
codexSafetyRenderingTest,
resultConstructorTest
]
requestDefaultTest :: TestTree
requestDefaultTest =
testCase "interactiveLaunchRequest keeps optional launch settings empty" $ do
let req = interactiveLaunchRequest "start here"
req ^. #systemPrompt @?= Nothing
req ^. #userPrompt @?= "start here"
req ^. #modelId @?= Nothing
req ^. #workingDir @?= Nothing
req ^. #extraDirs @?= []
req ^. #safety @?= DefaultSafety
req ^. #extraArgs @?= []
providerRenderingTest :: TestTree
providerRenderingTest =
testCase "provider and scope values render to stable names" $ do
renderInteractiveProvider InteractiveClaude @?= "claude"
renderInteractiveProvider InteractiveCodex @?= "codex"
renderInteractiveScope InteractiveUserScope @?= "user"
renderInteractiveScope InteractiveProjectScope @?= "project"
codexSafetyRenderingTest :: TestTree
codexSafetyRenderingTest =
testCase "codex sandbox and approval values render to CLI-ready names" $ do
renderCodexSandboxMode CodexReadOnly @?= "read-only"
renderCodexSandboxMode CodexWorkspaceWrite @?= "workspace-write"
renderCodexSandboxMode CodexDangerFullAccess @?= "danger-full-access"
renderCodexApprovalPolicy CodexApprovalUntrusted @?= "untrusted"
renderCodexApprovalPolicy CodexApprovalOnFailure @?= "on-failure"
renderCodexApprovalPolicy CodexApprovalOnRequest @?= "on-request"
renderCodexApprovalPolicy CodexApprovalNever @?= "never"
resultConstructorTest :: TestTree
resultConstructorTest =
testCase "interactiveLaunchResult records provider identity and process status" $ do
let result = interactiveLaunchResult InteractiveCodex ExitSuccess
result ^. #provider @?= InteractiveCodex
result ^. #exitCode @?= ExitSuccess