diff --git a/ruby/gilded_rose_spec.rb b/ruby/gilded_rose_spec.rb deleted file mode 100644 index 269fe1b0..00000000 --- a/ruby/gilded_rose_spec.rb +++ /dev/null @@ -1,13 +0,0 @@ -require File.join(File.dirname(__FILE__), 'gilded_rose') - -describe GildedRose do - - describe "#update_quality" do - it "does not change the name" do - items = [Item.new("foo", 0, 0)] - GildedRose.new(items).update_quality() - expect(items[0].name).to eq "fixme" - end - end - -end diff --git a/ruby/gilded_rose_tests.rb b/ruby/gilded_rose_tests.rb deleted file mode 100644 index 2e1b70d1..00000000 --- a/ruby/gilded_rose_tests.rb +++ /dev/null @@ -1,12 +0,0 @@ -require File.join(File.dirname(__FILE__), 'gilded_rose') -require 'test/unit' - -class TestUntitled < Test::Unit::TestCase - - def test_foo - items = [Item.new("foo", 0, 0)] - GildedRose.new(items).update_quality() - assert_equal items[0].name, "fixme" - end - -end \ No newline at end of file diff --git a/ruby/specs/gilded_rose_spec.rb b/ruby/specs/gilded_rose_spec.rb new file mode 100644 index 00000000..77e994c0 --- /dev/null +++ b/ruby/specs/gilded_rose_spec.rb @@ -0,0 +1,204 @@ +require_relative '../gilded_rose' + +describe GildedRose do + let(:quality) { 3 } + let(:sell_in) { 3 } + let(:item_name) { 'Elixir of the Mongoose' } + let(:item) { Item.new(item_name, sell_in, quality) } + let(:items) { [item] } + + subject { GildedRose.new(items) } + + describe '#update_quality' do + context "when item is regular like e.g. 'Elixir of the Mongoose'" do + context 'when sell by date has not passed' do + 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 2 + end + end + + context 'when sell by date has passed' do + let(:sell_in) { 0 } + + 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 -1 + end + end + + it 'does never lower the quality below 0' do + items = [Item.new(item_name, sell_in, 0)] + subject.update_quality + expect(items[0].quality).to eq 0 + end + end + + context "when item name is 'Sulfuras, Hand of Ragnaros'" do + let(:item_name) { 'Sulfuras, Hand of Ragnaros' } + let(:quality) { 80 } + + context 'when sell by date has not passed' do + 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 3 + end + end + + context 'when sell by date has passed' do + let(:sell_in) { 0 } + + 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 0 + end + end + end + + context "when item name is 'Aged Brie'" do + let(:item_name) { 'Aged Brie' } + + context 'when sell by date has not passed' do + 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 2 + end + end + + context 'when sell by date has passed' do + let(:sell_in) { 0 } + + it 'increases quality by 2' do + subject.update_quality + expect(items[0].quality).to eq 5 + end + + it 'lowers sell_in by 1' do + subject.update_quality + expect(items[0].sell_in).to eq -1 + end + end + + it 'does never raise the quality above 50' do + items = [Item.new(item_name, sell_in, 50)] + subject.update_quality + expect(items[0].quality).to eq 50 + end + end + + context "when item name is 'Backstage passes to a TAFKAL80ETC concert'" do + let(:item_name) { 'Backstage passes to a TAFKAL80ETC concert' } + + context 'when sell by date has not passed' do + context 'when 10 or less days remaining' do + let(:sell_in) { 10 } + + it 'increases quality by 2' do + subject.update_quality + expect(items[0].quality).to eq 5 + end + + it 'lowers sell_in by 1' do + subject.update_quality + expect(items[0].sell_in).to eq 9 + end + end + + context 'when 5 or less days remaining' do + let(:sell_in) { 5 } + it 'increases quality by 3' 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 4 + end + end + end + + context 'when sell by date has passed' do + let(:sell_in) { 0 } + + it 'increases quality by 2' do + subject.update_quality + expect(items[0].quality).to eq 0 + end + + it 'lowers sell_in by 1' do + subject.update_quality + expect(items[0].sell_in).to eq -1 + end + end + + it 'does never raise the quality above 50' do + items = [Item.new(item_name, sell_in, 50)] + subject.update_quality + expect(items[0].quality).to eq 50 + end + end + + xcontext "when item name is 'Conjured Mana Cake'" do + let(:item_name) { 'Conjured Mana Cake' } + + context 'when sell by date has not passed' do + 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 } + + it 'lowers quality by 4' 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 -1 + end + end + + it 'does never lower the quality below 0' do + items = [Item.new(item_name, sell_in, 0)] + subject.update_quality + expect(items[0].quality).to eq 0 + end + end + end +end