packages feed

liblastfm-0.1.1.2: tests/Group.hs

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

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

import Common


noauth ∷ Request JSON Send APIKey → [Test]
noauth ak =
  [ testCase "Group.getHype" testGetHype
  , testCase "Group.getMembers" testGetMembers
  , testCase "Group.getWeeklyAlbumChart" testGetWeeklyAlbumChart
  , testCase "Group.getWeeklyArtistChart" testGetWeeklyArtistChart
  , testCase "Group.getWeeklyChartList" testGetWeeklyChartList
  , testCase "Group.getWeeklyTrackChart" testGetWeeklyTrackChart
  ]
 where
  g = "People with no social lives that listen to more music than is healthy who are slightly scared of spiders and can never seem to find a pen"

  testGetHype = check gh $
    getHype <*> group g <*> ak

  testGetMembers = check gm $
    getMembers <*> group g <* limit 10 <*> ak

  testGetWeeklyAlbumChart = check ga $
    getWeeklyAlbumChart <*> group g <*> ak

  testGetWeeklyArtistChart = check gar $
    getWeeklyArtistChart <*> group g <*> ak

  testGetWeeklyChartList = check gc $
    getWeeklyChartList <*> group g <*> ak

  testGetWeeklyTrackChart = check gt $
    getWeeklyTrackChart <*> group g <*> ak


ga, gar, gh, gm, gt ∷ Value → Parser [String]
gc ∷ Value → Parser [(String, String)]
ga o = parseJSON o >>= (.: "weeklyalbumchart") >>= (.: "album") >>= mapM (.: "playcount")
gar o = parseJSON o >>= (.: "weeklyartistchart") >>= (.: "artist") >>= mapM (.: "name")
gc o = parseJSON o >>= (.: "weeklychartlist") >>= (.: "chart") >>= mapM (\t → (,) <$> (t .: "from") <*> (t .: "to"))
gh o = parseJSON o >>= (.: "weeklyartistchart") >>= (.: "artist") >>= mapM (.: "mbid")
gm o = parseJSON o >>= (.: "members") >>= (.: "user") >>= mapM (.: "name")
gt o = parseJSON o >>= (.: "weeklytrackchart") >>= (.: "track") >>= mapM (.: "url")