GildedRose-Refactoring-Kata/ruby/gilded_rose_spec.rb
2019-03-07 15:32:07 +00:00

90 lines
3.2 KiB
Ruby

require File.join(File.dirname(__FILE__), 'gilded_rose')
describe GildedRose do
describe "#update_quality" do
it "does not change the name" do
# Item#initialize(name, sell_in, quality)
items = [Item.new("foo", 0, 0)]
GildedRose.new(items).update_quality()
expect(items[0].name).to eq "foo"
end
it "degrades twice as fast when sell by date has passed" do
items = [Item.new("foo", 1, 20)]
GildedRose.new(items).update_quality()
expect(items[0].quality).to eq 19
expect(items[0].sell_in).to eq 0 # One day has passed, quality degraded by one
GildedRose.new(items).update_quality()
expect(items[0].quality).to eq 17 # Sellin has passed, quality degrade by two
end
it "never degrades quality to a negative number" do
items = [Item.new("foo", 1, 1)]
10.times { GildedRose.new(items).update_quality() }
expect(items[0].sell_in).to eq -9
expect(items[0].quality).to eq 0
end
it "'Aged Brie' actually increases in Quality the older it gets" do
items = [Item.new("Aged Brie", 20, 10)]
GildedRose.new(items).update_quality()
expect(items[0].quality).to eq 11
10.times { GildedRose.new(items).update_quality() }
expect(items[0].quality).to eq 21
end
it "Quality of an item never goes above 50" do
items = [Item.new("Aged Brie", 1, 49)]
GildedRose.new(items).update_quality()
expect(items[0].quality).to eq 50
10.times { GildedRose.new(items).update_quality() }
expect(items[0].quality).to eq 50
end
it "'Sulfuras', being a legendary item, never has to be sold or decreases in Quality" do
items = [Item.new("Sulfuras, Hand of Ragnaros", 1, 49)]
item = items.first
GildedRose.new(items).update_quality()
expect(items[0].sell_in).to eq 1
expect(items[0].quality).to eq 49
end
it "'Backstage passes', like aged brie, increases in Quality as its SellIn value approaches" do
items = [Item.new("Backstage passes to a TAFKAL80ETC concert", 20, 10)]
GildedRose.new(items).update_quality()
expect(items[0].quality).to eq 11
end
it "'Backstage passes', quality increases by 2 when there are 10 days or less" do
items = [Item.new("Backstage passes to a TAFKAL80ETC concert", 10, 11)]
GildedRose.new(items).update_quality()
expect(items[0].quality).to eq 13
expect(items[0].sell_in).to eq 9
4.times {GildedRose.new(items).update_quality()}
expect(items[0].quality).to eq 21
expect(items[0].sell_in).to eq 5
end
it "'Backstage passes', quality increases by 3 when there are 5 days or less" do
items = [Item.new("Backstage passes to a TAFKAL80ETC concert", 5, 30)]
GildedRose.new(items).update_quality()
expect(items[0].quality).to eq 33
expect(items[0].sell_in).to eq 4
end
it "'Backstage passes', quality drops to 0 after the concert" do
items = [Item.new("Backstage passes to a TAFKAL80ETC concert", 1, 30)]
GildedRose.new(items).update_quality()
expect(items[0].quality).to eq 33
expect(items[0].sell_in).to eq 0
GildedRose.new(items).update_quality()
expect(items[0].quality).to eq 0
expect(items[0].sell_in).to eq -1
end
end
end