{-# 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")