packages feed

twitter-conduit-0.0.6: tests/ApiSpec.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE CPP #-}

module ApiSpec where

import Data.Conduit
import qualified Data.Conduit.List as CL
import Web.Twitter.Conduit (call, sourceWithCursor)
import Web.Twitter.Conduit.Api
import Web.Twitter.Conduit.Lens
import qualified Web.Twitter.Conduit.Parameters as Param
import Web.Twitter.Types.Lens
import Control.Lens
import TestUtils

import Test.Hspec

import System.IO.Unsafe

self :: User
self = unsafePerformIO . run . call $ accountVerifyCredentials

spec :: Spec
spec = do
    unit
#ifdef RUN_INTEGRATED_TEST
    integrated
#endif

unit :: Spec
unit = return ()

integrated :: Spec
integrated = do
    describe "friendsIds" $ do
        it "returns a cursored collection of users IDs" $ do
            res <- run . call $ friendsIds (Param.ScreenNameParam "thimura")
            res ^. contents . to length `shouldSatisfy` (> 0)

        it "iterate with sourceWithCursor" $ do
            friends <- run $ do
                let src = sourceWithCursor $ friendsIds (Param.ScreenNameParam "thimura")
                src $$ CL.consume
            length friends `shouldSatisfy` (>= 0)

    describe "listsMembers" $ do
        it "returns a cursored collection of the member of specified list" $ do
            res <- run . call $ listsMembers (Param.ListNameParam "thimura/haskell")
            res ^. contents . to length `shouldSatisfy` (>= 0)

        it "should raise error when specified list does not exists" $ do
            let action = run . call $ listsMembers (Param.ListNameParam "thimura/haskell_ne")
            action `shouldThrow` anyException

        it "iterate with sourceWithCursor" $ do
            members <- run $ do
                let src = sourceWithCursor $ listsMembers (Param.ListNameParam "thimura/haskell")
                src $$ CL.consume
            members ^.. traversed . userScreenName `shouldContain` ["Hackage"]