liblastfm-0.6.0: test/api/Xml/PlaylistSpec.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
module Xml.PlaylistSpec (spec) where
import Control.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 Text.Xml.Lens
import SpecHelper
spec :: Spec
spec = do
it "create" $ -- Order matters.
privately (create <* title "Awesome playlist")
`shouldHaveXml`
root.node "playlists".node "playlist".node "title".text
it "addTrack" $ do
r <- lastfm man $ getPlaylists <*> user "liblastfm" <*> ak' <* Lastfm.xml
case r of
Left e ->
assertFailure (printf "last.fm error: %s" (show e))
Right val ->
case preview pl val of
Just (Just pid) -> shouldHaveXml_ . privately $
addTrack <*> playlist pid <*> artist "Ruby my dear" <*> track "Chazz"
_ -> assertFailure (printf "bad XML object: %s" (show val))
ak' :: Request f APIKey
ak' = apiKey "29effec263316a1f8a97f753caaa83e0"
pl :: Fold Document (Maybe Int64)
pl = root.node "playlists".node "playlist".node "id".text.unpacked.to readMaybe