Skip to content

Instantly share code, notes, and snippets.

@omarqureshi
Created March 18, 2014 18:39
Show Gist options
  • Save omarqureshi/9626553 to your computer and use it in GitHub Desktop.
Save omarqureshi/9626553 to your computer and use it in GitHub Desktop.
require './gilded_rose.rb'
require "rspec"
describe GildedRose do
before do
@gilded_rose = GildedRose.new
end
describe "Sulfuras, Hand of Ragnaros" do
before { @name = "Sulfuras, Hand of Ragnaros" }
it "should not update the quality of the hand of ragnaros" do
items = get_items(@gilded_rose)
old_item_quality = get_item(items, @name).quality
@gilded_rose.update_quality
items = get_items(@gilded_rose)
item_quality = get_item(items, @name).quality
old_item_quality.should == item_quality
end
it "should not change the sell in" do
@gilded_rose.update_quality
items = get_items(@gilded_rose)
get_item(items, @name).sell_in.should == 0
end
end
describe "Dexterity Vest" do
before { @name = "+5 Dexterity Vest" }
it "should change the quality of the dexterity vest" do
@gilded_rose.update_quality
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 19
item.sell_in.should == 9
end
it "should decrease quality by 10 after 10 days of not selling the dexterity vest" do
10.times { @gilded_rose.update_quality }
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 10
item.sell_in.should == 0
end
it "should decrease quality by 12 after 11 days of not selling the dexterity vest" do
items = get_items(@gilded_rose)
old_item_quality = get_item(items, @name).quality
11.times { @gilded_rose.update_quality }
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 8
item.sell_in.should == -1
end
it "should decrease quality to 0 after 20 days of not selling the dexterity vest" do
20.times { @gilded_rose.update_quality }
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 0
item.sell_in.should == -10
end
end
describe "Aged Brie" do
before { @name = "Aged Brie" }
it "should increase the quality of the aged brie after a day" do
@gilded_rose.update_quality
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 1
item.sell_in.should == 1
end
it "should have quality of 4 after 3 days" do
3.times { @gilded_rose.update_quality }
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 4
item.sell_in.should == -1
end
it "should have quality of 50 after 30 days" do
30.times { @gilded_rose.update_quality }
items = get_items(@gilded_rose)
item_quality = get_item(items, @name).quality
item_quality.should == 50
end
end
describe "Elixir of the Mongoose" do
before { @name = "Elixir of the Mongoose" }
it "should decrease the quality by 1 after a day" do
@gilded_rose.update_quality
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 6
item.sell_in.should == 4
end
it "should have a quality of 0 after 6 days" do
6.times {@gilded_rose.update_quality}
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 0
item.sell_in.should == -1
end
it "should have a quality of 0 after 7 days" do
7.times {@gilded_rose.update_quality}
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 0
item.sell_in.should == -2
end
end
describe "Backstage passes" do
before { @name = "Backstage passes to a TAFKAL80ETC concert" }
it "should increase the quality to 21 after 1 day" do
@gilded_rose.update_quality
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 21
item.sell_in.should == 14
end
it "should increase the quality to 27 after 6 days" do
6.times { @gilded_rose.update_quality }
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 27
item.sell_in.should == 9
end
it "should increase the quality to 27 after 11 days" do
11.times { @gilded_rose.update_quality }
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 38
item.sell_in.should == 4
end
it "should be worth 50 after 15 days" do
15.times { @gilded_rose.update_quality }
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 50
item.sell_in.should == 0
end
it "should be worthless after 16 days" do
16.times { @gilded_rose.update_quality }
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 0
item.sell_in.should == -1
end
end
describe "Conjured Mana Cake" do
before { @name = "Conjured Mana Cake" }
it "should decrease in quality by 2 after 1 day" do
@gilded_rose.update_quality
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 4
item.sell_in.should == 2
end
before { @name = "Conjured Mana Cake" }
it "should decrease in quality by 6 after 3 days" do
3.times { @gilded_rose.update_quality }
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 0
item.sell_in.should == 0
end
before { @name = "Conjured Mana Cake" }
it "should decrease in quality by 6 after 4 days" do
4.times { @gilded_rose.update_quality }
items = get_items(@gilded_rose)
item = get_item(items, @name)
item.quality.should == 0
item.sell_in.should == -1
end
end
private
def get_items(rose)
rose.instance_variable_get("@items")
end
def get_item(items, name)
items.detect { |i| i.name == name}
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment