diff --git a/lib/zombie_survivor/game.ex b/lib/zombie_survivor/game.ex index a4e5eba..aa34739 100644 --- a/lib/zombie_survivor/game.ex +++ b/lib/zombie_survivor/game.ex @@ -31,6 +31,7 @@ defmodule ZombieSurvivor.Game do @spec level(Game.t()) :: ZombieSurvivor.level() def level(game) do game.survivors + |> Enum.reject(fn {_, s} -> Survivor.dead?(s) end) |> Enum.reduce(0, fn {_, s}, acc -> max(s.experience, acc) end) |> ZombieSurvivor.level() end diff --git a/test/game_test.exs b/test/game_test.exs index f54d03d..82e2d44 100644 --- a/test/game_test.exs +++ b/test/game_test.exs @@ -100,5 +100,31 @@ defmodule GameTest do assert Game.level(g) == :red end + + test "returns the level of the highest levelled living survivor" do + g = + Game.new() + |> Game.add_survivor(@new_survivor) + + assert Game.level(g) == :blue + + g = + g + |> Game.add_survivor(Survivor.new(name: "Eric", experience: 10)) + + assert Game.level(g) == :yellow + + g = + g + |> Game.add_survivor(Survivor.new(name: "Jack", experience: 20, wounds: 2)) + + assert Game.level(g) == :yellow + + g = + g + |> Game.add_survivor(Survivor.new(name: "Liru", experience: 1_000_000, wounds: 2)) + + assert Game.level(g) == :yellow + end end end