emanote-1.4.0.0: test/Emanote/Route/RSpec.hs
module Emanote.Route.RSpec where
import Emanote.Route.Ext
import Emanote.Route.R
import Hedgehog
import Relude
import Test.Hspec
import Test.Hspec.Hedgehog
type SomeExt = ('LMLType 'Md)
spec :: Spec
spec = do
mkRouteFromFilePathSpec
routeInitsSpec
mkRouteFromFilePathSpec :: Spec
mkRouteFromFilePathSpec = describe "mkRouteFromFilePath" $ do
describe "basic" $ do
it "index route" . hedgehog $ do
mkRouteFromFilePath @_ @SomeExt "index.md" === Just indexRoute
it "single slug" . hedgehog $ do
mkRouteFromFilePath "foo.md" === Just r1
it "two slugs" . hedgehog $ do
mkRouteFromFilePath "foo/bar.md" === Just r2
it "three slugs" . hedgehog $ do
mkRouteFromFilePath "foo/bar/qux.md" === Just r3
describe "dropIndex" $ do
it "index route" . hedgehog $ do
mkRouteFromFilePath' True "index.md" === Just rIndex
it "single slug" . hedgehog $ do
mkRouteFromFilePath' True "foo.md" === Just r1
it "two slugs" . hedgehog $ do
mkRouteFromFilePath' True "foo/index.md" === Just r1
it "three slugs" . hedgehog $ do
mkRouteFromFilePath' True "foo/bar/index.md" === Just r2
routeInitsSpec :: Spec
routeInitsSpec = describe "routeInits" $ do
describe "basic" $ do
it "index route returns itself" . hedgehog $ do
routeInits rIndex === one rIndex
it "single slug returns index and itself" . hedgehog $ do
routeInits r1 === rIndex :| [r1]
it "two slugs returns index, first slug, and itself" . hedgehog $ do
routeInits r2 === rIndex :| [r1, r2]
it "three slugs returns index, first slug, second slug, and itself" . hedgehog $ do
routeInits r3 === rIndex :| [r1, r2, r3]
r1 :: R ('LMLType 'Md)
r1 = R $ "foo" :| []
r1Index :: R ('LMLType 'Md)
r1Index = R $ "foo" :| ["index"]
r2 :: R ('LMLType 'Md)
r2 = R $ "foo" :| ["bar"]
r2Index :: R ('LMLType 'Md)
r2Index = R $ "foo" :| ["bar", "index"]
r3 :: R ('LMLType 'Md)
r3 = R $ "foo" :| ["bar", "qux"]
r3Index :: R ('LMLType 'Md)
r3Index = R $ "foo" :| ["bar", "qux", "index"]
rIndex :: R ('LMLType 'Md)
rIndex = R $ "index" :| []