liblastfm-0.2.0.0: tests/User.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE UnicodeSyntax #-}
module User (auth, noauth) where
import Data.Aeson.Types
import Network.Lastfm
import Network.Lastfm.User
import Test.Framework
import Test.Framework.Providers.HUnit
import Common
auth ∷ Request JSON APIKey → Request JSON SessionKey → Secret → [Test]
auth ak sk s =
[ testCase "User.getRecentStations" testGetRecentStations
, testCase "User.getRecommendedArtists" testGetRecommendedArtists
, testCase "User.getRecommendedEvents" testGetRecommendedEvents
, testCase "User.shout" testShout
]
where
testGetRecentStations = check grs . sign s $
getRecentStations <*> user "liblastfm" <* limit 10 <*> ak <*> sk
testGetRecommendedArtists = check gra . sign s $
getRecommendedArtists <* limit 10 <*> ak <*> sk
testGetRecommendedEvents = check gre . sign s $
getRecommendedEvents <* limit 10 <*> ak <*> sk
testShout = check ok . sign s $
shout <*> user "liblastfm" <*> message "test message" <*> ak <*> sk
noauth ∷ Request JSON APIKey → [Test]
noauth ak =
[ testCase "User.getArtistTracks" testGetArtistTracks
, testCase "User.getBannedTracks" testGetBannedTracks
, testCase "User.getEvents" testGetEvents
, testCase "User.getFriends" testGetFriends
, testCase "User.getPlayCount" testGetPlayCount
, testCase "User.getGetLovedTracks" testGetLovedTracks
, testCase "User.getNeighbours" testGetNeighbours
, testCase "User.getNewReleases" testGetNewReleases
, testCase "User.getPastEvents" testGetPastEvents
, testCase "User.getPersonalTags" testGetPersonalTags
, testCase "User.getPlaylists" testGetPlaylists
, testCase "User.getRecentTracks" testGetRecentTracks
, testCase "User.getShouts" testGetShouts
, testCase "User.getTopAlbums" testGetTopAlbums
, testCase "User.getTopArtists" testGetTopArtists
, testCase "User.getTopTags" testGetTopTags
, testCase "User.getTopTracks" testGetTopTracks
, testCase "User.getWeeklyAlbumChart" testGetWeeklyAlbumChart
, testCase "User.getWeeklyArtistChart" testGetWeeklyArtistChart
, testCase "User.getWeeklyChartList" testGetWeeklyChartList
, testCase "User.getWeeklyTrackChart" testGetWeeklyTrackChart
]
where
testGetArtistTracks = check gat $
getArtistTracks <*> user "smpcln" <*> artist "Dvar" <*> ak
testGetBannedTracks = check gbt $
getBannedTracks <*> user "smpcln" <* limit 10 <*> ak
testGetEvents = check ge $
getEvents <*> user "chansonnier" <* limit 5 <*> ak
testGetFriends = check gf $
getFriends <*> user "smpcln" <* limit 10 <*> ak
testGetPlayCount = check gpc $
getInfo <*> user "smpcln" <*> ak
testGetLovedTracks = check glt $
getLovedTracks <*> user "smpcln" <* limit 10 <*> ak
testGetNeighbours = check gn $
getNeighbours <*> user "smpcln" <* limit 10 <*> ak
testGetNewReleases = check gnr $
getNewReleases <*> user "rj" <*> ak
testGetPastEvents = check gpe $
getPastEvents <*> user "mokele" <* limit 5 <*> ak
testGetPersonalTags = check gpt $
getPersonalTags <*> user "crackedcore" <*> tag "rhythmic noise" <*> taggingType "artist" <* limit 10 <*> ak
testGetPlaylists = check gp $
getPlaylists <*> user "mokele" <*> ak
testGetRecentTracks = check grt $
getRecentTracks <*> user "smpcln" <* limit 10 <*> ak
testGetShouts = check gs $
getShouts <*> user "smpcln" <* limit 2 <*> ak
testGetTopAlbums = check gtal $
getTopAlbums <*> user "smpcln" <* limit 5 <*> ak
testGetTopArtists = check gtar $
getTopArtists <*> user "smpcln" <* limit 5 <*> ak
testGetTopTags = check gtta $
getTopTags <*> user "smpcln" <* limit 10 <*> ak
testGetTopTracks = check gttr $
getTopTracks <*> user "smpcln" <* limit 10 <*> ak
testGetWeeklyAlbumChart = check gwalc $
getWeeklyAlbumChart <*> user "smpcln" <*> ak
testGetWeeklyArtistChart = check gwarc $
getWeeklyArtistChart <*> user "smpcln" <*> ak
testGetWeeklyChartList = check gwcl $
getWeeklyChartList <*> user "smpcln" <*> ak
testGetWeeklyTrackChart = check gwtc $
getWeeklyTrackChart <*> user "smpcln" <*> ak
gpc ∷ Value → Parser String
gat, gbt, ge, gf, glt, gn, gnr, gp, gpe, gpt, gra, gre, grs, grt, gs, gtal, gtar, gtta, gttr, gwalc, gwarc, gwcl, gwtc ∷ Value → Parser [String]
gat o = parseJSON o >>= (.: "artisttracks") >>= (.: "track") >>= mapM (.: "name")
gbt o = parseJSON o >>= (.: "bannedtracks") >>= (.: "track") >>= mapM (.: "name")
ge o = parseJSON o >>= (.: "events") >>= (.: "event") >>= mapM (.: "venue") >>= mapM (.: "url")
gf o = parseJSON o >>= (.: "friends") >>= (.: "user") >>= mapM (.: "name")
glt o = parseJSON o >>= (.: "lovedtracks") >>= (.: "track") >>= mapM (.: "name")
gn o = parseJSON o >>= (.: "neighbours") >>= (.: "user") >>= mapM (.: "name")
gnr o = parseJSON o >>= (.: "albums") >>= (.: "album") >>= mapM (.: "url")
gp o = parseJSON o >>= (.: "playlists") >>= (.: "playlist") >>= mapM (.: "title")
gpc o = parseJSON o >>= (.: "user") >>= (.: "playcount")
gpe o = parseJSON o >>= (.: "events") >>= (.: "event") >>= mapM (.: "url")
gpt o = parseJSON o >>= (.: "taggings") >>= (.: "artists") >>= (.: "artist") >>= mapM (.: "name")
gra o = parseJSON o >>= (.: "recommendations") >>= (.: "artist") >>= mapM (.: "name")
gre o = do
m <- parseJSON o >>= (.: "events")
(m .: "event" >>= mapM (.: "url")) <|> (m .: "event" >>= fmap return . (.: "url"))
grs o = parseJSON o >>= (.: "recentstations") >>= (.: "station") >>= mapM (.: "name")
grt o = parseJSON o >>= (.: "recenttracks") >>= (.: "track") >>= mapM (.: "name")
gs o = parseJSON o >>= (.: "shouts") >>= (.: "shout") >>= mapM (.: "body")
gtal o = parseJSON o >>= (.: "topalbums") >>= (.: "album") >>= mapM (.: "artist") >>= mapM (.: "name")
gtar o = parseJSON o >>= (.: "topartists") >>= (.: "artist") >>= mapM (.: "name")
gtta o = parseJSON o >>= (.: "toptags") >>= (.: "tag") >>= mapM (.: "name")
gttr o = parseJSON o >>= (.: "toptracks") >>= (.: "track") >>= mapM (.: "url")
gwalc o = parseJSON o >>= (.: "weeklyalbumchart") >>= (.: "album") >>= mapM (.: "url")
gwarc o = parseJSON o >>= (.: "weeklyartistchart") >>= (.: "artist") >>= mapM (.: "url")
gwcl o = take 5 `fmap` (parseJSON o >>= (.: "weeklychartlist") >>= (.: "chart") >>= mapM (.: "from"))
gwtc o = parseJSON o >>= (.: "weeklytrackchart") >>= (.: "track") >>= mapM (.: "url")