{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Headroom.FileSystemSpec
  ( spec
  )
where

import           Headroom.FileSystem
import           RIO
import           RIO.List                       ( sort )
import qualified RIO.List                      as L
import           Test.Hspec


spec :: Spec
spec = do
  describe "findFiles" $ do
    it "recursively finds files filtered by given predicate" $ do
      files <- findFiles "test-data/test-traverse/" ("b.html" `L.isSuffixOf`)
      let expected = ["test-data/test-traverse/foo/b.html"]
      files `shouldBe` expected

  describe "findFilesByExts" $ do
    it "recursively finds files filtered by its file extension" $ do
      files <- findFilesByExts "test-data/test-traverse/" ["xml"]
      let expected = ["test-data/test-traverse/foo/test.xml"]
      files `shouldBe` expected

  describe "listFiles" $ do
    it "recursively finds all files in directory" $ do
      filePaths <- listFiles "test-data/test-traverse/"
      let expected =
            [ "test-data/test-traverse/a.html"
            , "test-data/test-traverse/foo/b.html"
            , "test-data/test-traverse/foo/test.xml"
            , "test-data/test-traverse/foo/bar/c.html"
            ]
      sort filePaths `shouldBe` sort expected

    it "returns file if file path is passed as argument" $ do
      filePaths <- listFiles "test-data/test-traverse/a.html"
      let expected = ["test-data/test-traverse/a.html"]
      sort filePaths `shouldBe` sort expected