packages feed

conferer-1.0.0.0: test/Conferer/FromConfig/FileSpec.hs

{-# LANGUAGE TypeApplications #-}
module Conferer.FromConfig.FileSpec (spec) where

import Test.Hspec
import Conferer.FromConfig.Extended
import Conferer.FromConfig ()
import System.FilePath ((</>))
import Data.Text (pack)

spec :: Spec
spec = do
  context "File fromConfig" $ do
    describe "fetching a File from config" $ do
      ensureFetchThrows @File [] [] $
        aMissingRequiredKeys @String
          [ "some.key"
          , "some.key.extension"
          , "some.key.dirname"
          , "some.key.basename"
          , "some.key.filename"
          ]

      ensureFetchThrows @File [] [("", toDyn False)] $
        aTypeMismatchWithDefaultError @String "some.key" False
      context "with whole path in root" $ do
        ensureFetchParses @File
          [ ("", pack $ "some" </> "file.png")
          ]
          []
          $ File $ "some" </> "file.png"

      context "with whole path in root and overriding extension" $ do
        ensureFetchParses @File
          [ ("", pack $ "some" </> "file.png")
          , ("extension", "jpg")
          ]
          []
          $ File $ "some" </> "file.jpg"

      context "with whole path in root and overriding extension and basename" $ do
        ensureFetchParses @File
          [ ("", pack $ "some" </> "file.png")
          , ("extension", "jpg")
          , ("basename", "somefile")
          ]
          []
          $ File $ "some" </> "somefile.jpg"

      context "with whole path in root and overriding dirname" $ do
        ensureFetchParses @File
          [ ("", pack $ "some" </> "file.png")
          , ("dirname", "dir")
          ]
          []
          $ File $ "dir" </> "file.png"

      context "with both filename and basename the most specific takes priority" $ do
        ensureFetchParses @File
          [ ("", pack $ "some" </> "file.png")
          , ("filename", "somefile.jpg")
          , ("basename", "coolfile")
          ]
          []
          $ File $ "some" </> "coolfile.jpg"

      context "with both filename and extension the most specific takes priority" $ do
        ensureFetchParses @File
          [ ("", pack $ "some" </> "file.png")
          , ("filename", "somefile.jpg")
          , ("extension", "gif")
          ]
          []
          $ File $ "some" </> "somefile.gif"

      context "without root path specificied, with subcomponents that complete a path" $ do
        ensureFetchParses @File
          [ ("filename", "somefile.jpg")
          , ("dirname", pack $ "some" </> "path")
          ]
          []
          $ File $ "some" </> "path" </> "somefile.jpg"