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
|
def update_quality
|
||||||
@items.each do |item|
|
@items.each do |item|
|
||||||
case item.name
|
case item.name
|
||||||
|
when 'Aged Brie'
|
||||||
|
update_aged_brie_quality(item)
|
||||||
when 'Sulfuras, Hand of Ragnaros'
|
when 'Sulfuras, Hand of Ragnaros'
|
||||||
update_sulfuras_quality(item)
|
update_sulfuras_quality(item)
|
||||||
else
|
else
|
||||||
@ -51,6 +53,14 @@ class GildedRose
|
|||||||
end
|
end
|
||||||
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
|
def update_sulfuras_quality(item); end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -37,6 +37,20 @@ describe GildedRose do
|
|||||||
end
|
end
|
||||||
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
|
it 'does never lower the quality below 0' do
|
||||||
items = [Item.new(item_name, sell_in, 0)]
|
items = [Item.new(item_name, sell_in, 0)]
|
||||||
subject.update_quality
|
subject.update_quality
|
||||||
@ -60,6 +74,20 @@ describe GildedRose do
|
|||||||
end
|
end
|
||||||
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
|
context 'when sell by date has passed' do
|
||||||
let(:sell_in) { 0 }
|
let(:sell_in) { 0 }
|
||||||
|
|
||||||
@ -104,9 +132,23 @@ describe GildedRose do
|
|||||||
end
|
end
|
||||||
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
|
it 'does never raise the quality above 50' do
|
||||||
items = [Item.new(item_name, sell_in, 50)]
|
items = [Item.new(item_name, sell_in, 50)]
|
||||||
subject.update_quality
|
GildedRose.new(items).update_quality
|
||||||
expect(items[0].quality).to eq 50
|
expect(items[0].quality).to eq 50
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -143,6 +185,20 @@ describe GildedRose do
|
|||||||
end
|
end
|
||||||
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
|
context 'when sell by date has passed' do
|
||||||
let(:sell_in) { 0 }
|
let(:sell_in) { 0 }
|
||||||
|
|
||||||
@ -159,7 +215,7 @@ describe GildedRose do
|
|||||||
|
|
||||||
it 'does never raise the quality above 50' do
|
it 'does never raise the quality above 50' do
|
||||||
items = [Item.new(item_name, sell_in, 50)]
|
items = [Item.new(item_name, sell_in, 50)]
|
||||||
subject.update_quality
|
GildedRose.new(items).update_quality
|
||||||
expect(items[0].quality).to eq 50
|
expect(items[0].quality).to eq 50
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -179,6 +235,20 @@ describe GildedRose do
|
|||||||
end
|
end
|
||||||
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
|
context 'when sell by date has passed' do
|
||||||
let(:sell_in) { 0 }
|
let(:sell_in) { 0 }
|
||||||
let(:quality) { 6 }
|
let(:quality) { 6 }
|
||||||
@ -196,7 +266,7 @@ describe GildedRose do
|
|||||||
|
|
||||||
it 'does never lower the quality below 0' do
|
it 'does never lower the quality below 0' do
|
||||||
items = [Item.new(item_name, sell_in, 0)]
|
items = [Item.new(item_name, sell_in, 0)]
|
||||||
subject.update_quality
|
GildedRose.new(items).update_quality
|
||||||
expect(items[0].quality).to eq 0
|
expect(items[0].quality).to eq 0
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user