| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- module TestDatabase exposing (..)
- import Card exposing (CardData, CardDetails, CardPerformanceData, CardType(..), ManaColor(..), ManaCost(..), Power(..), Rarity(..))
- import Database exposing (Database)
- import Expect
- import Fuzz exposing (Fuzzer)
- import Json.Decode as Decode
- import Json.Encode as Encode
- import Test exposing (Test, describe, fuzz)
- niceFloat : Fuzzer Float
- niceFloat =
- Fuzz.floatRange 0 100
- fuzzDatabase : Fuzzer Database
- fuzzDatabase =
- Fuzz.listOfLengthBetween 1 2 fuzzCardData
- |> Fuzz.map Database.fromCardData
- fuzzCardData : Fuzzer CardData
- fuzzCardData =
- Fuzz.string
- |> Fuzz.andThen
- (\cardName ->
- Fuzz.constant CardData
- |> Fuzz.andMap (fuzzCardDetails cardName)
- |> Fuzz.andMap fuzzCardPerformance
- )
- fuzzCardPerformance : Fuzzer CardPerformanceData
- fuzzCardPerformance =
- Fuzz.constant CardPerformanceData
- |> Fuzz.andMap Fuzz.int
- |> Fuzz.andMap Fuzz.int
- |> Fuzz.andMap (Fuzz.maybe niceFloat)
- |> Fuzz.andMap (Fuzz.maybe niceFloat)
- |> Fuzz.andMap (Fuzz.maybe (Fuzz.constant 0.5))
- |> Fuzz.andMap (Fuzz.maybe niceFloat)
- fuzzCardDetails : String -> Fuzzer CardDetails
- fuzzCardDetails name =
- Fuzz.constant (CardDetails name)
- |> Fuzz.andMap Fuzz.int
- |> Fuzz.andMap (Fuzz.constant Creature)
- |> Fuzz.andMap (Fuzz.constant "Creature // Pirate")
- |> Fuzz.andMap (Fuzz.maybe Fuzz.string)
- |> Fuzz.andMap (Fuzz.maybe fuzzPower)
- |> Fuzz.andMap (Fuzz.maybe fuzzPower)
- |> Fuzz.andMap (Fuzz.list fuzzManaColor)
- |> Fuzz.andMap (Fuzz.constant "{X}{R}")
- |> Fuzz.andMap (Fuzz.constant (Just [ X, Color Red ]))
- |> Fuzz.andMap Fuzz.string
- |> Fuzz.andMap fuzzRarity
- fuzzCardType : Fuzzer CardType
- fuzzCardType =
- Fuzz.oneOfValues
- [ Creature
- , Instant
- , Sorcery
- , Enchantment
- , Artifact
- , Planeswalker
- , Land
- , Other
- ]
- fuzzPower : Fuzzer Power
- fuzzPower =
- Fuzz.oneOf
- [ Fuzz.constant VariablePower
- , Fuzz.intAtLeast 0 |> Fuzz.map ConstantPower
- , Fuzz.intAtLeast 0 |> Fuzz.map ConstantPlusVariablePower
- ]
- fuzzRarity : Fuzzer Rarity
- fuzzRarity =
- Fuzz.oneOfValues
- [ Common
- , Uncommon
- , Rare
- , Mythic
- ]
- fuzzManaColor : Fuzzer ManaColor
- fuzzManaColor =
- Fuzz.oneOfValues
- [ Red
- , Green
- , Blue
- , White
- , Black
- , Colorless
- ]
- fuzzManaCost : Fuzzer ManaCost
- fuzzManaCost =
- Fuzz.oneOf
- [ Fuzz.constant X
- , Fuzz.constant Y
- , Fuzz.constant Tap
- , Fuzz.constant Pay
- , Fuzz.int |> Fuzz.map AnyColor
- , fuzzManaColor |> Fuzz.map Color
- , fuzzManaColor |> Fuzz.map ColorPay
- , fuzzManaColor |> Fuzz.map TwoOrColor
- , Fuzz.map2 Hybrid fuzzManaColor fuzzManaColor
- , Fuzz.map2 HybridPay fuzzManaColor fuzzManaColor
- ]
- suite : Test
- suite =
- describe "Database"
- [ fuzz fuzzDatabase "encoder / decoder round trip" <|
- \database ->
- let
- roundTrip =
- Database.encode ( "mkm", database )
- |> Encode.encode 0
- |> Decode.decodeString Database.decoder
- in
- Expect.equal roundTrip (Ok ( "mkm", Just database ))
- ]
|