packages feed

liblastfm-0.1.1.2: tests/Chart.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE UnicodeSyntax #-}
module Chart (noauth) where

import Data.Aeson.Types
import Network.Lastfm
import Network.Lastfm.Chart
import Test.Framework
import Test.Framework.Providers.HUnit

import Common


noauth ∷ Request JSON Send APIKey → [Test]
noauth ak =
  [ testCase "Chart.getHypedArtists" testGetHypedArtists
  , testCase "Chart.getHypedTracks" testGetHypedTracks
  , testCase "Chart.getLovedTracks" testGetLovedTracks
  , testCase "Chart.getTopArtists" testGetTopArtists
  , testCase "Chart.getTopTags" testGetTopTags
  , testCase "Chart.getTopTracks" testGetTopTracks
  ]
 where
  testGetHypedArtists = check ga $
    getHypedArtists <* limit 3 <*> ak

  testGetHypedTracks = check gt $
    getHypedTracks <* limit 2 <*> ak

  testGetLovedTracks = check gt $
    getLovedTracks <* limit 3 <*> ak

  testGetTopArtists = check ga $
    getTopArtists <* limit 4 <*> ak

  testGetTopTags = check gta $
    getTopTags <* limit 5 <*> ak

  testGetTopTracks = check gt $
    getTopTracks <* limit 2 <*> ak


ga, gt, gta ∷ Value → Parser [String]
ga o = parseJSON o >>= (.: "artists") >>= (.: "artist") >>= mapM (.: "name")
gt o = parseJSON o >>= (.: "tracks") >>= (.: "track") >>= mapM (.: "name")
gta o = parseJSON o >>= (.: "tags") >>= (.: "tag") >>= mapM (.: "name")