elixir_zombie_survivor/test/game_test.exs

73 lines
1.6 KiB
Elixir

defmodule GameTest do
use ExUnit.Case
alias ZombieSurvivor.{Game, Survivor}
doctest Game
@new_survivor Survivor.new(name: "Zombait")
@dead_survivor Survivor.new(name: "Deadman", wounds: 2)
describe "new/0 starts a game" do
test "that has 0 survivors" do
assert Map.size(Game.new().survivors) == 0
end
end
describe "add_survivor/1" do
test "adds a survivor to a game" do
g =
Game.new()
|> Game.add_survivor(@new_survivor)
assert Map.size(g.survivors) == 1
g =
g
|> Game.add_survivor(%{@new_survivor | name: "Larry"})
assert Map.size(g.survivors) == 2
end
test "ensures that two survivors with the same name can't exist" do
g =
Game.new()
|> Game.add_survivor(@new_survivor)
|> Game.add_survivor(@new_survivor)
assert Map.size(g.survivors) == 1
end
end
describe "ended?/1" do
test "returns true if all its survivors are dead" do
# TODO: Property test, add many dead survivors
g =
Game.new()
|> Game.add_survivor(@dead_survivor)
assert Game.ended?(g)
g =
g
|> Game.add_survivor(%{@dead_survivor | name: "Zambee"})
assert Game.ended?(g)
end
test "returns false if at least one survivor is alive" do
g =
Game.new()
|> Game.add_survivor(@new_survivor)
|> Game.add_survivor(@dead_survivor)
refute Game.ended?(g)
end
test "returns false if no survivors joined" do
g = Game.new()
refute Game.ended?(g)
end
end
end