def test_foo(self): items = [Item("foo", 0, 0)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals("foo", items[0].name) self.assertEqual(0, items[0].quality) self.assertEqual(-1, items[0].sell_in)
def test_quality_is_never_negative(self): items = [ItemFactory("foo", 3, 1)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertTrue(items[0].quality == 0) gilded_rose.update_quality() self.assertTrue(items[0].quality == 0)
def test_QualityMax(self): items = [Item(name="+5 Dexterity Vest", sell_in=10, quality=20), Item(name="Aged Brie", sell_in=2, quality=0), Item(name="Elixir of the Mongoose", sell_in=5, quality=7), Item(name="Backstage passes to a TAFKAL80ETC concert", sell_in=15, quality=20), Item(name="Backstage passes to a TAFKAL80ETC concert", sell_in=10, quality=49), Item(name="Backstage passes to a TAFKAL80ETC concert", sell_in=5, quality=49), Item(name="Conjured Mana Cake", sell_in=3, quality=6), ] gilded_rose = GildedRose(items) #We test by running update on the input items until either # 1) quality has stabilized (success) # 2) quality of any item exceeds 50 (failure) # 3) 100 iterations have taken place (failure) is_stable = False num_iterations = 0 max_num_iters = 100 qualities_prev = gilded_rose.Qualities() while not is_stable: num_iterations += 1 self.assertLessEqual(num_iterations, max_num_iters, \ "Quality not stabilized after " + str(max_num_iters) + " iterations") gilded_rose.update_quality() qualities = gilded_rose.Qualities() is_stable = True for q, qp in zip(qualities, qualities_prev): self.assertLessEqual(q, gilded_rose.quality_max, "Quality exceeds max allowed") if q != qp: is_stable = False; qualities_prev = qualities
def test_increases_the_quality_by_three_of_the_products_that_get_better_as_they_age_when_there_are_5_days_or_less_left(self): item = Item("Backstage passes to a TAFKAL80ETC concert", 5, 15) gilded_rose = GildedRose([item]) gilded_rose.update_quality() self._assert_quality_and_sell_in(item, sell_in=4, quality=18)
def test_quality_zero_for_backstage_passes_and_brie_when_we_have_passed_the_sell_in_date(self): item = Item("Backstage passes to a TAFKAL80ETC concert", 0, 20) gilded_rose = GildedRose([item]) gilded_rose.update_quality() self._assert_quality_and_sell_in(item, sell_in=-1, quality=0)
def test_increase_quality_by_two_for_products_that_get_better_as_they_age_and_there_are_10_days_or_less_left(self): item = Item("Backstage passes to a TAFKAL80ETC concert", 8, 30) gilded_rose = GildedRose([item]) gilded_rose.update_quality() self._assert_quality_and_sell_in(item, sell_in=7, quality=32)
def test_backstage(self): items = [ Item("Backstage passes to a TAFKAL80ETC concert", 11, 30), Item("Backstage passes to a TAFKAL80ETC concert", 10, 30), Item("Backstage passes to a TAFKAL80ETC concert", 6, 30), Item("Backstage passes to a TAFKAL80ETC concert", 5, 30), Item("Backstage passes to a TAFKAL80ETC concert", -1, 30) ] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual(31, gilded_rose.items[0].quality) self.assertEqual(32, gilded_rose.items[1].quality) self.assertEqual(32, gilded_rose.items[2].quality) self.assertEqual(33, gilded_rose.items[3].quality) self.assertEqual(0, gilded_rose.items[4].quality) self.assertEqual(10, gilded_rose.items[0].sell_in) self.assertEqual(9, gilded_rose.items[1].sell_in) self.assertEqual(5, gilded_rose.items[2].sell_in) self.assertEqual(4, gilded_rose.items[3].sell_in) self.assertEqual(-2, gilded_rose.items[4].sell_in) # one more day gilded_rose.update_quality() self.assertEqual(33, gilded_rose.items[0].quality) self.assertEqual(34, gilded_rose.items[1].quality) self.assertEqual(35, gilded_rose.items[2].quality) self.assertEqual(36, gilded_rose.items[3].quality) self.assertEqual(0, gilded_rose.items[4].quality) self.assertEqual(9, gilded_rose.items[0].sell_in) self.assertEqual(8, gilded_rose.items[1].sell_in) self.assertEqual(4, gilded_rose.items[2].sell_in) self.assertEqual(3, gilded_rose.items[3].sell_in) self.assertEqual(-3, gilded_rose.items[4].sell_in)
def test_quality_decreases_faster_after_date_passed(self): items = [ItemFactory("foo", 2, 4)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(3, items[0].quality) gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(1, items[0].quality)
def test_quality_never_negative(self): item1 = Item("food", 0, 1) item2 = Item("food", 1, 0) gilded_rose1 = GildedRose(item1) gilded_rose2 = GildedRose(item2) gilded_rose1.update_quality() gilded_rose2.update_quality() self.assertEqual(gilded_rose1.item.quality, 0) self.assertEqual(gilded_rose2.item.quality, 0)
def test_quality_fifty_threshold(self): item1 = Item("Aged Brie", -2, 49.5) item2 = Item("Aged Brie", -2, 49) gilded_rose1 = GildedRose(item1) gilded_rose2 = GildedRose(item2) gilded_rose1.update_quality() gilded_rose2.update_quality() self.assertEqual(gilded_rose1.item.quality, 50) self.assertEqual(gilded_rose2.item.quality, 50)
def test_QualityBrie(self): items = [Item(name="Aged Brie", sell_in=10, quality=0), Item(name="Aged Brie", sell_in=10, quality=0), ] gilded_rose = GildedRose(items) gilded_rose.update_quality() qualities = gilded_rose.Qualities() for q in qualities: self.assertGreater(q, 0, "Brie quality did not increase")
def test_modified(item, tstexpect): gr = GildedRose(list([item])) print(gr.items) for expected in tstexpect: gr.update_quality() ref = gr.items[0] print(expected, ref.sell_in, ref.quality) assert expected == [ref.sell_in, ref.quality]
def test_decreses_by_one_the_quality_and_sell_in_for_regular_items(self): items = [ Item("+5 Dexterity Vest", 10, 20), Item("Conjured Mana Cake", 3,6) ] gilded_rose = GildedRose(items) gilded_rose.update_quality() self._assert_quality_and_sell_in(items[0], sell_in=9, quality=19) self._assert_quality_and_sell_in(items[1], sell_in=2, quality=5)
def test_decreases_the_quality_of_the_rpoducts_twice_as_fast_when_we_have_passed_the_sell_in_date(self): items = [ Item("+5 Dexterity Vest", 0, 20), Item("Conjured Mana Cake", 0, 6) ] gilded_rose = GildedRose(items) gilded_rose.update_quality() self._assert_quality_and_sell_in(items[0], sell_in=-1, quality=18) self._assert_quality_and_sell_in(items[1], sell_in=-1, quality=4)
def test_Sulfuras(self): items = [Item(name="Sulfuras, Hand of Ragnaros", sell_in=0, quality=80)] gilded_rose = GildedRose(items) quality_pre = gilded_rose.Qualities()[0] sell_in_pre = gilded_rose.SellIns()[0] gilded_rose.update_quality() quality_post = gilded_rose.Qualities()[0] sell_in_post = gilded_rose.SellIns()[0] self.assertEqual(quality_pre, quality_post, "Sulfuras quality has changed") self.assertEqual(sell_in_pre, sell_in_post, "Sulfuras sell-in value changed")
def test_increases_quality_by_one_for_products_that_get_better_as_they_age(self): items = [ Item("Aged Brie", 20, 30), Item("Backstage passes to a TAFKAL80ETC concert", 20, 30) ] gilded_rose = GildedRose(items) gilded_rose.update_quality() self._assert_quality_and_sell_in(items[0], sell_in=19, quality=31) self._assert_quality_and_sell_in(items[1], sell_in=19, quality=31)
def test_backstage_passes_drops_in_quality_after_date(self): items = [ItemFactory(name="Backstage passes to a TAFKAL80ETC concert", sell_in=2, quality=10)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(1, items[0].sell_in) self.assertEquals(13, items[0].quality) gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(0, items[0].sell_in) self.assertEquals(0, items[0].quality)
def test_backstage_passes_increases_in_quality_by_3(self): items = [ItemFactory(name="Backstage passes to a TAFKAL80ETC concert", sell_in=7, quality=10)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(6, items[0].sell_in) self.assertEquals(12, items[0].quality) gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(5, items[0].sell_in) self.assertEquals(15, items[0].quality)
def test_past_date(self): items = [ Item("Regular thing", 0, 4), Item("Other thing", 1, 2), Item("Widget 33", 1, 5) ] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual(2, gilded_rose.items[0].quality) self.assertEqual(1, gilded_rose.items[1].quality) self.assertEqual(4, gilded_rose.items[2].quality) gilded_rose.update_quality() self.assertEqual(0, gilded_rose.items[0].quality) self.assertEqual(0, gilded_rose.items[1].quality) self.assertEqual(2, gilded_rose.items[2].quality)
def test_DefaultQualityDec(self): items = [Item(name="+5 Dexterity Vest", sell_in=-1, quality=20), Item(name="Elixir of the Mongoose", sell_in=-1, quality=7), ] gilded_rose = GildedRose(items) #Test that the basic decrease is positive: self.assertGreater(gilded_rose.default_qual_dec, 0) #Now test that for ordinary items, the decrease doubles after the SellIn rate quality_pre = gilded_rose.Qualities() gilded_rose.update_quality() quality_post = gilded_rose.Qualities() for i in range(0, len(items)): self.assertEqual(quality_pre[i]-quality_post[i], 2*gilded_rose.default_qual_dec, \ "Quality decrement not doubling after sellIn==0")
def test_QualityConjured(self): items = [Item(name="Conjured Mana Cake", sell_in=10, quality=6), Item(name="Conjured Mana Cake", sell_in=-10, quality=6)] gilded_rose = GildedRose(items) qualities_pre = gilded_rose.Qualities() gilded_rose.update_quality() qualities_post = gilded_rose.Qualities() #Sell-In >=0 default_conj_dec = 2 * gilded_rose.default_qual_dec self.assertEqual(qualities_pre[0] - qualities_post[0], default_conj_dec, \ "Invalid Conjured item default decrement") #Sell-In < 0 overdue_conj_dec = 4 * gilded_rose.default_qual_dec self.assertEqual(qualities_pre[1] - qualities_post[1], overdue_conj_dec, \ "Invalid Conjured item overdue decrement")
def test_sulfuras(self): items = [ Item("Sulfuras, Hand of Ragnaros", 20, 20), Item("Sulfuras, Hand of Ragnaros", 0, 80), Item("Sulfuras, Hand of Ragnaros", -12, 0), Item("Sulfuras, Hand of Ragnaros", 2, 50), ] gilded_rose = GildedRose(items) for _ in range(50): gilded_rose.update_quality() self.assertEqual(20, gilded_rose.items[0].quality) self.assertEqual(80, gilded_rose.items[1].quality) self.assertEqual(0, gilded_rose.items[2].quality) self.assertEqual(50, gilded_rose.items[3].quality) self.assertEqual(20, gilded_rose.items[0].sell_in) self.assertEqual(0, gilded_rose.items[1].sell_in) self.assertEqual(-12, gilded_rose.items[2].sell_in) self.assertEqual(2, gilded_rose.items[3].sell_in)
def test_brie(self): items = [Item("Aged Brie", 2, 46)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual("Aged Brie", gilded_rose.items[0].name) self.assertEqual(47, gilded_rose.items[0].quality) gilded_rose.update_quality() self.assertEqual(48, gilded_rose.items[0].quality) gilded_rose.update_quality() #increase by 2 now self.assertEqual(50, gilded_rose.items[0].quality) gilded_rose.update_quality() self.assertEqual(50, gilded_rose.items[0].quality)
def test_SellIn(self): items = [ Item(name="+5 Dexterity Vest", sell_in=10, quality=20), Item(name="Aged Brie", sell_in=2, quality=0), Item(name="Elixir of the Mongoose", sell_in=5, quality=7), Item(name="Backstage passes to a TAFKAL80ETC concert", sell_in=15, quality=20), Item(name="Backstage passes to a TAFKAL80ETC concert", sell_in=10, quality=49), Item(name="Backstage passes to a TAFKAL80ETC concert", sell_in=5, quality=49), Item(name="Conjured Mana Cake", sell_in=3, quality=6), ] gilded_rose = GildedRose(items) sell_ins_pre = gilded_rose.SellIns() gilded_rose.update_quality() sell_ins_post = gilded_rose.SellIns() for i in range(0, len(items)): self.assertEqual(sell_ins_post[i] - sell_ins_pre[i], -1, \ "Sell-In value not decrementing")
def test_QualityZero(self): items = [Item(name="+5 Dexterity Vest", sell_in=10, quality=0), Item(name="Aged Brie", sell_in=10, quality=0), Item(name="Sulfuras, Hand of Ragnaros", sell_in=10, quality=0), Item(name="Elixir of the Mongoose", sell_in=10, quality=0), Item(name="Backstage passes to a TAFKAL80ETC concert", sell_in=10, quality=0), Item(name="Conjured Mana Cake", sell_in=10, quality=0), Item(name="+5 Dexterity Vest", sell_in=-10, quality=0), Item(name="Aged Brie", sell_in=-10, quality=0), Item(name="Sulfuras, Hand of Ragnaros", sell_in=-10, quality=0), Item(name="Elixir of the Mongoose", sell_in=-10, quality=0), Item(name="Backstage passes to a TAFKAL80ETC concert", sell_in=-10, quality=0), Item(name="Conjured Mana Cake", sell_in=-10, quality=0), ] gilded_rose = GildedRose(items) gilded_rose.update_quality() quality_post = gilded_rose.Qualities() for quality in quality_post: self.assertGreaterEqual(quality, 0, "Invalid quality decrease")
class GildedRoseTextTest(object): def __init__(self, items): self.items = items self.GildedRose = GildedRose(self.items) def run(self, days): self.printHead() for day in range(days): self.printDay(day) self.next_day() def next_day(self): self.GildedRose.update_quality() def printDay(self, day): print "-------- day %s --------" % day print "name, sellIn, quality" for item in self.items: print item print def printHead(self): print "OMGHAI!"
def test_BackstagePass(self): items = [Item(name="Backstage passes to a TAFKAL80ETC concert", sell_in=15, quality=20)] gilded_rose = GildedRose(items) sell_in = gilded_rose.SellIns()[0] prev_quality = gilded_rose.Qualities()[0] #The loop iterates through all phases of backstage pass valuation, from #>10 days out to past-sellby while sell_in >= -1: gilded_rose.update_quality() quality = gilded_rose.Qualities()[0] if sell_in<0: self.assertEqual(quality, 0, "Backstage pass not 0 after sell-by date") else: if sell_in<=5: expected_inc = min(gilded_rose.quality_max-prev_quality, 3) elif sell_in<=10: expected_inc = min(gilded_rose.quality_max-prev_quality, 2) else: expected_inc = min(gilded_rose.quality_max-prev_quality, 1) self.assertEqual(quality - prev_quality, expected_inc, \ "Backstage pass value not changing appropriately at sell_in value " + str(sell_in)) prev_quality = quality sell_in = gilded_rose.SellIns()[0]
def test_conjured(self): items = [Item("Conjured Mana Cake", 2, 7)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual(5, gilded_rose.items[0].quality) self.assertEqual(1, gilded_rose.items[0].sell_in) # one more day gilded_rose.update_quality() self.assertEqual(3, gilded_rose.items[0].quality) self.assertEqual(0, gilded_rose.items[0].sell_in) # one more day again gilded_rose.update_quality() self.assertEqual(0, gilded_rose.items[0].quality) self.assertEqual(-1, gilded_rose.items[0].sell_in)
def test_foo(): gilded_rose = GildedRose([Item("foo", 0, 0)]) gilded_rose.update_quality() assert "FixMe" == gilded_rose.items[0].name
def test_conjured(self): items = [Item(name="Conjured Mana Cake", sell_in=3, quality=6)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual(4, items[0].quality)
def test_update_quality(item_name, initial_quality, initial_sellin, updated_quality, updated_sellin, comment): item = Item(item_name, initial_sellin, initial_quality) gilded_rose = GildedRose([item]) gilded_rose.update_quality() assert item.quality == updated_quality assert item.sell_in == updated_sellin
def test_passes_expired(self): """Test condition.""" items = [Item("Backstage passes to a TAFKAL80ETC concert", 0, 0)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual([-1, 0], [items[0].sell_in, items[0].quality])
def test_quality_negative(self): items = [Item("foo", sell_in=5, quality=0)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertFalse(0 > items[0].quality)
def test_item_decreases(self): """Test condition.""" items = [Item("Vest of Agility", 4, 4)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual([3, 3], [items[0].sell_in, items[0].quality])
def test_sulfuras_sell_in(self): items = [Item("Sulfuras, Hand of Ragnaros", 0, 20)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(0, items[0].sell_in)
def test_mongoose_sell_in(self): items = [Item("Elixir of the Mongoose", 10, 20)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(9, items[0].sell_in)
def test_vest_sell_in(self): items = [Item("+5 Dexterity Vest", 10, 20)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(9, items[0].sell_in)
def test_concert_sell_in(self): items = [Item("Backstage passes to a TAFKAL80ETC concert", 10, 20)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(9, items[0].sell_in)
def test_foo(self): items = [Item("foo", 0, 0)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals("fixme", items[0].name)
def test_conjured_min(self): items = [Item("Conjured Mana Cake", 5, 0)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(0, items[0].quality)
def test_conjured_expired(self): items = [Item("Conjured Mana Cake", 0, 20)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(16, items[0].quality)
def test_brie_max(self): items = [Item("Aged Brie", 12, 49)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(50, items[0].quality)
def test_brie_quality_increase(self): items = [Item("Aged Brie", sell_in=2, quality=0)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual(1, items[0].quality)
def test_brie_sell_in(self): items = [Item("Aged Brie", 10, 20)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(9, items[0].sell_in)
def test_sulfuras(self): """Test condition.""" items = [Item("Sulfuras, Hand of Ragnaros", 4, 80)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual([4, 80], [items[0].sell_in, items[0].quality])
def test_aged_brie_goes_up(self): """Test condition.""" items = [Item("Aged Brie", 11, 10)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual([10, 11], [items[0].sell_in, items[0].quality])
def test_items_not_more_than_50(self): """Test condition.""" items = [Item("Vest of Agility", 4, 60)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual([3, 50], [items[0].sell_in, items[0].quality])
def test_update_quality_increases_quality_for_backstage_passes(self): gilded_rose = GildedRose([self.backstage_passes]) gilded_rose.update_quality() self.assertEqual(2, self.backstage_passes.quality)
def test_conjure(self): item = Item("Conjured", -2, 1) gilded_rose = GildedRose(item) gilded_rose.update_quality() self.assertEqual(gilded_rose.item.quality, 0) self.assertEqual(gilded_rose.item.sell_in, -3)
def test_quality_degretation(self): items = [Item("foo", sell_in=5, quality=20)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual(19, items[0].quality)
def test_passes_sub_5_days(self): """Test condition.""" items = [Item("Backstage passes to a TAFKAL80ETC concert", 4, 10)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual([3, 13], [items[0].sell_in, items[0].quality])
def test_sulfuras_quality(self): items = [Item("Sulfuras, Hand of Ragnaros", sell_in=0, quality=80)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual(80, items[0].quality)
def test_passes_brie_goes_up(self): """Test condition.""" items = [Item("Backstage passes to a TAFKAL80ETC concert", 11, 10)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual([10, 11], [items[0].sell_in, items[0].quality])
def test_quality_max(self): items = [Item("Aged Brie", sell_in=2, quality=50)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertTrue(items[0].quality <= 50)
def test_update_quality_increases_quality_for_aged_brie(self): gilded_rose = GildedRose([self.aged_brie]) gilded_rose.update_quality() self.assertEqual(2, self.aged_brie.quality)
def test_quality_is_never_less_than_zero(self): items = [Item("foo", 0, 0)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual(0, gilded_rose.items[0].quality)
def test_conjured_sell_in(self): items = [Item("Conjured Mana Cake", 10, 20)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(9, items[0].sell_in)
def test_brie_expired(self): items = [Item("Aged Brie", 0, 0)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(2, items[0].quality)
def test_concert_under_10(self): items = [Item("Backstage passes to a TAFKAL80ETC concert", 8, 30)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEquals(32, items[0].quality)
def test_backstage_passes_decrease_to_zero_after_concert(self): items = [Item("Backstage passes to a TAFKAL80ETC concert", 0, 10)] gilded_rose = GildedRose(items) gilded_rose.update_quality() self.assertEqual(0, gilded_rose.items[0].quality)