From 2e077bb447a94ff28b85b3aa1d38aa2f38224732 Mon Sep 17 00:00:00 2001 From: Nelson Date: Fri, 29 Jan 2021 18:37:35 -0700 Subject: [PATCH] conjured item --- elixir/lib/gilded_rose.ex | 10 ++++- elixir/test/gilded_rose_test.exs | 71 ++++++++++++++++++++++++-------- 2 files changed, 61 insertions(+), 20 deletions(-) diff --git a/elixir/lib/gilded_rose.ex b/elixir/lib/gilded_rose.ex index 02323f55..a6e32287 100644 --- a/elixir/lib/gilded_rose.ex +++ b/elixir/lib/gilded_rose.ex @@ -41,14 +41,20 @@ defmodule GildedRose do # Conjured - + @conjured "Conjured" + def update_item_new(item = %{name: @conjured, sell_in: sell_in }) when sell_in - 1 < 0, do: + %{item | sell_in: sell_in - 1, quality: updated_quality(item.quality - 4) } + + def update_item_new(item = %{name: @conjured}), do: + %{item | sell_in: item.sell_in - 1, quality: updated_quality(item.quality - 2) } # Normal def update_item_new(item = %{sell_in: sell_in }) when sell_in - 1 < 0, do: %{item | sell_in: sell_in - 1, quality: updated_quality(item.quality - 2) } - def update_item_new(item), do: %{item | sell_in: item.sell_in - 1, quality: updated_quality(item.quality - 1) } + def update_item_new(item), do: + %{item | sell_in: item.sell_in - 1, quality: updated_quality(item.quality - 1) } # Utils diff --git a/elixir/test/gilded_rose_test.exs b/elixir/test/gilded_rose_test.exs index c73e83d0..456789a6 100644 --- a/elixir/test/gilded_rose_test.exs +++ b/elixir/test/gilded_rose_test.exs @@ -14,7 +14,8 @@ defmodule GildedRoseTest do %Item{name: @sulfuras, sell_in: sell_in, quality: 80}, %Item{name: @passes, sell_in: sell_in, quality: quality}, %Item{name: @brie, sell_in: sell_in, quality: quality}, - %Item{name: @normal, sell_in: sell_in, quality: quality} + %Item{name: @normal, sell_in: sell_in, quality: quality}, + %Item{name: @conjured, sell_in: sell_in, quality: quality}, ] end @@ -26,21 +27,22 @@ defmodule GildedRoseTest do test "all items quality _ 11 days or more left" do days_left = 12 - initial_quality = 1 + initial_quality = 2 result = create_items(days_left, initial_quality) |> elapse_days(1) assert result === [ %Item{name: @sulfuras, sell_in: 12, quality: 80}, - %Item{name: @passes, sell_in: 11, quality: 2}, - %Item{name: @brie, sell_in: 11, quality: 2}, - %Item{name: @normal, sell_in: 11, quality: 0}, + %Item{name: @passes, sell_in: 11, quality: 3}, + %Item{name: @brie, sell_in: 11, quality: 3}, + %Item{name: @normal, sell_in: 11, quality: 1}, + %Item{name: @conjured, sell_in: 11, quality: 0}, ] end test "normal item quality _ any day greater than 0" do days_left = 10 initial_quality = 10 - [_, _, _, normal] = create_items(days_left, initial_quality) |> elapse_days(1) + [_, _, _, normal, _] = create_items(days_left, initial_quality) |> elapse_days(1) assert normal === %Item{name: @normal, sell_in: 9, quality: 9} end @@ -48,16 +50,15 @@ defmodule GildedRoseTest do test "normal item quality _ last day" do days_left = 1 initial_quality = 5 - [_, _, _, normal] = create_items(days_left, initial_quality) |> elapse_days(1) + [_, _, _, normal, _] = create_items(days_left, initial_quality) |> elapse_days(1) assert normal === %Item{name: @normal, sell_in: 0, quality: 4} end - test "normal item quality _ no days left" do days_left = 0 initial_quality = 4 - [_, _, _, normal] = create_items(days_left, initial_quality) |> elapse_days(1) + [_, _, _, normal, _] = create_items(days_left, initial_quality) |> elapse_days(1) assert normal === %Item{name: @normal, sell_in: -1, quality: 2} end @@ -65,15 +66,48 @@ defmodule GildedRoseTest do test "normal item quality _ no days left _ no more quality" do days_left = 0 initial_quality = 4 - [_, _, _, normal] = create_items(days_left, initial_quality) |> elapse_days(4) + [_, _, _, normal, _] = create_items(days_left, initial_quality) |> elapse_days(4) assert normal === %Item{name: @normal, sell_in: -4, quality: 0} end + + + test "conjured item quality _ any day greater than 0" do + days_left = 10 + initial_quality = 10 + [_, _, _, _, conjured] = create_items(days_left, initial_quality) |> elapse_days(1) + + assert conjured === %Item{name: @conjured, sell_in: 9, quality: 8} + end + + test "conjured item quality _ last day" do + days_left = 1 + initial_quality = 5 + [_, _, _, _, conjured] = create_items(days_left, initial_quality) |> elapse_days(1) + + assert conjured === %Item{name: @conjured, sell_in: 0, quality: 3} + end + + test "conjured item quality _ no days left" do + days_left = 0 + initial_quality = 8 + [_, _, _, _, conjured] = create_items(days_left, initial_quality) |> elapse_days(1) + + assert conjured === %Item{name: @conjured, sell_in: -1, quality: 4} + end + + test "conjured item quality _ no days left _ no more quality" do + days_left = 0 + initial_quality = 4 + [_, _, _, _, conjured] = create_items(days_left, initial_quality) |> elapse_days(4) + + assert conjured === %Item{name: @conjured, sell_in: -4, quality: 0} + end test "ticket quality _ 10 days or less" do days_left = 10 initial_quality = 0 - [_, ticket, _, _] = create_items(days_left, initial_quality) |> elapse_days(1) + [_, ticket, _, _, _] = create_items(days_left, initial_quality) |> elapse_days(1) assert ticket === %Item{name: @passes, sell_in: 9, quality: 2} end @@ -81,7 +115,7 @@ defmodule GildedRoseTest do test "ticket quality _ 5 days or less" do days_left = 5 initial_quality = 0 - [_, ticket, _, _] = create_items(days_left, initial_quality) |> elapse_days(1) + [_, ticket, _, _, _] = create_items(days_left, initial_quality) |> elapse_days(1) assert ticket === %Item{name: @passes, sell_in: 4, quality: 3} end @@ -89,7 +123,7 @@ defmodule GildedRoseTest do test "ticket quality _ after concert" do days_left = 0 initial_quality = 0 - [_, ticket, _, _] = create_items(days_left, initial_quality) |> elapse_days(1) + [_, ticket, _, _, _] = create_items(days_left, initial_quality) |> elapse_days(1) assert ticket === %Item{name: @passes, sell_in: -1, quality: 0} end @@ -97,7 +131,7 @@ defmodule GildedRoseTest do test "brie quality _ greater than 0 days left " do days_left = 1 initial_quality = 0 - [_, _, brie, _] = create_items(days_left, initial_quality) |> elapse_days(1) + [_, _, brie, _, _] = create_items(days_left, initial_quality) |> elapse_days(1) assert brie === %Item{name: @brie, sell_in: 0, quality: 1} end @@ -106,7 +140,7 @@ defmodule GildedRoseTest do test "brie quality _ past sell in day" do days_left = 0 initial_quality = 0 - [_, _, brie, _] = create_items(days_left, initial_quality) |> elapse_days(1) + [_, _, brie, _, _] = create_items(days_left, initial_quality) |> elapse_days(1) assert brie === %Item{name: @brie, sell_in: -1, quality: 2} end @@ -114,7 +148,7 @@ defmodule GildedRoseTest do test "sulfuras quality _ any days left" do days_left = 20 initial_quality = 40 - [sulfuras, _, _, _] = create_items(days_left, initial_quality) |> elapse_days(40) + [sulfuras, _, _, _, _] = create_items(days_left, initial_quality) |> elapse_days(40) assert sulfuras === %Item{name: @sulfuras, sell_in: 20, quality: 80} end @@ -122,7 +156,7 @@ defmodule GildedRoseTest do test "sulfuras quality _ lengendary quality" do days_left = 20 initial_quality = 100 - [sulfuras, _, _, _] = create_items(days_left, initial_quality) |> elapse_days(1) + [sulfuras, _, _, _, _] = create_items(days_left, initial_quality) |> elapse_days(1) assert sulfuras === %Item{name: @sulfuras, sell_in: 20, quality: 80} end @@ -136,7 +170,8 @@ defmodule GildedRoseTest do %Item{name: @sulfuras, sell_in: 5, quality: 80}, %Item{name: @passes, sell_in: 0, quality: 50}, %Item{name: @brie, sell_in: 0, quality: 50}, - %Item{name: @normal, sell_in: 0, quality: 44} + %Item{name: @normal, sell_in: 0, quality: 44}, + %Item{name: @conjured, sell_in: 0, quality: 39}, ] end