module Sound.Freesound.Test ( fs , anySatisfy , allSatisfy , getAll , unlessCI ) where import Data.Aeson (FromJSON) import Sound.Freesound import qualified Sound.Freesound.List as L import System.Environment (getEnv, lookupEnv) import Test.Hspec.Core.Spec fs :: Freesound a -> IO a fs a = flip runFreesound a =<< apiKeyFromString `fmap` getEnv "FREESOUND_API_KEY" anySatisfy :: (FromJSON a) => (a -> Bool) -> List a -> Freesound Bool anySatisfy p l = do if any p (elems l) then return True else do n <- getNext l case n of Nothing -> return False Just l' -> anySatisfy p l' allSatisfy :: (FromJSON a) => (a -> Bool) -> List a -> Freesound Bool allSatisfy p l = do if all p (elems l) then do n <- getNext l case n of Nothing -> return True Just l' -> allSatisfy p l' else return False getAll :: (FromJSON a) => List a -> Freesound [a] getAll l = case L.next l of Nothing -> return $ L.elems l Just n -> do xs <- getAll =<< get n return $ L.elems l ++ xs -- | Emit spec only when _not_ running on the CI server. unlessCI :: SpecWith () -> SpecWith () unlessCI action = do e <- runIO $ lookupEnv "CI" case e of Nothing -> action _ -> return ()