Test covering of update_item function

This commit is contained in:
Daniele Megna 2017-08-20 16:51:06 +02:00
parent 7a043f63fb
commit a379eadb37

View File

@ -1,6 +1,101 @@
defmodule GildedRoseTest do
use ExUnit.Case
import GildedRose
test "begin the journey of refactoring" do
test "Items Quality decreases by 1" do
assert_update_item(
%Item{name: "Item name", sell_in: 9, quality: 3},
%Item{name: "Item name", sell_in: 8, quality: 2}
)
assert_update_item(
%Item{name: "Item name", sell_in: 1, quality: 7},
%Item{name: "Item name", sell_in: 0, quality: 6}
)
end
test "Once the sell by date has passed, Quality degrades twice as fast" do
assert_update_item(
%Item{name: "Item name", sell_in: 0, quality: 5},
%Item{name: "Item name", sell_in: -1, quality: 3}
)
assert_update_item(
%Item{name: "Item name", sell_in: -1, quality: 8},
%Item{name: "Item name", sell_in: -2, quality: 6}
)
end
test "The Quality of an item is never negative" do
assert_update_item(
%Item{name: "Item name", sell_in: 4, quality: 0},
%Item{name: "Item name", sell_in: 3, quality: 0}
)
assert_update_item(
%Item{name: "Item name", sell_in: 0, quality: 0},
%Item{name: "Item name", sell_in: -1, quality: 0}
)
assert_update_item(
%Item{name: "Item name", sell_in: -2, quality: 0},
%Item{name: "Item name", sell_in: -3, quality: 0}
)
end
test "Aged Brie actually increases in Quality the older it gets" do
assert_update_item(
%Item{name: "Aged Brie", sell_in: 12, quality: 8},
%Item{name: "Aged Brie", sell_in: 11, quality: 9}
)
assert_update_item(
%Item{name: "Aged Brie", sell_in: 4, quality: 6},
%Item{name: "Aged Brie", sell_in: 3, quality: 7}
)
assert_update_item(
%Item{name: "Aged Brie", sell_in: 1, quality: 10},
%Item{name: "Aged Brie", sell_in: 0, quality: 11}
)
end
test "[DISCOVERED] Quality of Aged Brie increases by 2 once the sell by date has passed" do
assert_update_item(
%Item{name: "Aged Brie", sell_in: 0, quality: 7},
%Item{name: "Aged Brie", sell_in: -1, quality: 9}
)
assert_update_item(
%Item{name: "Aged Brie", sell_in: -2, quality: 9},
%Item{name: "Aged Brie", sell_in: -3, quality: 11}
)
end
test "The Quality of an item is never more than 50" do
assert_update_item(
%Item{name: "Aged Brie", sell_in: 7, quality: 50},
%Item{name: "Aged Brie", sell_in: 6, quality: 50}
)
assert_update_item(
%Item{name: "Backstage passes to a TAFKAL80ETC concert", sell_in: 9, quality: 50},
%Item{name: "Backstage passes to a TAFKAL80ETC concert", sell_in: 8, quality: 50}
)
end
test "Quality of backstage passes increases by 2 when there are 10 days or less" do
assert_update_item(
%Item{name: "Backstage passes to a TAFKAL80ETC concert", sell_in: 9, quality: 1},
%Item{name: "Backstage passes to a TAFKAL80ETC concert", sell_in: 8, quality: 3}
)
end
test "Quality of backstag drops to 0 after the concert" do
assert_update_item(
%Item{name: "Backstage passes to a TAFKAL80ETC concert", sell_in: 0, quality: 12},
%Item{name: "Backstage passes to a TAFKAL80ETC concert", sell_in: -1, quality: 0}
)
assert_update_item(
%Item{name: "Backstage passes to a TAFKAL80ETC concert", sell_in: -2, quality: 10},
%Item{name: "Backstage passes to a TAFKAL80ETC concert", sell_in: -3, quality: 0}
)
end
defp assert_update_item(item, expected) do
assert update_item(item) == expected
end
end