liblastfm-0.6.0: test/api/Json/ArtistSpec.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
module Json.ArtistSpec (spec) where
import Data.Aeson (Value)
import Data.Aeson.Lens
import Data.Text (Text)
import Lastfm
import Lastfm.Artist
import Test.Hspec
import SpecHelper
spec :: Spec
spec = do
it "addTags" $
shouldHaveJson_ . privately $
addTags <*> artist "Егор Летов" <*> tags ["russian", "black metal"]
it "getTags-authenticated" $
privately (getTags <*> artist "Егор Летов")
`shouldHaveJson`
key "tags".key "tag".values.key "name"._String
it "removeTag" $
shouldHaveJson_ . privately $
removeTag <*> artist "Егор Летов" <*> tag "russian"
it "share" $
shouldHaveJson_ . privately $
share <*> artist "Sleep" <*> recipient "liblastfm" <* message "Just listen!"
it "getCorrection" $
publicly (getCorrection <*> artist "Meshugah")
`shouldHaveJson`
key "corrections".key "correction".key "artist".key "name"._String
describe "getEvents*" $ do
let jsonQuery :: Fold Value Text
jsonQuery = key "events".key "artist"._String
it "getEvents" $
publicly (getEvents <*> artist "Meshuggah" <* limit 2)
`shouldHaveJson`
jsonQuery
it "getEvents_mbid" $
publicly (getEvents <*> mbid "cf8b3b8c-118e-4136-8d1d-c37091173413" <* limit 2)
`shouldHaveJson`
jsonQuery
describe "getInfo*" $ do
let jsonQuery :: Fold Value Text
jsonQuery = key "artist".key "stats".key "listeners"._String
it "getInfo" $
publicly (getInfo <*> artist "Meshuggah")
`shouldHaveJson`
jsonQuery
it "getInfo_mbid" $
publicly (getInfo <*> mbid "cf8b3b8c-118e-4136-8d1d-c37091173413")
`shouldHaveJson`
jsonQuery
describe "getPastEvents*" $ do
let jsonQuery :: Fold Value Text
jsonQuery = key "events".key "event".values.key "title"._String
it "getPastEvents" $
publicly (getPastEvents <*> artist "Meshuggah" <* autocorrect True)
`shouldHaveJson`
jsonQuery
it "getPastEvents_mbid" $
publicly (getPastEvents <*> mbid "cf8b3b8c-118e-4136-8d1d-c37091173413" <* autocorrect True)
`shouldHaveJson`
jsonQuery
describe "getPodcast*" $ do
let jsonQuery :: Fold Value Text
jsonQuery = key "rss".key "channel".key "description"._String
it "getPodcast" $
publicly (getPodcast <*> artist "Meshuggah")
`shouldHaveJson`
jsonQuery
it "getPodcast_mbid" $
publicly (getPodcast <*> mbid "cf8b3b8c-118e-4136-8d1d-c37091173413")
`shouldHaveJson`
jsonQuery
describe "getShouts*" $ do
let jsonQuery :: Fold Value Text
jsonQuery = key "shouts".key "shout".values.key "author"._String
it "getShouts" $
publicly (getShouts <*> artist "Meshuggah" <* limit 5)
`shouldHaveJson`
jsonQuery
it "getShouts_mbid" $
publicly (getShouts <*> mbid "cf8b3b8c-118e-4136-8d1d-c37091173413" <* limit 5)
`shouldHaveJson`
jsonQuery
describe "getSimilar*" $ do
let jsonQuery :: Fold Value Text
jsonQuery = key "similarartists".key "artist".values.key "name"._String
it "getSimilar" $
publicly (getSimilar <*> artist "Meshuggah" <* limit 3)
`shouldHaveJson`
jsonQuery
it "getSimilar_mbid" $
publicly (getSimilar <*> mbid "cf8b3b8c-118e-4136-8d1d-c37091173413" <* limit 3)
`shouldHaveJson`
jsonQuery
describe "getTags*" $ do
let jsonQuery :: Fold Value Text
jsonQuery = key "tags".key "tag".values.key "name"._String
it "getTags" $
publicly (getTags <*> artist "Егор Летов" <* user "liblastfm")
`shouldHaveJson`
jsonQuery
it "getTags_mbid" $
publicly (getTags <*> mbid "cfb3d32e-d095-4d63-946d-9daf06932180" <* user "liblastfm")
`shouldHaveJson`
jsonQuery
describe "getTopAlbums*" $ do
let jsonQuery :: Fold Value Text
jsonQuery = key "topalbums".key "album".values.key "name"._String
it "getTopAlbums" $
publicly (getTopAlbums <*> artist "Meshuggah" <* limit 3)
`shouldHaveJson`
jsonQuery
it "getTopAlbums_mbid" $
publicly (getTopAlbums <*> mbid "cf8b3b8c-118e-4136-8d1d-c37091173413" <* limit 3)
`shouldHaveJson`
jsonQuery
describe "getTopFans*" $ do
let jsonQuery :: Fold Value Text
jsonQuery = key "topfans".key "user".values.key "name"._String
it "getTopFans" $
publicly (getTopFans <*> artist "Meshuggah")
`shouldHaveJson`
jsonQuery
it "getTopFans_mbid" $
publicly (getTopFans <*> mbid "cf8b3b8c-118e-4136-8d1d-c37091173413")
`shouldHaveJson`
jsonQuery
describe "getTopTags*" $ do
let jsonQuery :: Fold Value Text
jsonQuery = key "toptags".key "tag".values.key "name"._String
it "getTopTags" $
publicly (getTopTags <*> artist "Meshuggah")
`shouldHaveJson`
jsonQuery
it "getTopTags_mbid" $
publicly (getTopTags <*> mbid "cf8b3b8c-118e-4136-8d1d-c37091173413")
`shouldHaveJson`
jsonQuery
describe "getTopTracks*" $ do
let jsonQuery :: Fold Value Text
jsonQuery = key "toptracks".key "track".values.key "name"._String
it "getTopTracks" $
publicly (getTopTracks <*> artist "Meshuggah" <* limit 3)
`shouldHaveJson`
jsonQuery
it "getTopTracks_mbid" $
publicly (getTopTracks <*> mbid "cf8b3b8c-118e-4136-8d1d-c37091173413" <* limit 3)
`shouldHaveJson`
jsonQuery
it "search" $
publicly (search <*> artist "Mesh" <* limit 3)
`shouldHaveJson`
key "results".key "artistmatches".key "artist".values.key "name"._String