packages feed

neuron-1.0.0.0: test/Neuron/Zettelkasten/ID/SchemeSpec.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoImplicitPrelude #-}

module Neuron.Zettelkasten.ID.SchemeSpec
  ( spec,
  )
where

import qualified Data.Set as Set
import Neuron.Zettelkasten.ID
import Neuron.Zettelkasten.ID.Scheme
import Relude
import Test.Hspec

spec :: Spec
spec = do
  describe "nextAvailableZettelID" $ do
    let zettels =
          Set.fromList $
            fmap
              (either (error . show) id . parseZettelID)
              [ "ribeye-steak",
                "2015403"
              ]
        nextAvail scheme = do
          v <- genVal scheme
          pure $ nextAvailableZettelID zettels v scheme
    context "custom ID" $ do
      it "checks if already exists" $ do
        nextAvail (IDSchemeCustom "ribeye-steak")
          `shouldReturn` Left IDConflict_AlreadyExists
      it "succeeds" $ do
        nextAvail (IDSchemeCustom "sunny-side-eggs")
          `shouldReturn` Right (unsafeMkZettelID "sunny-side-eggs")
    context "hash ID" $ do
      it "should succeed" $
        nextAvail IDSchemeHash
          >>= (`shouldNotSatisfy` isLeft)