/
PlayerTest.elm
55 lines (46 loc) · 1.49 KB
/
PlayerTest.elm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
module PlayerTest exposing (..)
import Expect
import Fuzz exposing (Fuzzer)
import Json.Decode as Decode
import Json.Encode as Encode
import Murmur3
import Player exposing (Player)
import Test exposing (..)
roundTripDecoderTest : Test
roundTripDecoderTest =
fuzz playerFuzzer "encode and decode are symmetrical" <|
\player ->
Player.encode player
|> Decode.decodeValue Player.decoder
|> Expect.equal (Ok player)
playerFuzzer : Fuzzer Player
playerFuzzer =
Fuzz.map4 Player
(nameFuzzer
|> Fuzz.map (Murmur3.hashString 0)
|> Fuzz.map Player.playerIdFromIntForTestOnly
)
nameFuzzer
(Fuzz.intRange 1000 3000)
(Fuzz.intRange 0 50)
nameFuzzer : Fuzzer String
nameFuzzer =
Fuzz.intRange (Char.toCode 'a') (Char.toCode 'c')
|> Fuzz.map Char.fromCode
|> Fuzz.map String.fromChar
decoderTest : Test
decoderTest =
describe "decoder"
[ describe "id"
[ test "fills in the ID if it's missing" <|
\_ ->
Encode.object
[ ( "name", Encode.string "Test" )
, ( "rating", Encode.int 1200 )
, ( "matches", Encode.int 0 )
]
|> Decode.decodeValue Player.decoder
|> Result.map .id
|> Expect.equal (Ok (Player.playerIdFromIntForTestOnly 123038886))
]
]