packages feed

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

{- HLINT ignore "Redundant do" -}
module Axel.Test.Eff.ResourceSpec where

import Axel.Prelude

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

import qualified Polysemy as Sem
import qualified Polysemy.Error as Sem

import Test.Tasty.Hspec

import TestUtils

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
                  (FilePath "dataFiles")
                  [ Mock.Directory
                      (FilePath "resources")
                      [ Mock.Directory
                          (FilePath "resGroup1")
                          [Mock.File (FilePath "res1") "res1Contents"]
                      ]
                  ]
              ]
      let expected = "res1Contents"
      case Sem.run .
           Sem.runError . Mock.runFileSystem origFSState . Mock.runResource $
           action of
        Left err -> failSpec err
        Right result -> result `shouldBe` (origFSState, expected)