From f37e54b5ad45ca1e233c4d08f74f9a39e42ff536 Mon Sep 17 00:00:00 2001 From: zoengsw Date: Mon, 10 Nov 2025 13:57:45 +0000 Subject: [PATCH 1/6] added test helper function to check all name, sellin, quality --- python/__init__.py | 0 python/{ => tests}/gilded_rose.py | 0 python/tests/test_gilded_rose.py | 14 ++++++++++++-- python/texttest_fixture.py | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 python/__init__.py rename python/{ => tests}/gilded_rose.py (100%) mode change 100755 => 100644 diff --git a/python/__init__.py b/python/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/python/gilded_rose.py b/python/tests/gilded_rose.py old mode 100755 new mode 100644 similarity index 100% rename from python/gilded_rose.py rename to python/tests/gilded_rose.py diff --git a/python/tests/test_gilded_rose.py b/python/tests/test_gilded_rose.py index 1c92f638..26d1fd24 100644 --- a/python/tests/test_gilded_rose.py +++ b/python/tests/test_gilded_rose.py @@ -5,12 +5,22 @@ from gilded_rose import Item, GildedRose class GildedRoseTest(unittest.TestCase): - def test_foo(self): + + def check_item_values(self, item, name, sell_in, quality): + self.assertEqual(item.name, name) + self.assertEqual(item.sell_in, sell_in) + self.assertEqual(item.quality, quality) + + def test_foo_nonnegative(self): items = [Item("foo", 0, 0)] gilded_rose = GildedRose(items) gilded_rose.update_quality() - self.assertEqual("fixme", items[0].name) + self.assertEqual("foo", items[0].name) + self.assertEqual(0, items[0].sell_in) + self.assertEqual(0, items[0].quality) + def test_multiple_items(self): + items = [Item("foo", 0, 0), Item("bar", 0, 0)] if __name__ == '__main__': unittest.main() diff --git a/python/texttest_fixture.py b/python/texttest_fixture.py index 8f7e4940..3b83658c 100644 --- a/python/texttest_fixture.py +++ b/python/texttest_fixture.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function -from gilded_rose import * +from python.tests.gilded_rose import * def main(): From 9ac033e03827ebd89cf741c9ac3436489ffbf309 Mon Sep 17 00:00:00 2001 From: zoengsw Date: Mon, 10 Nov 2025 14:02:13 +0000 Subject: [PATCH 2/6] added 2 tests and 1 helper function on update --- python/tests/test_gilded_rose.py | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/python/tests/test_gilded_rose.py b/python/tests/test_gilded_rose.py index 26d1fd24..761686b0 100644 --- a/python/tests/test_gilded_rose.py +++ b/python/tests/test_gilded_rose.py @@ -11,16 +11,35 @@ class GildedRoseTest(unittest.TestCase): self.assertEqual(item.sell_in, sell_in) self.assertEqual(item.quality, quality) + def generate_and_update_gilded_rose(self, items, days): + gilded_rose = GildedRose(items) + for day in range(days): + gilded_rose.update_gilded_rose() + return gilded_rose + + def test_foo_1day(self): + items= [Item('foo', 1, 1)] + gilded_rose = GildedRose(items) + gilded_rose.update_quality() + self.check_item_values(items[0], 'foo', 0, 0) + + def test_foo_nonnegative(self): items = [Item("foo", 0, 0)] gilded_rose = GildedRose(items) gilded_rose.update_quality() - self.assertEqual("foo", items[0].name) - self.assertEqual(0, items[0].sell_in) - self.assertEqual(0, items[0].quality) + self.check_item_values(items[0], "foo", 0, 0) + def test_multiple_items(self): - items = [Item("foo", 0, 0), Item("bar", 0, 0)] + items = [Item("foo", 0, 0), Item("bar", 1, 1), Item("baz", 2, 2)] + gilded_rose = GildedRose(items) + gilded_rose.update_quality() + self.check_item_values(items[0], "foo", 0, 0) + self.check_item_values(items[1], "bar", 0, 0) + self.check_item_values(items[2], "baz", 1, 1) + + if __name__ == '__main__': unittest.main() From ffd1cabade631bf7ba657cc36ef6e4fdb785b143 Mon Sep 17 00:00:00 2001 From: zoengsw Date: Mon, 10 Nov 2025 14:15:38 +0000 Subject: [PATCH 3/6] added tests to multiple days and items --- python/tests/test_gilded_rose.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/python/tests/test_gilded_rose.py b/python/tests/test_gilded_rose.py index 761686b0..b69951c0 100644 --- a/python/tests/test_gilded_rose.py +++ b/python/tests/test_gilded_rose.py @@ -11,34 +11,40 @@ class GildedRoseTest(unittest.TestCase): self.assertEqual(item.sell_in, sell_in) self.assertEqual(item.quality, quality) + def update_gilded_rose_days(self, gilded_rose, days): + for day in range(days): + gilded_rose.update_quality() + def generate_and_update_gilded_rose(self, items, days): gilded_rose = GildedRose(items) - for day in range(days): - gilded_rose.update_gilded_rose() + self.update_gilded_rose_days(gilded_rose, days) return gilded_rose def test_foo_1day(self): items= [Item('foo', 1, 1)] - gilded_rose = GildedRose(items) - gilded_rose.update_quality() + self.generate_and_update_gilded_rose(items, 1) self.check_item_values(items[0], 'foo', 0, 0) def test_foo_nonnegative(self): items = [Item("foo", 0, 0)] - gilded_rose = GildedRose(items) - gilded_rose.update_quality() + self.generate_and_update_gilded_rose(items, 1) self.check_item_values(items[0], "foo", 0, 0) def test_multiple_items(self): items = [Item("foo", 0, 0), Item("bar", 1, 1), Item("baz", 2, 2)] - gilded_rose = GildedRose(items) - gilded_rose.update_quality() + self.generate_and_update_gilded_rose(items, 1) self.check_item_values(items[0], "foo", 0, 0) self.check_item_values(items[1], "bar", 0, 0) self.check_item_values(items[2], "baz", 1, 1) + def test_multiple_days(self): + items= [Item('foo', 2, 3)] + self.generate_and_update_gilded_rose(items, 2) + self.check_item_values(items[0], 'foo', 0, 1) + + if __name__ == '__main__': From 8e6b69ed9bfae2dca2e0746ffa8f9ae832048875 Mon Sep 17 00:00:00 2001 From: zoengsw Date: Mon, 10 Nov 2025 14:46:17 +0000 Subject: [PATCH 4/6] fixed brie increment and day decrement bug --- python/tests/test_gilded_rose.py | 57 +++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/python/tests/test_gilded_rose.py b/python/tests/test_gilded_rose.py index b69951c0..9d7fdce0 100644 --- a/python/tests/test_gilded_rose.py +++ b/python/tests/test_gilded_rose.py @@ -1,8 +1,12 @@ # -*- coding: utf-8 -*- import unittest +from hashlib import file_digest from gilded_rose import Item, GildedRose +BACKSTAGE = 'Backstage passes to a TAFKAL80ETC concert' +SULFURAS = 'Sulfuras, Hand of Ragnaros' +AGED_BRIE = 'Aged Brie' class GildedRoseTest(unittest.TestCase): @@ -25,25 +29,60 @@ class GildedRoseTest(unittest.TestCase): self.generate_and_update_gilded_rose(items, 1) self.check_item_values(items[0], 'foo', 0, 0) + def test_foo_multiple_days(self): + items= [Item('foo', 2, 3)] + self.generate_and_update_gilded_rose(items, 2) + self.check_item_values(items[0], 'foo', 0, 1) - def test_foo_nonnegative(self): - items = [Item("foo", 0, 0)] + def test_quality_nonnegative(self): + items = [Item("foo", 2, 0)] self.generate_and_update_gilded_rose(items, 1) - self.check_item_values(items[0], "foo", 0, 0) + self.check_item_values(items[0], "foo", 1, 0) + def test_after_sellby_date(self): + items = [Item("foo", 2, 10)] + gilded_rose = self.generate_and_update_gilded_rose(items, 2) + self.check_item_values(items[0], "foo", 0, 8) + self.update_gilded_rose_days(gilded_rose, 2) + self.check_item_values(items[0], "foo", -2, 4) + + def test_aged_brie_4_days(self): + items = [Item(AGED_BRIE, 2, 10)] + gilded_rose = self.generate_and_update_gilded_rose(items, 2) + self.check_item_values(items[0], AGED_BRIE, 0, 12) + self.update_gilded_rose_days(gilded_rose, 2) + self.check_item_values(items[0], AGED_BRIE, -2, 16) + + def test_aged_brie_max_quality(self): + items = [Item(AGED_BRIE, 15, 40)] + gilded_rose = self.generate_and_update_gilded_rose(items, 10) + self.check_item_values(items[0], AGED_BRIE, 5, 50) + self.update_gilded_rose_days(gilded_rose, 6) + self.check_item_values(items[0], AGED_BRIE, -1, 50) + + def test_sulfuras(self): + items = [Item(SULFURAS, 10, 30)] + self.generate_and_update_gilded_rose(items, 50) + self.check_item_values(items[0], SULFURAS, 10, 30) + + def test_backstage_passes_15_days(self): + items = [Item(BACKSTAGE, 15, 0)] + gilded_rose = self.generate_and_update_gilded_rose(items, 5) + self.check_item_values(items[0], BACKSTAGE, 10, 5) + self.update_gilded_rose_days(gilded_rose, 5) + self.check_item_values(items[0], BACKSTAGE, 5, 15) + self.update_gilded_rose_days(gilded_rose, 5) + self.check_item_values(items[0], BACKSTAGE, 0, 30) + self.update_gilded_rose_days(gilded_rose, 5) + self.check_item_values(items[0], BACKSTAGE, -5, 0) def test_multiple_items(self): items = [Item("foo", 0, 0), Item("bar", 1, 1), Item("baz", 2, 2)] self.generate_and_update_gilded_rose(items, 1) - self.check_item_values(items[0], "foo", 0, 0) + self.check_item_values(items[0], "foo", -1, 0) self.check_item_values(items[1], "bar", 0, 0) self.check_item_values(items[2], "baz", 1, 1) - def test_multiple_days(self): - items= [Item('foo', 2, 3)] - self.generate_and_update_gilded_rose(items, 2) - self.check_item_values(items[0], 'foo', 0, 1) - From 6cb0f3232059ba9fc956356c9c86e650fdb0598d Mon Sep 17 00:00:00 2001 From: zoengsw Date: Mon, 10 Nov 2025 14:51:28 +0000 Subject: [PATCH 5/6] separated backstage pass testings --- python/tests/test_gilded_rose.py | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/python/tests/test_gilded_rose.py b/python/tests/test_gilded_rose.py index 9d7fdce0..39399f25 100644 --- a/python/tests/test_gilded_rose.py +++ b/python/tests/test_gilded_rose.py @@ -65,16 +65,27 @@ class GildedRoseTest(unittest.TestCase): self.generate_and_update_gilded_rose(items, 50) self.check_item_values(items[0], SULFURAS, 10, 30) - def test_backstage_passes_15_days(self): + def test_backstage_passes_15_to_10_days(self): items = [Item(BACKSTAGE, 15, 0)] - gilded_rose = self.generate_and_update_gilded_rose(items, 5) + self.generate_and_update_gilded_rose(items, 5) self.check_item_values(items[0], BACKSTAGE, 10, 5) - self.update_gilded_rose_days(gilded_rose, 5) - self.check_item_values(items[0], BACKSTAGE, 5, 15) - self.update_gilded_rose_days(gilded_rose, 5) - self.check_item_values(items[0], BACKSTAGE, 0, 30) - self.update_gilded_rose_days(gilded_rose, 5) - self.check_item_values(items[0], BACKSTAGE, -5, 0) + + def test_backstage_passes_10_to_5_days(self): + items = [Item(BACKSTAGE, 10, 0)] + self.generate_and_update_gilded_rose(items, 5) + self.check_item_values(items[0], BACKSTAGE, 5, 10) + + def test_backstage_passes_5_to_0_days(self): + items = [Item(BACKSTAGE, 5, 0)] + self.generate_and_update_gilded_rose(items, 5) + self.check_item_values(items[0], BACKSTAGE, 0, 15) + + def test_backstage_passes_after_concert(self): + items = [Item(BACKSTAGE, 1, 10)] + gilded_rose = self.generate_and_update_gilded_rose(items, 1) + self.check_item_values(items[0], BACKSTAGE, 0, 13) + self.update_gilded_rose_days(gilded_rose, 1) + self.check_item_values(items[0], BACKSTAGE, -1, 0) def test_multiple_items(self): items = [Item("foo", 0, 0), Item("bar", 1, 1), Item("baz", 2, 2)] From b9ba098c9a31a6a3ecbf1aeeb74528465344576a Mon Sep 17 00:00:00 2001 From: zoengsw Date: Mon, 10 Nov 2025 15:09:32 +0000 Subject: [PATCH 6/6] all tests passed --- python/tests/test_gilded_rose.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/python/tests/test_gilded_rose.py b/python/tests/test_gilded_rose.py index 39399f25..89de7fa4 100644 --- a/python/tests/test_gilded_rose.py +++ b/python/tests/test_gilded_rose.py @@ -87,15 +87,31 @@ class GildedRoseTest(unittest.TestCase): self.update_gilded_rose_days(gilded_rose, 1) self.check_item_values(items[0], BACKSTAGE, -1, 0) - def test_multiple_items(self): + def test_multiple_items_different_sellin_1day(self): items = [Item("foo", 0, 0), Item("bar", 1, 1), Item("baz", 2, 2)] self.generate_and_update_gilded_rose(items, 1) self.check_item_values(items[0], "foo", -1, 0) self.check_item_values(items[1], "bar", 0, 0) self.check_item_values(items[2], "baz", 1, 1) + def test_all_items_15_days(self): + items = [Item("foo", 10, 10), Item(SULFURAS, 10, 10), Item(BACKSTAGE, 10, 10), Item(AGED_BRIE, 10, 10)] + gilded_rose = self.generate_and_update_gilded_rose(items, 5) + self.check_item_values(items[0], "foo", 5, 5) + self.check_item_values(items[1], SULFURAS, 10, 10) + self.check_item_values(items[2], BACKSTAGE, 5, 20) + self.check_item_values(items[3], AGED_BRIE, 5, 15) + self.update_gilded_rose_days(gilded_rose, 5) + self.check_item_values(items[0], "foo", 0, 0) + self.check_item_values(items[1], SULFURAS, 10, 10) + self.check_item_values(items[2], BACKSTAGE, 0, 35) + self.check_item_values(items[3], AGED_BRIE, 0, 20) + self.update_gilded_rose_days(gilded_rose, 5) + self.check_item_values(items[0], "foo", -5, 0) + self.check_item_values(items[1], SULFURAS, 10, 10) + self.check_item_values(items[2], BACKSTAGE, -5, 0) + self.check_item_values(items[3], AGED_BRIE, -5, 30) - if __name__ == '__main__': unittest.main()