mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 22:41:30 +00:00
102 lines
3.4 KiB
Elixir
102 lines
3.4 KiB
Elixir
defmodule GildedRoseTest do
|
|
use ExUnit.Case
|
|
import GildedRose
|
|
|
|
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
|