From 75fa4869c0a6aff45779a700c2a2dd36584576aa Mon Sep 17 00:00:00 2001 From: ollie beney Date: Thu, 5 Nov 2020 17:03:15 +0000 Subject: [PATCH] found and fixed bug where quality could go above 50 and below 0 when change increment was greater than one --- ruby/lib/gilded_rose.rb | 14 +++++++++---- ruby/spec/gilded_rose_spec.rb | 39 ++++++++++++++++++++++++++++++++--- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/ruby/lib/gilded_rose.rb b/ruby/lib/gilded_rose.rb index 6c071a98..ced8d0c2 100644 --- a/ruby/lib/gilded_rose.rb +++ b/ruby/lib/gilded_rose.rb @@ -12,6 +12,8 @@ class GildedRose when brie?(item) update_brie_quality(item) item.sell_in -= 1 + when conjured?(item) + 2.times {update_normal_quality(item)} end end end @@ -21,9 +23,9 @@ class GildedRose when (-(Float::INFINITY)..0) item.quality = 0 when 0..5 - item.quality += 3 + 3.times { item.quality += 1 if item.quality < 50 } when 6..10 - item.quality += 2 + 2.times { item.quality += 1 if item.quality < 50 } when 10..Float::INFINITY item.quality += 1 end @@ -31,7 +33,7 @@ class GildedRose def self.update_normal_quality(item) if item.sell_in < 0 - item.quality -= 2 unless item.quality.zero? + 2.times { item.quality -= 1 unless item.quality.zero?} else item.quality -= 1 unless item.quality.zero? end @@ -57,8 +59,12 @@ class GildedRose !item.name.downcase.match(/backstage/).nil? end + def self.conjured?(item) + !item.name.downcase.match(/conjured/).nil? + end + def self.special_item?(item) - ( brie?(item) || backstage?(item) || sulfuras?(item)) + ( brie?(item) || backstage?(item) || conjured?(item) || sulfuras?(item)) end diff --git a/ruby/spec/gilded_rose_spec.rb b/ruby/spec/gilded_rose_spec.rb index dcad3ac8..17abbb71 100644 --- a/ruby/spec/gilded_rose_spec.rb +++ b/ruby/spec/gilded_rose_spec.rb @@ -36,6 +36,8 @@ let(:sulfarus) { Item.new('Sulfuras, Hand of Ragnaros', 50, 80) } end end + + describe 'Aged Brie input' do it 'increases in quality as it ages' do items = [Item.new("Aged Brie", 25, 45)] @@ -89,7 +91,37 @@ let(:sulfarus) { Item.new('Sulfuras, Hand of Ragnaros', 50, 80) } expect(items.first.quality).to eq 0 end end - end + + describe 'conjured input' do + it "should degrade twice as fast as normal items" do + items = [Item.new("Conjured Armour", 10, 15)] + GildedRose.update_quality(items) + expect(items.first.quality).to eq 13 + end + + it "should not degrade past 0" do + items = [Item.new("Conjured Armour", 10, 1)] + GildedRose.update_quality(items) + expect(items.first.quality).to eq 0 + end + + it "should degrade by 4 when sell in has passed" do + items = [Item.new("Conjured Armour", -1, 17)] + GildedRose.update_quality(items) + expect(items.first.quality).to eq 13 + end + + it "still should not degrade past 0 when sell in has passed" do + items = [Item.new("Conjured Armour", -1, 3)] + GildedRose.update_quality(items) + expect(items.first.quality).to eq 0 + end + end + + + + +end describe '#update_normal_quality' do it 'updates the quality of a normal item' do item_double = double :item, name: "potato", sell_in: 1, quality: 3 @@ -149,14 +181,14 @@ let(:sulfarus) { Item.new('Sulfuras, Hand of Ragnaros', 50, 80) } it 'increases in quality by 2 when sellin < 10 days' do items_double = double :item, name: "Backstage passes to a TAFKAL80ETC concert", sell_in: 9, quality: 20 - expect(items_double).to receive(:quality=).with(22) + expect(items_double).to receive(:quality=).with(21).twice GildedRose.update_backstage_quality(items_double) end it 'increases by 3 when sellin < 5' do items_double = double :item, name: "Backstage passes to a TAFKAL80ETC concert", sell_in: 4, quality: 20 - expect(items_double).to receive(:quality=).with(23) + expect(items_double).to receive(:quality=).with(21).exactly(3).times GildedRose.update_backstage_quality(items_double) end @@ -211,6 +243,7 @@ let(:sulfarus) { Item.new('Sulfuras, Hand of Ragnaros', 50, 80) } expect(GildedRose.backstage?(item_double)).to eq false end end +