packages feed

ribosome-test-0.4.0.0: test/Ribosome/Test/SettingTest.hs

module Ribosome.Test.SettingTest where

import Data.Either.Combinators (swapEither)
import Hedgehog (TestT, evalEither, (===))

import Ribosome.Config.Setting (setting, updateSetting)
import Ribosome.Control.Monad.Ribo (Ribo)
import Ribosome.Data.Setting (Setting(Setting))
import Ribosome.Data.SettingError (SettingError)
import Ribosome.Error.Report.Class (ReportError(..))
import Ribosome.Nvim.Api.RpcCall (RpcError)
import Ribosome.Test.Run (UnitTest)
import Ribosome.Test.Unit (unitSpec)

data SettingSpecError =
  Sett SettingError
  |
  Rpc RpcError
  deriving Show

instance ReportError SettingSpecError where
  errorReport = undefined

deepPrisms ''SettingSpecError

sett :: Setting Int
sett = Setting "name" True Nothing

settingSuccessSpec :: TestT (Ribo s SettingSpecError) ()
settingSuccessSpec = do
  updateSetting sett 5
  r <- lift (setting sett)
  5 === r

test_settingSuccess :: UnitTest
test_settingSuccess =
  unitSpec def () settingSuccessSpec

settingFailSpec :: TestT (Ribo s SettingSpecError) ()
settingFailSpec = do
  ea <- lift (catchAt catch $ Right <$> result)
  void $ evalEither (swapEither ea)
  where
    result :: Ribo s SettingSpecError Int
    result = setting sett
    catch :: SettingError -> Ribo s SettingSpecError (Either SettingError Int)
    catch = return . Left

test_settingFail :: UnitTest
test_settingFail =
  unitSpec def () settingFailSpec