liblastfm-0.6.0: test/api/Json/PlaylistSpec.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
module Json.PlaylistSpec (spec) where
import Control.Lens
import Data.Aeson (Value)
import Data.Aeson.Lens
import Data.Int (Int64)
import Data.Text.Lens (unpacked)
import Lastfm hiding (to)
import Lastfm.Playlist
import Lastfm.User
import Test.Hspec
import Test.HUnit (assertFailure)
import Text.Printf
import Text.Read (readMaybe)
import SpecHelper
spec :: Spec
spec = do
it "create" $ -- Order matters.
privately (create <* title "Awesome playlist")
`shouldHaveJson`
key "playlists".key "playlist".key "title"._String
it "addTrack" $ do
r <- lastfm man $ getPlaylists <*> user "liblastfm" <*> ak' <* json
case r of
Left e ->
assertFailure (printf "last.fm error: %s" (show e))
Right val ->
case preview pl val of
Just (Just pid) -> shouldHaveJson_ . privately $
addTrack <*> playlist pid <*> artist "Ruby my dear" <*> track "Chazz"
_ -> assertFailure (printf "bad JSON object: %s" (show val))
ak' :: Request f APIKey
ak' = apiKey "29effec263316a1f8a97f753caaa83e0"
pl :: Fold Value (Maybe Int64)
pl = key "playlists".key "playlist".values.key "id"._String.unpacked.to readMaybe