packages feed

ollama-haskell-0.2.1.0: test/Test/Ollama/Copy.hs

{-# LANGUAGE OverloadedStrings #-}

module Test.Ollama.Copy (tests) where

import Control.Monad (void)
import Data.Ollama.Common.Config (OllamaConfig (..), defaultOllamaConfig)
import Data.Ollama.Copy
import Data.Ollama.Delete (deleteModel)
import Test.Tasty
import Test.Tasty.HUnit

testCopyModelBasic :: TestTree
testCopyModelBasic = testCase "Copy model: basic functionality" $ do
  res <- copyModel "gemma3" "gemma3-test-copy" Nothing
  case res of
    Left _ -> return () -- Allow failure if source model doesn't exist
    Right () -> do
      assertBool "Copy should succeed" True
      void $ deleteModel "gemma3-test-copy" Nothing

testCopyModelWithConfig :: TestTree
testCopyModelWithConfig = testCase "Copy model: with custom config" $ do
  let config = Just $ defaultOllamaConfig {timeout = 30}
  res <- copyModel "gemma3" "gemma3-test-copy-config" config
  case res of
    Left _ -> return () -- Allow failure if source doesn't exist
    Right () -> do
      assertBool "Copy with config should work" True
      void $ deleteModel "gemma3-test-copy-config" Nothing

testCopyModelInvalidSource :: TestTree
testCopyModelInvalidSource = testCase "Copy model: invalid source should fail" $ do
  res <- copyModel "nonexistent-model-12345" "some-destination" Nothing
  case res of
    Left _ -> assertBool "Should fail with invalid source" True
    Right () -> assertFailure "Should not succeed with invalid source"

tests :: TestTree
tests =
  testGroup
    "Copy tests"
    [ testCopyModelBasic
    , testCopyModelWithConfig
    , testCopyModelInvalidSource
    ]