{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE OverloadedStrings #-} module AddressSpec where import qualified Data.Map as M import Data.Text hiding (all, map) import qualified Data.Text as T import qualified Data.Vector as V import Faker hiding (defaultFakerSettings) import Faker.Address import Test.Hspec import TestImport import Faker.Internal import Faker.Internal.Types (aesonKeyToText) fakerException :: Selector FakerException fakerException = const True spec :: Spec spec = do describe "Address" $ do it "preserves unwanted things and works with numbers" $ do txt <- resolveUnresolved defaultFakerSettings (pure $ pure $ "32-????-####") (\s t -> pure $ aesonKeyToText t) txt `shouldBeOneOf` ["32-SZJX-4351", "32-GODI-8116"] it "doesn't get confused with garbage" $ do txt <- resolveUnresolved defaultFakerSettings (pure $ pure $ "abjakf-324jak") (\s t -> pure $ aesonKeyToText t) txt `shouldBe` "abjakf-324jak" describe "Address functions" $ do it "basic check" $ do fakeCountry <- generate country fakeCountry `shouldBeOneOf` ["Ecuador", "Macedonia"] it "Monad instance of Fake" $ do let someCountry :: Fake Text someCountry = do c1 <- country pure c1 fakeCountry <- generate someCountry fakeCountry `shouldBeOneOf` ["Ecuador", "Macedonia"] it "Equality of normal generation and Monad" $ do fakeCountry <- generate country let someCountry :: Fake Text someCountry = do c1 <- country pure c1 c2 <- generate someCountry fakeCountry `shouldBe` c2 it "Monad instance of Fake (tuple)" $ do let someCountry :: Fake (Text, Text) someCountry = do c1 <- country c2 <- country pure (c1, c2) fakeCountry <- generate someCountry fakeCountry `shouldBeOneOf` [("Ecuador", "Ecuador"), ("Macedonia","Macedonia")] it "Monad instance of Fake (tuple)" $ do let someCountry :: Fake (Text, Text) someCountry = do c1 <- country c2 <- country pure (c1, c2) fakeCountry <- generateWithSettings (setNonDeterministic defaultFakerSettings) someCountry (fst fakeCountry) `shouldNotBe` (snd fakeCountry) it "Equality of sequence" $ do let someCountry :: Fake (Text, Text) someCountry = do c1 <- country c2 <- country pure (c1, c2) (c1, c2) <- generate someCountry c1 `shouldBe` c2 it "Resolver based function" $ do bno <- generate buildingNumber bno `shouldBeOneOf` ["351", "116"] it "Resolver fullAddress" $ do bno <- generate fullAddress bno `shouldSatisfy` (\x -> T.length x > 25) it "Resolver based function - monad" $ do let someBuilding :: Fake (Text, Text) someBuilding = do c1 <- buildingNumber c2 <- buildingNumber pure (c1, c2) (c1, c2) <- generate someBuilding c1 `shouldBe` c2 describe "Empty data sources" $ do it "For ee locale, throws exception" $ do let action = generateWithSettings (setLocale "ee" defaultFakerSettings) country action `shouldThrow` fakerException describe "Functions in address module" $ do it "Country" $ do val <- generateWithSettings defaultFakerSettings country val `shouldBeOneOf` ["Ecuador", "Macedonia"] it "cityPrefix" $ do val <- generateWithSettings defaultFakerSettings cityPrefix val `shouldBeOneOf` ["East", "Port"] it "citySuffix" $ do val <- generateWithSettings defaultFakerSettings citySuffix val `shouldBeOneOf` ["burgh", "borough"] it "countryCode" $ do val <- generateWithSettings defaultFakerSettings countryCode val `shouldBeOneOf` ["FJ", "LB"] it "countryCodeLong" $ do val <- generateWithSettings defaultFakerSettings countryCodeLong val `shouldBeOneOf` ["CYM", "LBY"] it "buildingNumber" $ do val <- generateWithSettings defaultFakerSettings buildingNumber val `shouldBeOneOf` ["351", "116"] it "communityPrefix" $ do val <- generateWithSettings defaultFakerSettings communityPrefix val `shouldBeOneOf` ["Pine", "Royal"] it "communitySuffix" $ do val <- generateWithSettings defaultFakerSettings communitySuffix val `shouldBeOneOf` ["Oaks", "Gardens"] it "community" $ do val <- generateWithSettings defaultFakerSettings community val `shouldBeOneOf` ["Pine Place", "Royal Pointe"] it "streetSuffix" $ do val <- generateWithSettings defaultFakerSettings streetSuffix val `shouldBeOneOf` ["Way", "Parks"] it "secondaryAddress" $ do val <- generateWithSettings defaultFakerSettings secondaryAddress val `shouldBeOneOf` ["Suite 351", "Suite 116"] it "postcode" $ do val <- generateWithSettings defaultFakerSettings postcode val `shouldBeOneOf` ["24351-4351", "68116-8116"] it "state" $ do val <- generateWithSettings defaultFakerSettings state val `shouldBeOneOf` ["Michigan", "Rhode Island"] it "stateAbbr" $ do val <- generateWithSettings defaultFakerSettings stateAbbr val `shouldBeOneOf` ["MI", "RI"] it "timeZone" $ do val <- generateWithSettings defaultFakerSettings timeZone val `shouldBeOneOf` ["America/Chicago", "Australia/Brisbane"] it "city" $ do val <- generateWithSettings defaultFakerSettings city val `shouldBeOneOf` ["East Vernita", "Goldnerton"] it "streetName" $ do val <- generateWithSettings defaultFakerSettings streetName val `shouldBeOneOf` ["Schmidt Ferry", "Goldner Track"] it "streetAddress" $ do val <- generateWithSettings defaultFakerSettings streetAddress val `shouldBeOneOf` ["351 Vernita Avenue", "116 Will Manor"] it "fullAddress" $ do val <- generateWithSettings defaultFakerSettings fullAddress val `shouldBeOneOf` [ "Suite 351 892 Donnelly Points, Kelleymouth, AK 66043-6043" , "Suite 116 663 Russel Locks, Assuntamouth, UT 86075-6075" ] it "mailBox" $ do val <- generateWithSettings defaultFakerSettings mailBox val `shouldBeOneOf` ["PO Box 4351", "PO Box 8116"] it "cityWithState" $ do val <- generateWithSettings defaultFakerSettings cityWithState val `shouldBeOneOf` ["East Vernita, Minnesota", "Goldnerton, Arkansas"]