packages feed

axel-0.0.6: test/Axel/Test/Eff/ResourceSpec.hs

{-# LANGUAGE FlexibleContexts #-}

module Axel.Test.Eff.ResourceSpec where

import Axel.Eff.Resource as Res
import Axel.Test.Eff.FileSystemMock as Mock
import Axel.Test.Eff.ResourceMock as Mock

import Control.Monad.Freer as Eff
import qualified Control.Monad.Freer.Error as Effs

import Test.Tasty.Hspec

{-# ANN module "HLint: ignore Redundant do" #-}

spec_Resource :: SpecWith ()
spec_Resource =
  describe "readResource" $ do
    it "reads a resource's contents from the file system" $ do
      let action = Res.readResource (Res.ResourceId "resGroup1/res1")
      let origFSState =
            Mock.mkFileSystemState
              [ Mock.Directory
                  "resources"
                  [Mock.Directory "resGroup1" [Mock.File "res1" "res1Contents"]]
              ]
      let expected = "res1Contents"
      case Eff.run .
           Effs.runError . Mock.runFileSystem origFSState . Mock.runResource $
           action of
        Left err -> expectationFailure err
        Right result -> result `shouldBe` (expected, origFSState)