GildedRose-Refactoring-Kata/ruby/spec/gilded_rose_spec.rb
2020-11-05 17:34:00 +00:00

126 lines
4.5 KiB
Ruby

# frozen_string_literal: true
# rubocop: disable all
require 'gilded_rose'
describe GildedRose do
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
expect(item_double).to receive(:quality=).with(2)
GildedRose.update_normal_quality(item_double)
end
it 'does not update quality if quality == 0' do
item_double = double :item, name: 'potato', sell_in: 1, quality: 0
expect(item_double).not_to receive(:quality=).with(-1)
GildedRose.update_normal_quality(item_double)
end
end
describe '#selfarus?' do
it 'returns true on a selfarus item' do
sulfuras_double = double :selfarus, name: 'Sulfuras', sell_in: 50, quality: 80
expect(GildedRose.sulfuras?(sulfuras_double)).to eq true
end
it 'returns false on a non sulfuras item' do
item_double = double :item, name: 'potato', sell_in: 1, quality: 0
expect(GildedRose.sulfuras?(item_double)).to eq false
end
end
describe '#special_item?' do
it 'returns true for aged brie' do
item_double = double :item, name: 'Aged Brie'
expect(GildedRose.special_item?(item_double)).to eq true
end
it 'returns true for backstage passes' do
item_double = double :item, name: 'Backstage passes to a TAFKAL80ETC concert'
expect(GildedRose.special_item?(item_double)).to eq true
end
it 'returns true for sulfuras' do
sulfuras_double = double :selfarus, name: 'Sulfuras'
expect(GildedRose.special_item?(sulfuras_double)).to eq true
end
it 'returns false on potato' do
item_double = double :item, name: 'potato'
expect(GildedRose.special_item?(item_double)).to eq false
end
end
describe '#update_backstage_quality' do
it 'increases in quality by one when sellIn is > 10 days' do
items_double = double :item, name: 'Backstage passes to a TAFKAL80ETC concert', sell_in: 15, quality: 20
expect(items_double).to receive(:quality=).with(21)
GildedRose.update_backstage_quality(items_double)
end
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(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(21).exactly(3).times
GildedRose.update_backstage_quality(items_double)
end
it 'decreases to 0 when sellin == 0' do
items_double = double :item, name: 'Backstage passes to a TAFKAL80ETC concert', sell_in: 0, quality: 20
expect(items_double).to receive(:quality=).with(0)
GildedRose.update_backstage_quality(items_double)
end
end
describe '#update_brie_quality' do
it 'should add one to the quality each day ' do
brie_double = double :item, name: 'Aged Brie', sell_in: 30, quality: 15
expect(brie_double).to receive(:quality=).with(16)
GildedRose.update_brie_quality(brie_double)
end
it 'should not let quality go past 50' do
brie_double = double :item, name: 'Aged Brie', sell_in: 30, quality: 50
expect(brie_double).not_to receive(:quality=).with(51)
GildedRose.update_brie_quality(brie_double)
end
it 'should increase by two when sellin <= 0' do
brie_double = double :item, name: 'Aged Brie', sell_in: 0, quality: 2
expect(brie_double).to receive(:quality=).with(4)
GildedRose.update_brie_quality(brie_double)
end
end
describe '#brie?' do
it 'returns true on a brie item' do
brie_double = double :brie, name: 'Aged Brie', sell_in: 50, quality: 80
expect(GildedRose.brie?(brie_double)).to eq true
end
it 'returns false on a non brie item' do
item_double = double :item, name: 'potato', sell_in: 1, quality: 0
expect(GildedRose.sulfuras?(item_double)).to eq false
end
end
describe '#backstage?' do
it 'returns true on a backstage item' do
backstage_double = double :item, name: 'Backstage passes to a TAFKAL80ETC concert'
expect(GildedRose.backstage?(backstage_double)).to eq true
end
it 'returns false on a non brie item' do
item_double = double :item, name: 'potato', sell_in: 1, quality: 0
expect(GildedRose.backstage?(item_double)).to eq false
end
end
end
# rubocop:enable all