neuron-0.4.0.0: test/Neuron/Zettelkasten/IDSpec.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Neuron.Zettelkasten.IDSpec
( spec,
)
where
import qualified Data.Aeson as Aeson
import Data.Time.Calendar
import qualified Neuron.Zettelkasten.ID as Z
import Relude
import Test.Hspec
spec :: Spec
spec = do
describe "ID parsing" $ do
let day = fromGregorian 2020 3 19
context "date id parsing" $ do
let zid = Z.ZettelDateID day 1
it "parses a zettel ID" $ do
Z.parseZettelID "2011401" `shouldBe` zid
it "parses a zettel ID from zettel filename" $ do
Z.mkZettelID "2011401.md" `shouldBe` zid
Z.zettelIDSourceFileName zid `shouldBe` "2011401.md"
context "custom id parsing" $ do
let zid = Z.ZettelCustomID "20abcde"
it "parses a custom zettel ID" $ do
Z.parseZettelID' "20abcde" `shouldBe` Right zid
it "parses a custom zettel ID from zettel filename" $ do
Z.mkZettelID "20abcde.md" `shouldBe` zid
Z.zettelIDSourceFileName zid `shouldBe` "20abcde.md"
let deceptiveZid = Z.ZettelCustomID "2136537e"
it "parses a custom zettel ID that looks like date ID" $ do
Z.parseZettelID' "2136537e" `shouldBe` Right deceptiveZid
describe "ID converstion" $ do
context "JSON encoding" $ do
let day = fromGregorian 2020 3 19
zid = Z.ZettelDateID day 1
it "Converts ID to text when encoding to JSON" $ do
Aeson.toJSON (Z.ZettelCustomID "20abcde") `shouldBe` Aeson.String "20abcde"
Aeson.toJSON zid `shouldBe` Aeson.String "2011401"
it "Date ID to Text" $ do
let day = fromGregorian 2020 4 21
Z.zettelIDText (Z.ZettelDateID day 1) `shouldBe` "2016201"