tests refacto only test boundaries

This commit is contained in:
Nelson 2021-01-29 15:41:40 -07:00
parent 9aafcea689
commit 5998bc8afa

View File

@ -7,11 +7,11 @@ defmodule GildedRoseTest do
@sulfuras "Sulfuras, Hand of Ragnaros" @sulfuras "Sulfuras, Hand of Ragnaros"
@concert_ticket "Backstage passes to a TAFKAL80ETC concert" @concert_ticket "Backstage passes to a TAFKAL80ETC concert"
def create_item() do def create_items(sell_in, quality) do
[ [
%Item{name: @sulfuras, sell_in: 13, quality: 1}, %Item{name: @sulfuras, sell_in: sell_in, quality: quality},
%Item{name: @concert_ticket, sell_in: 13, quality: 1}, %Item{name: @concert_ticket, sell_in: sell_in, quality: quality},
%Item{name: @brie, sell_in: 13, quality: 1}, %Item{name: @brie, sell_in: sell_in, quality: quality},
] ]
end end
@ -21,185 +21,67 @@ defmodule GildedRoseTest do
elapse_days(update_quality(items), days - 1) elapse_days(update_quality(items), days - 1)
end end
test "1 day pass" do # Price degradation as tests pass
result = create_item() |> elapse_days(1)
test "all items quality _ 11 or more days left" do
days_left = 11
initial_quality = 0
result = create_items(days_left, initial_quality) |> elapse_days(1)
assert result === [ assert result === [
%Item{name: @sulfuras, sell_in: 13, quality: 1}, %Item{name: @sulfuras, sell_in: 11, quality: 0},
%Item{name: @concert_ticket, sell_in: 12, quality: 2}, %Item{name: @concert_ticket, sell_in: 10, quality: 1},
%Item{name: @brie, sell_in: 12, quality: 2} %Item{name: @brie, sell_in: 10, quality: 1}
] ]
end end
test "2 day pass" do test "ticket quality _ 10 days left" do
result = create_item() |> elapse_days(2) days_left = 10
assert result === [ initial_quality = 0
%Item{name: @sulfuras, sell_in: 13, quality: 1}, [_, ticket, _] = create_items(days_left, initial_quality) |> elapse_days(1)
%Item{name: @concert_ticket, sell_in: 11, quality: 3},
%Item{name: @brie, sell_in: 11, quality: 3} assert ticket === %Item{name: @concert_ticket, sell_in: 9, quality: 2}
]
end
test "3 day pass" do
result = create_item() |> elapse_days(3)
assert result === [
%Item{name: @sulfuras, sell_in: 13, quality: 1},
%Item{name: @concert_ticket, sell_in: 10, quality: 4},
%Item{name: @brie, sell_in: 10, quality: 4}
]
end end
test "4 day pass" do test "ticket quality _ 5 days leff" do
result = create_item() |> elapse_days(4) days_left = 5
assert result === [ initial_quality = 0
%Item{name: @sulfuras, sell_in: 13, quality: 1}, [_, ticket, _] = create_items(days_left, initial_quality) |> elapse_days(1)
%Item{name: @concert_ticket, sell_in: 9, quality: 6}, # Here the tickets start increasing by 2
%Item{name: @brie, sell_in: 9, quality: 5} assert ticket === %Item{name: @concert_ticket, sell_in: 4, quality: 3}
]
end end
test "5 day pass" do test "ticket quality _ 0 days left" do
result = create_item() |> elapse_days(5) days_left = 0
assert result === [ initial_quality = 0
%Item{name: @sulfuras, sell_in: 13, quality: 1}, [_, ticket, _] = create_items(days_left, initial_quality) |> elapse_days(1)
%Item{name: @concert_ticket, sell_in: 8, quality: 8},
%Item{name: @brie, sell_in: 8, quality: 6}
]
end
test "6 day pass" do assert ticket === %Item{name: @concert_ticket, sell_in: -1, quality: 0}
result = create_item() |> elapse_days(6)
assert result === [
%Item{name: @sulfuras, sell_in: 13, quality: 1},
%Item{name: @concert_ticket, sell_in: 7, quality: 10},
%Item{name: @brie, sell_in: 7, quality: 7}
]
end end
test "7 day pass" do test "brie quality _ greater than 0 days left " do
result = create_item() |> elapse_days(7) days_left = 1
assert result === [ initial_quality = 0
%Item{name: @sulfuras, sell_in: 13, quality: 1}, [_, _, brie] = create_items(days_left, initial_quality) |> elapse_days(1)
%Item{name: @concert_ticket, sell_in: 6, quality: 12},
%Item{name: @brie, sell_in: 6, quality: 8} assert brie === %Item{name: @brie, sell_in: 0, quality: 1}
]
end end
test "8 day pass" do
result = create_item() |> elapse_days(8) test "brie quality _ 0 days left" do
assert result === [ days_left = 0
%Item{name: @sulfuras, sell_in: 13, quality: 1}, initial_quality = 0
%Item{name: @concert_ticket, sell_in: 5, quality: 14}, [_, _, brie] = create_items(days_left, initial_quality) |> elapse_days(1)
%Item{name: @brie, sell_in: 5, quality: 9}
] assert brie === %Item{name: @brie, sell_in: -1, quality: 2}
end end
test "9 day pass" do test "sulfuras quality _ any days left" do
result = create_item() |> elapse_days(9) days_left = 20
assert result === [ initial_quality = 40
%Item{name: @sulfuras, sell_in: 13, quality: 1}, [sulfuras, _, _] = create_items(days_left, initial_quality) |> elapse_days(40)
%Item{name: @concert_ticket, sell_in: 4, quality: 17},
%Item{name: @brie, sell_in: 4, quality: 10}
]
end
test "10 day pass" do assert sulfuras === %Item{name: @sulfuras, sell_in: 20, quality: 40}
result = create_item() |> elapse_days(10)
assert result === [
%Item{name: @sulfuras, sell_in: 13, quality: 1},
%Item{name: @concert_ticket, sell_in: 3, quality: 20},
%Item{name: @brie, sell_in: 3, quality: 11}
]
end
test "11 day pass" do
result = create_item() |> elapse_days(11)
assert result === [
%Item{name: @sulfuras, sell_in: 13, quality: 1},
%Item{name: @concert_ticket, sell_in: 2, quality: 23},
%Item{name: @brie, sell_in: 2, quality: 12}
]
end
test "12 day pass" do
result = create_item() |> elapse_days(12)
assert result === [
%Item{name: @sulfuras, sell_in: 13, quality: 1},
%Item{name: @concert_ticket, sell_in: 1, quality: 26},
%Item{name: @brie, sell_in: 1, quality: 13}
]
end
test "13 day pass" do
result = create_item() |> elapse_days(13)
assert result === [
%Item{name: @sulfuras, sell_in: 13, quality: 1},
%Item{name: @concert_ticket, sell_in: 0, quality: 29},
%Item{name: @brie, sell_in: 0, quality: 14}
]
end
test "14 day pass" do
result = create_item() |> elapse_days(14)
assert result === [
%Item{name: @sulfuras, sell_in: 13, quality: 1},
%Item{name: @concert_ticket, sell_in: -1, quality: 0},
%Item{name: @brie, sell_in: -1, quality: 16} # After days are over brie quality doubles
]
end
test "15 day pass" do
result = create_item() |> elapse_days(15)
assert result === [
%Item{name: @sulfuras, sell_in: 13, quality: 1},
%Item{name: @concert_ticket, sell_in: -2, quality: 0},
%Item{name: @brie, sell_in: -2, quality: 18},
]
end
test "16 day pass" do
result = create_item() |> elapse_days(16)
assert result === [
%Item{name: @sulfuras, sell_in: 13, quality: 1},
%Item{name: @concert_ticket, sell_in: -3, quality: 0},
%Item{name: @brie, sell_in: -3, quality: 20},
]
end
test "17 day pass" do
result = create_item() |> elapse_days(17)
assert result === [
%Item{name: @sulfuras, sell_in: 13, quality: 1},
%Item{name: @concert_ticket, sell_in: -4, quality: 0},
%Item{name: @brie, sell_in: -4, quality: 22},
]
end
test "18 day pass" do
result = create_item() |> elapse_days(18)
assert result === [
%Item{name: @sulfuras, sell_in: 13, quality: 1},
%Item{name: @concert_ticket, sell_in: -5, quality: 0},
%Item{name: @brie, sell_in: -5, quality: 24},
]
end
test "19 day pass" do
result = create_item() |> elapse_days(19)
assert result === [
%Item{name: @sulfuras, sell_in: 13, quality: 1},
%Item{name: @concert_ticket, sell_in: -6, quality: 0},
%Item{name: @brie, sell_in: -6, quality: 26},
]
end
test "20 day pass" do
result = create_item() |> elapse_days(20)
assert result === [
%Item{name: @sulfuras, sell_in: 13, quality: 1},
%Item{name: @concert_ticket, sell_in: -7, quality: 0},
%Item{name: @brie, sell_in: -7, quality: 28},
]
end end
end end