mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 22:41:30 +00:00
conjured item
This commit is contained in:
parent
dbc6d77ad8
commit
2e077bb447
@ -41,14 +41,20 @@ defmodule GildedRose do
|
|||||||
|
|
||||||
# Conjured
|
# 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
|
# Normal
|
||||||
|
|
||||||
def update_item_new(item = %{sell_in: sell_in }) when sell_in - 1 < 0, do:
|
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) }
|
%{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
|
# Utils
|
||||||
|
|
||||||
|
|||||||
@ -14,7 +14,8 @@ defmodule GildedRoseTest do
|
|||||||
%Item{name: @sulfuras, sell_in: sell_in, quality: 80},
|
%Item{name: @sulfuras, sell_in: sell_in, quality: 80},
|
||||||
%Item{name: @passes, sell_in: sell_in, quality: quality},
|
%Item{name: @passes, sell_in: sell_in, quality: quality},
|
||||||
%Item{name: @brie, 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
|
end
|
||||||
|
|
||||||
@ -26,21 +27,22 @@ defmodule GildedRoseTest do
|
|||||||
|
|
||||||
test "all items quality _ 11 days or more left" do
|
test "all items quality _ 11 days or more left" do
|
||||||
days_left = 12
|
days_left = 12
|
||||||
initial_quality = 1
|
initial_quality = 2
|
||||||
result = create_items(days_left, initial_quality) |> elapse_days(1)
|
result = create_items(days_left, initial_quality) |> elapse_days(1)
|
||||||
|
|
||||||
assert result === [
|
assert result === [
|
||||||
%Item{name: @sulfuras, sell_in: 12, quality: 80},
|
%Item{name: @sulfuras, sell_in: 12, quality: 80},
|
||||||
%Item{name: @passes, sell_in: 11, quality: 2},
|
%Item{name: @passes, sell_in: 11, quality: 3},
|
||||||
%Item{name: @brie, sell_in: 11, quality: 2},
|
%Item{name: @brie, sell_in: 11, quality: 3},
|
||||||
%Item{name: @normal, sell_in: 11, quality: 0},
|
%Item{name: @normal, sell_in: 11, quality: 1},
|
||||||
|
%Item{name: @conjured, sell_in: 11, quality: 0},
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
test "normal item quality _ any day greater than 0" do
|
test "normal item quality _ any day greater than 0" do
|
||||||
days_left = 10
|
days_left = 10
|
||||||
initial_quality = 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}
|
assert normal === %Item{name: @normal, sell_in: 9, quality: 9}
|
||||||
end
|
end
|
||||||
@ -48,16 +50,15 @@ defmodule GildedRoseTest do
|
|||||||
test "normal item quality _ last day" do
|
test "normal item quality _ last day" do
|
||||||
days_left = 1
|
days_left = 1
|
||||||
initial_quality = 5
|
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}
|
assert normal === %Item{name: @normal, sell_in: 0, quality: 4}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
test "normal item quality _ no days left" do
|
test "normal item quality _ no days left" do
|
||||||
days_left = 0
|
days_left = 0
|
||||||
initial_quality = 4
|
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}
|
assert normal === %Item{name: @normal, sell_in: -1, quality: 2}
|
||||||
end
|
end
|
||||||
@ -65,15 +66,48 @@ defmodule GildedRoseTest do
|
|||||||
test "normal item quality _ no days left _ no more quality" do
|
test "normal item quality _ no days left _ no more quality" do
|
||||||
days_left = 0
|
days_left = 0
|
||||||
initial_quality = 4
|
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}
|
assert normal === %Item{name: @normal, sell_in: -4, quality: 0}
|
||||||
end
|
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
|
test "ticket quality _ 10 days or less" do
|
||||||
days_left = 10
|
days_left = 10
|
||||||
initial_quality = 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: 9, quality: 2}
|
assert ticket === %Item{name: @passes, sell_in: 9, quality: 2}
|
||||||
end
|
end
|
||||||
@ -81,7 +115,7 @@ defmodule GildedRoseTest do
|
|||||||
test "ticket quality _ 5 days or less" do
|
test "ticket quality _ 5 days or less" do
|
||||||
days_left = 5
|
days_left = 5
|
||||||
initial_quality = 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: 4, quality: 3}
|
assert ticket === %Item{name: @passes, sell_in: 4, quality: 3}
|
||||||
end
|
end
|
||||||
@ -89,7 +123,7 @@ defmodule GildedRoseTest do
|
|||||||
test "ticket quality _ after concert" do
|
test "ticket quality _ after concert" do
|
||||||
days_left = 0
|
days_left = 0
|
||||||
initial_quality = 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}
|
assert ticket === %Item{name: @passes, sell_in: -1, quality: 0}
|
||||||
end
|
end
|
||||||
@ -97,7 +131,7 @@ defmodule GildedRoseTest do
|
|||||||
test "brie quality _ greater than 0 days left " do
|
test "brie quality _ greater than 0 days left " do
|
||||||
days_left = 1
|
days_left = 1
|
||||||
initial_quality = 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: 0, quality: 1}
|
assert brie === %Item{name: @brie, sell_in: 0, quality: 1}
|
||||||
end
|
end
|
||||||
@ -106,7 +140,7 @@ defmodule GildedRoseTest do
|
|||||||
test "brie quality _ past sell in day" do
|
test "brie quality _ past sell in day" do
|
||||||
days_left = 0
|
days_left = 0
|
||||||
initial_quality = 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}
|
assert brie === %Item{name: @brie, sell_in: -1, quality: 2}
|
||||||
end
|
end
|
||||||
@ -114,7 +148,7 @@ defmodule GildedRoseTest do
|
|||||||
test "sulfuras quality _ any days left" do
|
test "sulfuras quality _ any days left" do
|
||||||
days_left = 20
|
days_left = 20
|
||||||
initial_quality = 40
|
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}
|
assert sulfuras === %Item{name: @sulfuras, sell_in: 20, quality: 80}
|
||||||
end
|
end
|
||||||
@ -122,7 +156,7 @@ defmodule GildedRoseTest do
|
|||||||
test "sulfuras quality _ lengendary quality" do
|
test "sulfuras quality _ lengendary quality" do
|
||||||
days_left = 20
|
days_left = 20
|
||||||
initial_quality = 100
|
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}
|
assert sulfuras === %Item{name: @sulfuras, sell_in: 20, quality: 80}
|
||||||
end
|
end
|
||||||
@ -136,7 +170,8 @@ defmodule GildedRoseTest do
|
|||||||
%Item{name: @sulfuras, sell_in: 5, quality: 80},
|
%Item{name: @sulfuras, sell_in: 5, quality: 80},
|
||||||
%Item{name: @passes, sell_in: 0, quality: 50},
|
%Item{name: @passes, sell_in: 0, quality: 50},
|
||||||
%Item{name: @brie, 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
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user