packages feed

buffet-0.2.0: test/Buffet/Toolbox/TestVersion.hs

{- HLINT ignore "Avoid restricted extensions" -}
{-# LANGUAGE DeriveGeneric #-}

module Buffet.Toolbox.TestVersion
  ( get
  ) where

import qualified Control.Monad as Monad
import qualified Data.Maybe as Maybe
import qualified Data.Text as T
import qualified Data.Text.Encoding as Encoding
import qualified Data.Yaml as Yaml
import qualified GHC.Generics as Generics
import Prelude (Eq, IO, Maybe(Just), Ord, Show, (.), fmap, reverse)
import qualified Test.Tasty.HUnit as HUnit

newtype Package =
  Package
    { version :: T.Text
    }
  deriving (Eq, Generics.Generic, Ord, Show)

instance Yaml.FromJSON Package

get :: T.Text -> T.Text -> HUnit.Assertion
get package commandOutput = do
  expectedVersion <- getPackageVersion package
  HUnit.assertEqual "" (Just expectedVersion) actualVersion
  where
    actualVersion = versionFromGnuCodingStandards commandOutput

getPackageVersion :: T.Text -> IO T.Text
getPackageVersion = fmap version . Yaml.decodeThrow . Encoding.encodeUtf8

versionFromGnuCodingStandards :: T.Text -> Maybe T.Text
versionFromGnuCodingStandards = firstLine Monad.>=> lastWord
  where
    firstLine = Maybe.listToMaybe . T.lines
    lastWord = Maybe.listToMaybe . reverse . T.words