module Ribosome.Test.Unit(
  unitSpec,
  tempDir,
  tempFile,
  uPrefix,
  fixture,
) where

import Control.Monad.IO.Class (MonadIO)
import System.FilePath (takeDirectory, takeFileName, (</>))
import Neovim (Neovim)
import Ribosome.Data.Ribo (Ribo)
import Ribosome.Test.Embed (TestConfig(..), setupPluginEnv, unsafeEmbeddedSpec)
import qualified Ribosome.Test.File as F (tempDir, fixture)

uPrefix :: String
uPrefix = "u"

uSpec :: TestConfig -> Neovim env () -> Neovim env ()
uSpec conf spec = do
  setupPluginEnv conf
  spec

unitSpec :: TestConfig -> e -> Ribo e () -> IO ()
unitSpec =
  unsafeEmbeddedSpec uSpec

tempDir :: FilePath -> Neovim e FilePath
tempDir = F.tempDir uPrefix

tempFile :: FilePath -> Neovim e FilePath
tempFile file = do
  absDir <- tempDir $ takeDirectory file
  return $ absDir </> takeFileName file

fixture :: MonadIO m => FilePath -> m FilePath
fixture = F.fixture uPrefix