import 'package:tdd_katas/gilded_rose.dart'; import 'package:test/test.dart'; void main() { group('Gilded Rose Inn - Characterization Tests', () { group('Normal items', () { test('quality and sellIn both decrease each day', () { final items = [Item('Normal Item', 10, 20)]; final gildedRose = GildedRose(items); gildedRose.updateQuality(); expect(items[0].sellIn, equals(9)); expect(items[0].quality, equals(19)); }); test('quality degrades twice as fast after sell-by date', () { final items = [Item('Normal Item', 0, 10)]; final gildedRose = GildedRose(items); gildedRose.updateQuality(); expect(items[0].sellIn, equals(-1)); expect(items[0].quality, equals(8)); // -2 quality }); test('quality never becomes negative', () { final items = [Item('Normal Item', 5, 0)]; final gildedRose = GildedRose(items); gildedRose.updateQuality(); expect(items[0].quality, equals(0)); }); }); group('Aged Brie - appreciates over time', () { test('quality increases as it ages', () { final items = [Item('Aged Brie', 10, 20)]; final gildedRose = GildedRose(items); gildedRose.updateQuality(); expect(items[0].sellIn, equals(9)); expect(items[0].quality, equals(21)); }); test('quality increases twice as fast after sell-by date', () { final items = [Item('Aged Brie', 0, 20)]; final gildedRose = GildedRose(items); gildedRose.updateQuality(); expect(items[0].sellIn, equals(-1)); expect(items[0].quality, equals(22)); // +2 quality }); test('quality never exceeds 50', () { final items = [Item('Aged Brie', 5, 50)]; final gildedRose = GildedRose(items); gildedRose.updateQuality(); expect(items[0].quality, equals(50)); }); }); group('Sulfuras - legendary item', () { test('quality never changes', () { final items = [Item('Sulfuras, Hand of Ragnaros', 10, 80)]; final gildedRose = GildedRose(items); gildedRose.updateQuality(); expect(items[0].quality, equals(80)); }); test('sellIn never decreases', () { final items = [Item('Sulfuras, Hand of Ragnaros', 10, 80)]; final gildedRose = GildedRose(items); gildedRose.updateQuality(); expect(items[0].sellIn, equals(10)); }); }); group('Backstage passes - concert tickets', () { test('quality increases by 1 when more than 10 days away', () { final items = [ Item('Backstage passes to a TAFKAL80ETC concert', 15, 20), ]; final gildedRose = GildedRose(items); gildedRose.updateQuality(); expect(items[0].quality, equals(21)); // +1 }); test('quality increases by 2 when 10 days or less', () { final items = [ Item('Backstage passes to a TAFKAL80ETC concert', 10, 20), ]; final gildedRose = GildedRose(items); gildedRose.updateQuality(); expect(items[0].quality, equals(22)); // +2 }); test('quality increases by 3 when 5 days or less', () { final items = [ Item('Backstage passes to a TAFKAL80ETC concert', 5, 20), ]; final gildedRose = GildedRose(items); gildedRose.updateQuality(); expect(items[0].quality, equals(23)); // +3 }); test('quality drops to 0 after concert', () { final items = [ Item('Backstage passes to a TAFKAL80ETC concert', 0, 20), ]; final gildedRose = GildedRose(items); gildedRose.updateQuality(); expect(items[0].sellIn, equals(-1)); expect(items[0].quality, equals(0)); }); test('quality never exceeds 50', () { final items = [ Item('Backstage passes to a TAFKAL80ETC concert', 5, 49), ]; final gildedRose = GildedRose(items); gildedRose.updateQuality(); expect(items[0].quality, equals(50)); // capped at 50 }); }); group('Golden Master - 30-day simulation', () { test('captures complete behavior of all item types over time', () { final items = _createAllItemTypes(); final gildedRose = GildedRose(items); final output = StringBuffer(); for (var day = 0; day <= 30; day++) { output.writeln('-------- day $day --------'); output.writeln('name, sellIn, quality'); for (final item in items) { output.writeln(item); } output.writeln(); gildedRose.updateQuality(); } final expected = _goldenMasterBaseline(); expect( output.toString(), equals(expected), reason: 'Golden Master mismatch - legacy behavior changed!', ); }); }); }); } List _createAllItemTypes() { return [ // Normal items at various states Item('Normal Item', 10, 20), Item('Normal Item', 2, 5), Item('Normal Item', 0, 10), Item('Normal Item', -1, 10), // Aged Brie Item('Aged Brie', 10, 20), Item('Aged Brie', 0, 30), Item('Aged Brie', 5, 49), // Sulfuras Item('Sulfuras, Hand of Ragnaros', 10, 80), Item('Sulfuras, Hand of Ragnaros', -1, 80), // Backstage passes at critical thresholds Item('Backstage passes to a TAFKAL80ETC concert', 15, 20), Item('Backstage passes to a TAFKAL80ETC concert', 10, 20), Item('Backstage passes to a TAFKAL80ETC concert', 5, 20), Item('Backstage passes to a TAFKAL80ETC concert', 1, 20), Item('Backstage passes to a TAFKAL80ETC concert', 0, 20), ]; } String _goldenMasterBaseline() { // Generated by running the legacy code // This captures the exact behavior - our safety net! return '''-------- day 0 -------- name, sellIn, quality Normal Item, 10, 20 Normal Item, 2, 5 Normal Item, 0, 10 Normal Item, -1, 10 Aged Brie, 10, 20 Aged Brie, 0, 30 Aged Brie, 5, 49 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 15, 20 Backstage passes to a TAFKAL80ETC concert, 10, 20 Backstage passes to a TAFKAL80ETC concert, 5, 20 Backstage passes to a TAFKAL80ETC concert, 1, 20 Backstage passes to a TAFKAL80ETC concert, 0, 20 -------- day 1 -------- name, sellIn, quality Normal Item, 9, 19 Normal Item, 1, 4 Normal Item, -1, 8 Normal Item, -2, 8 Aged Brie, 9, 21 Aged Brie, -1, 32 Aged Brie, 4, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 14, 21 Backstage passes to a TAFKAL80ETC concert, 9, 22 Backstage passes to a TAFKAL80ETC concert, 4, 23 Backstage passes to a TAFKAL80ETC concert, 0, 23 Backstage passes to a TAFKAL80ETC concert, -1, 0 -------- day 2 -------- name, sellIn, quality Normal Item, 8, 18 Normal Item, 0, 3 Normal Item, -2, 6 Normal Item, -3, 6 Aged Brie, 8, 22 Aged Brie, -2, 34 Aged Brie, 3, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 13, 22 Backstage passes to a TAFKAL80ETC concert, 8, 24 Backstage passes to a TAFKAL80ETC concert, 3, 26 Backstage passes to a TAFKAL80ETC concert, -1, 0 Backstage passes to a TAFKAL80ETC concert, -2, 0 -------- day 3 -------- name, sellIn, quality Normal Item, 7, 17 Normal Item, -1, 1 Normal Item, -3, 4 Normal Item, -4, 4 Aged Brie, 7, 23 Aged Brie, -3, 36 Aged Brie, 2, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 12, 23 Backstage passes to a TAFKAL80ETC concert, 7, 26 Backstage passes to a TAFKAL80ETC concert, 2, 29 Backstage passes to a TAFKAL80ETC concert, -2, 0 Backstage passes to a TAFKAL80ETC concert, -3, 0 -------- day 4 -------- name, sellIn, quality Normal Item, 6, 16 Normal Item, -2, 0 Normal Item, -4, 2 Normal Item, -5, 2 Aged Brie, 6, 24 Aged Brie, -4, 38 Aged Brie, 1, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 11, 24 Backstage passes to a TAFKAL80ETC concert, 6, 28 Backstage passes to a TAFKAL80ETC concert, 1, 32 Backstage passes to a TAFKAL80ETC concert, -3, 0 Backstage passes to a TAFKAL80ETC concert, -4, 0 -------- day 5 -------- name, sellIn, quality Normal Item, 5, 15 Normal Item, -3, 0 Normal Item, -5, 0 Normal Item, -6, 0 Aged Brie, 5, 25 Aged Brie, -5, 40 Aged Brie, 0, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 10, 25 Backstage passes to a TAFKAL80ETC concert, 5, 30 Backstage passes to a TAFKAL80ETC concert, 0, 35 Backstage passes to a TAFKAL80ETC concert, -4, 0 Backstage passes to a TAFKAL80ETC concert, -5, 0 -------- day 6 -------- name, sellIn, quality Normal Item, 4, 14 Normal Item, -4, 0 Normal Item, -6, 0 Normal Item, -7, 0 Aged Brie, 4, 26 Aged Brie, -6, 42 Aged Brie, -1, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 9, 27 Backstage passes to a TAFKAL80ETC concert, 4, 33 Backstage passes to a TAFKAL80ETC concert, -1, 0 Backstage passes to a TAFKAL80ETC concert, -5, 0 Backstage passes to a TAFKAL80ETC concert, -6, 0 -------- day 7 -------- name, sellIn, quality Normal Item, 3, 13 Normal Item, -5, 0 Normal Item, -7, 0 Normal Item, -8, 0 Aged Brie, 3, 27 Aged Brie, -7, 44 Aged Brie, -2, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 8, 29 Backstage passes to a TAFKAL80ETC concert, 3, 36 Backstage passes to a TAFKAL80ETC concert, -2, 0 Backstage passes to a TAFKAL80ETC concert, -6, 0 Backstage passes to a TAFKAL80ETC concert, -7, 0 -------- day 8 -------- name, sellIn, quality Normal Item, 2, 12 Normal Item, -6, 0 Normal Item, -8, 0 Normal Item, -9, 0 Aged Brie, 2, 28 Aged Brie, -8, 46 Aged Brie, -3, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 7, 31 Backstage passes to a TAFKAL80ETC concert, 2, 39 Backstage passes to a TAFKAL80ETC concert, -3, 0 Backstage passes to a TAFKAL80ETC concert, -7, 0 Backstage passes to a TAFKAL80ETC concert, -8, 0 -------- day 9 -------- name, sellIn, quality Normal Item, 1, 11 Normal Item, -7, 0 Normal Item, -9, 0 Normal Item, -10, 0 Aged Brie, 1, 29 Aged Brie, -9, 48 Aged Brie, -4, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 6, 33 Backstage passes to a TAFKAL80ETC concert, 1, 42 Backstage passes to a TAFKAL80ETC concert, -4, 0 Backstage passes to a TAFKAL80ETC concert, -8, 0 Backstage passes to a TAFKAL80ETC concert, -9, 0 -------- day 10 -------- name, sellIn, quality Normal Item, 0, 10 Normal Item, -8, 0 Normal Item, -10, 0 Normal Item, -11, 0 Aged Brie, 0, 30 Aged Brie, -10, 50 Aged Brie, -5, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 5, 35 Backstage passes to a TAFKAL80ETC concert, 0, 45 Backstage passes to a TAFKAL80ETC concert, -5, 0 Backstage passes to a TAFKAL80ETC concert, -9, 0 Backstage passes to a TAFKAL80ETC concert, -10, 0 -------- day 11 -------- name, sellIn, quality Normal Item, -1, 8 Normal Item, -9, 0 Normal Item, -11, 0 Normal Item, -12, 0 Aged Brie, -1, 32 Aged Brie, -11, 50 Aged Brie, -6, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 4, 38 Backstage passes to a TAFKAL80ETC concert, -1, 0 Backstage passes to a TAFKAL80ETC concert, -6, 0 Backstage passes to a TAFKAL80ETC concert, -10, 0 Backstage passes to a TAFKAL80ETC concert, -11, 0 -------- day 12 -------- name, sellIn, quality Normal Item, -2, 6 Normal Item, -10, 0 Normal Item, -12, 0 Normal Item, -13, 0 Aged Brie, -2, 34 Aged Brie, -12, 50 Aged Brie, -7, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 3, 41 Backstage passes to a TAFKAL80ETC concert, -2, 0 Backstage passes to a TAFKAL80ETC concert, -7, 0 Backstage passes to a TAFKAL80ETC concert, -11, 0 Backstage passes to a TAFKAL80ETC concert, -12, 0 -------- day 13 -------- name, sellIn, quality Normal Item, -3, 4 Normal Item, -11, 0 Normal Item, -13, 0 Normal Item, -14, 0 Aged Brie, -3, 36 Aged Brie, -13, 50 Aged Brie, -8, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 2, 44 Backstage passes to a TAFKAL80ETC concert, -3, 0 Backstage passes to a TAFKAL80ETC concert, -8, 0 Backstage passes to a TAFKAL80ETC concert, -12, 0 Backstage passes to a TAFKAL80ETC concert, -13, 0 -------- day 14 -------- name, sellIn, quality Normal Item, -4, 2 Normal Item, -12, 0 Normal Item, -14, 0 Normal Item, -15, 0 Aged Brie, -4, 38 Aged Brie, -14, 50 Aged Brie, -9, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 1, 47 Backstage passes to a TAFKAL80ETC concert, -4, 0 Backstage passes to a TAFKAL80ETC concert, -9, 0 Backstage passes to a TAFKAL80ETC concert, -13, 0 Backstage passes to a TAFKAL80ETC concert, -14, 0 -------- day 15 -------- name, sellIn, quality Normal Item, -5, 0 Normal Item, -13, 0 Normal Item, -15, 0 Normal Item, -16, 0 Aged Brie, -5, 40 Aged Brie, -15, 50 Aged Brie, -10, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 0, 50 Backstage passes to a TAFKAL80ETC concert, -5, 0 Backstage passes to a TAFKAL80ETC concert, -10, 0 Backstage passes to a TAFKAL80ETC concert, -14, 0 Backstage passes to a TAFKAL80ETC concert, -15, 0 -------- day 16 -------- name, sellIn, quality Normal Item, -6, 0 Normal Item, -14, 0 Normal Item, -16, 0 Normal Item, -17, 0 Aged Brie, -6, 42 Aged Brie, -16, 50 Aged Brie, -11, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, -1, 0 Backstage passes to a TAFKAL80ETC concert, -6, 0 Backstage passes to a TAFKAL80ETC concert, -11, 0 Backstage passes to a TAFKAL80ETC concert, -15, 0 Backstage passes to a TAFKAL80ETC concert, -16, 0 -------- day 17 -------- name, sellIn, quality Normal Item, -7, 0 Normal Item, -15, 0 Normal Item, -17, 0 Normal Item, -18, 0 Aged Brie, -7, 44 Aged Brie, -17, 50 Aged Brie, -12, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, -2, 0 Backstage passes to a TAFKAL80ETC concert, -7, 0 Backstage passes to a TAFKAL80ETC concert, -12, 0 Backstage passes to a TAFKAL80ETC concert, -16, 0 Backstage passes to a TAFKAL80ETC concert, -17, 0 -------- day 18 -------- name, sellIn, quality Normal Item, -8, 0 Normal Item, -16, 0 Normal Item, -18, 0 Normal Item, -19, 0 Aged Brie, -8, 46 Aged Brie, -18, 50 Aged Brie, -13, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, -3, 0 Backstage passes to a TAFKAL80ETC concert, -8, 0 Backstage passes to a TAFKAL80ETC concert, -13, 0 Backstage passes to a TAFKAL80ETC concert, -17, 0 Backstage passes to a TAFKAL80ETC concert, -18, 0 -------- day 19 -------- name, sellIn, quality Normal Item, -9, 0 Normal Item, -17, 0 Normal Item, -19, 0 Normal Item, -20, 0 Aged Brie, -9, 48 Aged Brie, -19, 50 Aged Brie, -14, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, -4, 0 Backstage passes to a TAFKAL80ETC concert, -9, 0 Backstage passes to a TAFKAL80ETC concert, -14, 0 Backstage passes to a TAFKAL80ETC concert, -18, 0 Backstage passes to a TAFKAL80ETC concert, -19, 0 -------- day 20 -------- name, sellIn, quality Normal Item, -10, 0 Normal Item, -18, 0 Normal Item, -20, 0 Normal Item, -21, 0 Aged Brie, -10, 50 Aged Brie, -20, 50 Aged Brie, -15, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, -5, 0 Backstage passes to a TAFKAL80ETC concert, -10, 0 Backstage passes to a TAFKAL80ETC concert, -15, 0 Backstage passes to a TAFKAL80ETC concert, -19, 0 Backstage passes to a TAFKAL80ETC concert, -20, 0 -------- day 21 -------- name, sellIn, quality Normal Item, -11, 0 Normal Item, -19, 0 Normal Item, -21, 0 Normal Item, -22, 0 Aged Brie, -11, 50 Aged Brie, -21, 50 Aged Brie, -16, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, -6, 0 Backstage passes to a TAFKAL80ETC concert, -11, 0 Backstage passes to a TAFKAL80ETC concert, -16, 0 Backstage passes to a TAFKAL80ETC concert, -20, 0 Backstage passes to a TAFKAL80ETC concert, -21, 0 -------- day 22 -------- name, sellIn, quality Normal Item, -12, 0 Normal Item, -20, 0 Normal Item, -22, 0 Normal Item, -23, 0 Aged Brie, -12, 50 Aged Brie, -22, 50 Aged Brie, -17, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, -7, 0 Backstage passes to a TAFKAL80ETC concert, -12, 0 Backstage passes to a TAFKAL80ETC concert, -17, 0 Backstage passes to a TAFKAL80ETC concert, -21, 0 Backstage passes to a TAFKAL80ETC concert, -22, 0 -------- day 23 -------- name, sellIn, quality Normal Item, -13, 0 Normal Item, -21, 0 Normal Item, -23, 0 Normal Item, -24, 0 Aged Brie, -13, 50 Aged Brie, -23, 50 Aged Brie, -18, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, -8, 0 Backstage passes to a TAFKAL80ETC concert, -13, 0 Backstage passes to a TAFKAL80ETC concert, -18, 0 Backstage passes to a TAFKAL80ETC concert, -22, 0 Backstage passes to a TAFKAL80ETC concert, -23, 0 -------- day 24 -------- name, sellIn, quality Normal Item, -14, 0 Normal Item, -22, 0 Normal Item, -24, 0 Normal Item, -25, 0 Aged Brie, -14, 50 Aged Brie, -24, 50 Aged Brie, -19, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, -9, 0 Backstage passes to a TAFKAL80ETC concert, -14, 0 Backstage passes to a TAFKAL80ETC concert, -19, 0 Backstage passes to a TAFKAL80ETC concert, -23, 0 Backstage passes to a TAFKAL80ETC concert, -24, 0 -------- day 25 -------- name, sellIn, quality Normal Item, -15, 0 Normal Item, -23, 0 Normal Item, -25, 0 Normal Item, -26, 0 Aged Brie, -15, 50 Aged Brie, -25, 50 Aged Brie, -20, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, -10, 0 Backstage passes to a TAFKAL80ETC concert, -15, 0 Backstage passes to a TAFKAL80ETC concert, -20, 0 Backstage passes to a TAFKAL80ETC concert, -24, 0 Backstage passes to a TAFKAL80ETC concert, -25, 0 -------- day 26 -------- name, sellIn, quality Normal Item, -16, 0 Normal Item, -24, 0 Normal Item, -26, 0 Normal Item, -27, 0 Aged Brie, -16, 50 Aged Brie, -26, 50 Aged Brie, -21, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, -11, 0 Backstage passes to a TAFKAL80ETC concert, -16, 0 Backstage passes to a TAFKAL80ETC concert, -21, 0 Backstage passes to a TAFKAL80ETC concert, -25, 0 Backstage passes to a TAFKAL80ETC concert, -26, 0 -------- day 27 -------- name, sellIn, quality Normal Item, -17, 0 Normal Item, -25, 0 Normal Item, -27, 0 Normal Item, -28, 0 Aged Brie, -17, 50 Aged Brie, -27, 50 Aged Brie, -22, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, -12, 0 Backstage passes to a TAFKAL80ETC concert, -17, 0 Backstage passes to a TAFKAL80ETC concert, -22, 0 Backstage passes to a TAFKAL80ETC concert, -26, 0 Backstage passes to a TAFKAL80ETC concert, -27, 0 -------- day 28 -------- name, sellIn, quality Normal Item, -18, 0 Normal Item, -26, 0 Normal Item, -28, 0 Normal Item, -29, 0 Aged Brie, -18, 50 Aged Brie, -28, 50 Aged Brie, -23, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, -13, 0 Backstage passes to a TAFKAL80ETC concert, -18, 0 Backstage passes to a TAFKAL80ETC concert, -23, 0 Backstage passes to a TAFKAL80ETC concert, -27, 0 Backstage passes to a TAFKAL80ETC concert, -28, 0 -------- day 29 -------- name, sellIn, quality Normal Item, -19, 0 Normal Item, -27, 0 Normal Item, -29, 0 Normal Item, -30, 0 Aged Brie, -19, 50 Aged Brie, -29, 50 Aged Brie, -24, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, -14, 0 Backstage passes to a TAFKAL80ETC concert, -19, 0 Backstage passes to a TAFKAL80ETC concert, -24, 0 Backstage passes to a TAFKAL80ETC concert, -28, 0 Backstage passes to a TAFKAL80ETC concert, -29, 0 -------- day 30 -------- name, sellIn, quality Normal Item, -20, 0 Normal Item, -28, 0 Normal Item, -30, 0 Normal Item, -31, 0 Aged Brie, -20, 50 Aged Brie, -30, 50 Aged Brie, -25, 50 Sulfuras, Hand of Ragnaros, 10, 80 Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, -15, 0 Backstage passes to a TAFKAL80ETC concert, -20, 0 Backstage passes to a TAFKAL80ETC concert, -25, 0 Backstage passes to a TAFKAL80ETC concert, -29, 0 Backstage passes to a TAFKAL80ETC concert, -30, 0 '''; }