fakedata-1.0: test/OtherSpec.hs
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module OtherSpec where
import Control.Applicative ((<|>))
import Control.Monad.Catch
import Control.Monad.IO.Class
import qualified Data.Map as M
import Data.Semigroup ((<>))
import Data.Text hiding (all, map)
import qualified Data.Text as T
import qualified Data.Text.IO as TIO
import Data.Vector (Vector)
import qualified Data.Vector as V
import Faker hiding (defaultFakerSettings)
import qualified Faker.App as AP
import qualified Faker.Educator as ED
import Faker.Name
import qualified Faker.Address as AD
import Faker.Source
import qualified Faker.WorldCup as WC
import Test.Hspec
import TestImport
isText :: Text -> Bool
isText x = T.length x >= 1
data Person = Person {
personName :: Text,
personAddress :: Text
} deriving (Show, Eq)
fakePerson :: Fake Person
fakePerson = do
personName <- name
personAddress <- AD.fullAddress
pure $ Person{..}
spec :: Spec
spec = do
describe "Faker Generate" $ do
it "ruby code" $ do
hworld <- generate helloWorldRuby
hworld `shouldSatisfy` isText
it "name with middle - ee" $ do
ctries <-
generateWithSettings
(setLocale "ee" defaultFakerSettings)
nameWithMiddle
(ctries) `shouldBeOneOf` ["Kaido Välbe Mark", "Kardo Salum\228e Levandi"]
it "name with middle - pak" $ do
ctries <-
generateWithSettings
(setLocale "en-PAK" defaultFakerSettings)
nameWithMiddle
(ctries) `shouldBeOneOf` ["Zia Butt Iqbal", "Taj Mughal Hussain"]
it "name with middle - au" $ do
ctries <-
generateWithSettings
(setLocale "en-AU" defaultFakerSettings)
nameWithMiddle
(ctries) `shouldBeOneOf` ["Georgia Sarah Kelly", "Jasmine Alana Bergstrom"]
it "group A - WC" $ do
ga <- generate WC.groupsGroupA
ga `shouldBeOneOf` ["Russia", "Uruguay"]
it "App author" $ do
ga <-
generateWithSettings (setDeterministic defaultFakerSettings) AP.author
ga `shouldBeOneOf` ["Schmidt, Breitenberg and Lowe", "Goldner, Will and Muller"]
it "Same Person generated" $ do
p1 <- generate fakePerson
p2 <- generate fakePerson
p1 `shouldBe` p2
it "Different Person generated" $ do
p1 <- generate fakePerson
p2 <- generateNonDeterministic fakePerson
p1 `shouldNotBe` p2
describe "Semigroup instance of Fake" $
it "can be appended and it is associative" $ do
phraseL <- generate $ (pure "Hello " <> name) <> pure "!"
phraseR <- generate $ pure "Hello " <> (name <> pure "!")
let expected = ["Hello Brent Breitenberg!", "Hello Valentine Will V!"]
phraseL `shouldBeOneOf` expected
phraseR `shouldBeOneOf` expected
describe "Monoid instance of Fake" $
it "mappend mempty doesn't modify the other operand" $ do
name' <- generate $ name `mappend` mempty
name' `shouldBeOneOf` ["Brent Breitenberg", "Valentine Will V"]