{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
module Json.TagSpec (spec) where

import Data.Aeson.Lens
import Network.Lastfm
import Network.Lastfm.Tag
import Test.Hspec

import SpecHelper


spec :: Spec
spec = do
  it "getInfo" $
    publicly (getInfo <*> tag "depressive")
   `shouldHaveJson`
    key "tag".key "taggings"._String

  it "getSimilar" $
    publicly (getSimilar <*> tag "depressive")
   `shouldHaveJson`
    key "similartags".key "tag".values.key "name"._String

  it "getTopAlbums" $
    publicly (getTopAlbums <*> tag "depressive" <* limit 2)
   `shouldHaveJson`
    key "topalbums".key "album".values.key "url"._String

  it "getTopArtists" $
    publicly (getTopArtists <*> tag "depressive" <* limit 3)
   `shouldHaveJson`
    key "topartists".key "artist".values.key "url"._String

  it "getTopTags" $
    publicly getTopTags
   `shouldHaveJson`
    key "toptags".key "tag".values.key "name"._String

  it "getTopTracks" $
    publicly (getTopTracks <*> tag "depressive" <* limit 2)
   `shouldHaveJson`
    key "toptracks".key "track".values.key "url"._String

  it "getWeeklyArtistChart" $
    publicly (getWeeklyArtistChart <*> tag "depressive" <* limit 3)
   `shouldHaveJson`
    key "weeklyartistchart".key "artist".values.key "name"._String

  it "getWeeklyChartList" $
    publicly (getWeeklyChartList <*> tag "depressive")
   `shouldHaveJson`
    key "weeklychartlist".key "chart".values.key "from"._String

  it "search" $
    publicly (search <*> tag "depressive" <* limit 3)
   `shouldHaveJson`
    key "results".key "tagmatches".key "tag".values.key "name"._String
