packages feed

lrclib-client-0.2.2: test/Main.hs

{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE OverloadedStrings #-}

module Main where

import Data.Aeson
import Data.ByteString.Lazy qualified as BS
import Data.Kind
import Data.Maybe
import LrcLib.Client
import Test.Tasty
import Test.Tasty.HUnit

decodeTest :: forall (a :: Type). (FromJSON a, Eq a, Read a, Show a) => FilePath -> TestTree
decodeTest file = testCase file $ do
  decoded <- fromJust . decode @a <$> BS.readFile (file <> ".json")
  expected <- read @a <$> readFile file
  decoded @?= expected

main :: IO ()
main =
  defaultMain . testGroup "" $
    [ testGroup
        "decoding"
        [ decodeTest @Challenge "test/challenge",
          decodeTest @TrackData "test/getUrlSuccess",
          decodeTest @SearchResponse "test/search"
        ],
      testCase
        "challenge solving"
        $ do
          let challenge = Challenge {prefix = "PREFIX", target = "000000FF00000000000000000000000000000000000000000000000000000000"}
          solveChallenge challenge @?= "PREFIX:1944868"
    ]