packages feed

devtools-0.1.0: src/Devtools/Dependencies.hs

module Devtools.Dependencies
  ( getFilename
  , testTree
  )
where

import Data.Tuple (fst)
import Devtools.Config
import Devtools.Prelude
import System.FilePath (FilePath, (</>))

import qualified Data.ByteString.Lazy  as LBS
import qualified Data.Text.Encoding    as Text
import qualified System.Environment    as Environment
import qualified System.FilePath       as FilePath
import qualified System.Process.Typed  as Process
import qualified Test.Tasty            as Tasty
import qualified Test.Tasty.MGolden    as Tasty

testTree :: FilePath -> [Target] -> Tasty.TestTree
testTree filename targets =
  Tasty.goldenTest "dependencies" filename readDependenciesText
  where
    readDependenciesText :: IO Text
    readDependenciesText
      = Text.decodeUtf8 . LBS.toStrict <$> readDependencies

    readDependencies :: IO LBS.ByteString
    readDependencies
      = fst <$> Process.readProcess_ (Process.proc "stack" arguments)

    arguments :: [String]
    arguments =
      [ "ls"
      , "dependencies"
      , "--test"
      ] <> (targetString <$> targets)

getFilename :: IO FilePath
getFilename = do
  prefix <- getPrefix
  pure $ "test" </> prefix <> "-dependencies.txt"
  where
    getPrefix
      =   maybe "stack" (FilePath.dropExtension . FilePath.takeFileName)
      <$> Environment.lookupEnv "STACK_YAML"