mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 14:31:28 +00:00
Extract 'Aged Brie'
Also noticed I made a mistake in some specs, would normally optimise spec code later on. Added an extra test for when sell_in is 1 for safety as it depends on the order of operations in the extraction I make.
This commit is contained in:
parent
6d4bc3f8af
commit
3d86d3d0ef
@ -7,6 +7,8 @@ class GildedRose
|
||||
def update_quality
|
||||
@items.each do |item|
|
||||
case item.name
|
||||
when 'Aged Brie'
|
||||
update_aged_brie_quality(item)
|
||||
when 'Sulfuras, Hand of Ragnaros'
|
||||
update_sulfuras_quality(item)
|
||||
else
|
||||
@ -51,6 +53,14 @@ class GildedRose
|
||||
end
|
||||
end
|
||||
|
||||
def update_aged_brie_quality(item)
|
||||
item.sell_in -= 1
|
||||
|
||||
item.quality += 1
|
||||
item.quality += 1 if item.sell_in.negative?
|
||||
item.quality = 50 if item.quality > 50
|
||||
end
|
||||
|
||||
def update_sulfuras_quality(item); end
|
||||
end
|
||||
|
||||
|
||||
@ -37,6 +37,20 @@ describe GildedRose do
|
||||
end
|
||||
end
|
||||
|
||||
context 'when 1 day left' do
|
||||
let(:sell_in) { 1 }
|
||||
|
||||
it 'lowers quality by 1' do
|
||||
subject.update_quality
|
||||
expect(items[0].quality).to eq 2
|
||||
end
|
||||
|
||||
it 'lowers sell_in by 1' do
|
||||
subject.update_quality
|
||||
expect(items[0].sell_in).to eq 0
|
||||
end
|
||||
end
|
||||
|
||||
it 'does never lower the quality below 0' do
|
||||
items = [Item.new(item_name, sell_in, 0)]
|
||||
subject.update_quality
|
||||
@ -60,6 +74,20 @@ describe GildedRose do
|
||||
end
|
||||
end
|
||||
|
||||
context 'when 1 day left' do
|
||||
let(:sell_in) { 1 }
|
||||
|
||||
it 'does not lower quality by 1' do
|
||||
subject.update_quality
|
||||
expect(items[0].quality).to eq 80
|
||||
end
|
||||
|
||||
it 'does not lower sell_in' do
|
||||
subject.update_quality
|
||||
expect(items[0].sell_in).to eq 1
|
||||
end
|
||||
end
|
||||
|
||||
context 'when sell by date has passed' do
|
||||
let(:sell_in) { 0 }
|
||||
|
||||
@ -104,9 +132,23 @@ describe GildedRose do
|
||||
end
|
||||
end
|
||||
|
||||
context 'when 1 day left' do
|
||||
let(:sell_in) { 1 }
|
||||
|
||||
it 'increases quality by 1' do
|
||||
subject.update_quality
|
||||
expect(items[0].quality).to eq 4
|
||||
end
|
||||
|
||||
it 'lowers sell_in by 1' do
|
||||
subject.update_quality
|
||||
expect(items[0].sell_in).to eq 0
|
||||
end
|
||||
end
|
||||
|
||||
it 'does never raise the quality above 50' do
|
||||
items = [Item.new(item_name, sell_in, 50)]
|
||||
subject.update_quality
|
||||
GildedRose.new(items).update_quality
|
||||
expect(items[0].quality).to eq 50
|
||||
end
|
||||
end
|
||||
@ -143,6 +185,20 @@ describe GildedRose do
|
||||
end
|
||||
end
|
||||
|
||||
context 'when 1 day left' do
|
||||
let(:sell_in) { 1 }
|
||||
|
||||
it 'increases quality by 1' do
|
||||
subject.update_quality
|
||||
expect(items[0].quality).to eq 6
|
||||
end
|
||||
|
||||
it 'lowers sell_in by 1' do
|
||||
subject.update_quality
|
||||
expect(items[0].sell_in).to eq 0
|
||||
end
|
||||
end
|
||||
|
||||
context 'when sell by date has passed' do
|
||||
let(:sell_in) { 0 }
|
||||
|
||||
@ -159,7 +215,7 @@ describe GildedRose do
|
||||
|
||||
it 'does never raise the quality above 50' do
|
||||
items = [Item.new(item_name, sell_in, 50)]
|
||||
subject.update_quality
|
||||
GildedRose.new(items).update_quality
|
||||
expect(items[0].quality).to eq 50
|
||||
end
|
||||
end
|
||||
@ -179,6 +235,20 @@ describe GildedRose do
|
||||
end
|
||||
end
|
||||
|
||||
context 'when 1 day left' do
|
||||
let(:sell_in) { 1 }
|
||||
|
||||
it 'lowers quality by 2' do
|
||||
subject.update_quality
|
||||
expect(items[0].quality).to eq 1
|
||||
end
|
||||
|
||||
it 'lowers sell_in by 1' do
|
||||
subject.update_quality
|
||||
expect(items[0].sell_in).to eq 2
|
||||
end
|
||||
end
|
||||
|
||||
context 'when sell by date has passed' do
|
||||
let(:sell_in) { 0 }
|
||||
let(:quality) { 6 }
|
||||
@ -196,7 +266,7 @@ describe GildedRose do
|
||||
|
||||
it 'does never lower the quality below 0' do
|
||||
items = [Item.new(item_name, sell_in, 0)]
|
||||
subject.update_quality
|
||||
GildedRose.new(items).update_quality
|
||||
expect(items[0].quality).to eq 0
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
Reference in New Issue
Block a user