packages feed

acousticbrainz-client-0.1.0.0: test/GoldenTests.hs

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
import           AcousticBrainz.HighLevel
import           AcousticBrainz.LowLevel
import           MusicBrainz

import           Data.Aeson
import           Data.String
import qualified Data.Text                as Text
import qualified Data.Text.IO             as Text
import qualified Data.Text.Lazy.Encoding  as Lazy
import           System.FilePath
import           Test.Tasty
import           Test.Tasty.Golden        (findByExtension, goldenVsString)
import           Text.Pretty.Simple

main :: IO ()
main = do
  a <- highLevelTests
  b <- lowLevelTests
  defaultMain $ testGroup "Golden tests" [a, b]

highLevelTests :: IO TestTree
highLevelTests = do
  files <- findByExtension [".highlevel"] "test"

  return $ testGroup "High level tests" $ do
    file <- files
    let goldenFile = addExtension file ".golden"
    return $ goldenVsString file goldenFile $
      Text.readFile file <&> Text.strip >>= mkMusicBrainzIdentifier >>= getHighLevelData <&> pShowNoColor <&> Lazy.encodeUtf8

lowLevelTests :: IO TestTree
lowLevelTests = do
  files <- findByExtension [".lowlevel"] "test"

  return $ testGroup "Low level tests" $ do
    file <- files
    let goldenFile = addExtension file ".golden"
    return $ goldenVsString file goldenFile $
      Text.readFile file <&> Text.strip >>= mkMusicBrainzIdentifier >>= getLowLevelData <&> pShowNoColor <&> Lazy.encodeUtf8