From 41d3eb773fcf7af0431971c55d36647c27c04f69 Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 1 Dec 2022 17:44:33 -0500 Subject: [PATCH 01/21] Passes Wave 1 tests --- swap_meet/vendor.py | 14 +++++++++++++- tests/unit_tests/test_wave_01.py | 15 +++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index 87302c056..2177fa232 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -1,2 +1,14 @@ class Vendor: - pass \ No newline at end of file + def __init__(self, inventory = None): + self.inventory = inventory if inventory is not None else [] + + def add(self, item): + self.inventory.append(item) + return item + + def remove(self, item): + if item in self.inventory: + self.inventory.remove(item) + return item + else: + return None \ No newline at end of file diff --git a/tests/unit_tests/test_wave_01.py b/tests/unit_tests/test_wave_01.py index 019ff1d58..7652446e3 100644 --- a/tests/unit_tests/test_wave_01.py +++ b/tests/unit_tests/test_wave_01.py @@ -2,12 +2,12 @@ import pytest from swap_meet.vendor import Vendor -@pytest.mark.skip +# @pytest.mark.skip def test_vendor_has_inventory(): vendor = Vendor() assert len(vendor.inventory) == 0 -@pytest.mark.skip +# @pytest.mark.skip def test_vendor_takes_optional_inventory(): inventory = ["a", "b", "c"] vendor = Vendor(inventory=inventory) @@ -16,7 +16,7 @@ def test_vendor_takes_optional_inventory(): assert "b" in vendor.inventory assert "c" in vendor.inventory -@pytest.mark.skip +# @pytest.mark.skip def test_adding_to_inventory(): vendor = Vendor() item = "new item" @@ -27,7 +27,7 @@ def test_adding_to_inventory(): assert item in vendor.inventory assert result == item -@pytest.mark.skip +# @pytest.mark.skip def test_removing_from_inventory_returns_item(): item = "item to remove" vendor = Vendor( @@ -40,7 +40,7 @@ def test_removing_from_inventory_returns_item(): assert item not in vendor.inventory assert result == item -@pytest.mark.skip +# @pytest.mark.skip def test_removing_not_found_returns_none(): item = "item to remove" vendor = Vendor( @@ -49,7 +49,10 @@ def test_removing_not_found_returns_none(): result = vendor.remove(item) - raise Exception("Complete this test according to comments below.") + # raise Exception("Complete this test according to comments below.") # ********************************************************************* # ****** Complete Assert Portion of this test ********** # ********************************************************************* + assert len(vendor.inventory) == 3 + assert item not in vendor.inventory + assert result is None From c5e096b6d355a80bc68c23a8432be66d6475a1ca Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 1 Dec 2022 18:18:15 -0500 Subject: [PATCH 02/21] Passes Wave 2 tests --- swap_meet/item.py | 9 ++++++++- swap_meet/vendor.py | 13 +++++++++++-- tests/unit_tests/test_wave_02.py | 12 ++++++------ 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/swap_meet/item.py b/swap_meet/item.py index 560d759c2..9eee70751 100644 --- a/swap_meet/item.py +++ b/swap_meet/item.py @@ -1,2 +1,9 @@ +import uuid + class Item: - pass \ No newline at end of file + + def __init__(self, id = None): + self.id = id if id is not None else uuid.uuid1().int + + def get_category(self): + return 'Item' \ No newline at end of file diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index 2177fa232..fabc009d6 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -10,5 +10,14 @@ def remove(self, item): if item in self.inventory: self.inventory.remove(item) return item - else: - return None \ No newline at end of file + return None + + def get_by_id(self, id): + + for item in self.inventory: + if item.id == id: + self.inventory.remove(item) + return item + + return None + \ No newline at end of file diff --git a/tests/unit_tests/test_wave_02.py b/tests/unit_tests/test_wave_02.py index f4b512222..cf8253198 100644 --- a/tests/unit_tests/test_wave_02.py +++ b/tests/unit_tests/test_wave_02.py @@ -2,30 +2,30 @@ from swap_meet.vendor import Vendor from swap_meet.item import Item -@pytest.mark.skip +# @pytest.mark.skip def test_items_have_default_uuid_length_id(): item = Item() assert isinstance(item.id, int) assert len(str(item.id)) >= 32 -@pytest.mark.skip +# @pytest.mark.skip def test_item_instances_have_different_default_ids(): item_a = Item() item_b = Item() assert item_a.id != item_b.id -@pytest.mark.skip +# @pytest.mark.skip def test_items_use_custom_id_if_passed(): item = Item(id=12345) assert isinstance(item.id, int) assert item.id == 12345 -@pytest.mark.skip +# @pytest.mark.skip def test_item_obj_returns_text_item_for_category(): item = Item() assert item.get_category() == "Item" -@pytest.mark.skip +# @pytest.mark.skip def test_get_item_by_id(): test_id = 12345 item_custom_id = Item(id=test_id) @@ -36,7 +36,7 @@ def test_get_item_by_id(): result_item = vendor.get_by_id(test_id) assert result_item is item_custom_id -@pytest.mark.skip +# @pytest.mark.skip def test_get_item_by_id_no_matching(): test_id = 12345 item_a = Item() From 01aaf3a03b6c05ebe47c567f72d3062ca063282e Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 1 Dec 2022 18:53:58 -0500 Subject: [PATCH 03/21] Passes Wave 3 tests --- swap_meet/item.py | 5 ++++- swap_meet/vendor.py | 13 +++++++++++++ tests/unit_tests/test_wave_03.py | 17 ++++++++++------- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/swap_meet/item.py b/swap_meet/item.py index 9eee70751..af79cec2d 100644 --- a/swap_meet/item.py +++ b/swap_meet/item.py @@ -6,4 +6,7 @@ def __init__(self, id = None): self.id = id if id is not None else uuid.uuid1().int def get_category(self): - return 'Item' \ No newline at end of file + return 'Item' + + def __str__(self): + return f"An object of type Item with id {self.id}" \ No newline at end of file diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index fabc009d6..9a97c2a22 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -20,4 +20,17 @@ def get_by_id(self, id): return item return None + + def swap_items(self, other_vendor, my_item, their_item): + + if my_item not in self.inventory or their_item not in other_vendor.inventory: + return False + + self.inventory.remove(my_item) + other_vendor.inventory.append(my_item) + + other_vendor.inventory.remove(their_item) + self.inventory.append(their_item) + + return True \ No newline at end of file diff --git a/tests/unit_tests/test_wave_03.py b/tests/unit_tests/test_wave_03.py index d4fd96017..8fe889af1 100644 --- a/tests/unit_tests/test_wave_03.py +++ b/tests/unit_tests/test_wave_03.py @@ -2,7 +2,7 @@ from swap_meet.vendor import Vendor from swap_meet.item import Item -@pytest.mark.skip +# @pytest.mark.skip def test_item_overrides_to_string(): test_id = 12345 item = Item(id=test_id) @@ -12,7 +12,7 @@ def test_item_overrides_to_string(): expected_result = f"An object of type Item with id {test_id}" assert item_as_string == expected_result -@pytest.mark.skip +# @pytest.mark.skip def test_swap_items_returns_true(): item_a = Item() item_b = Item() @@ -40,7 +40,7 @@ def test_swap_items_returns_true(): assert item_b in jolie.inventory assert result -@pytest.mark.skip +# @pytest.mark.skip def test_swap_items_when_my_item_is_missing_returns_false(): item_a = Item() item_b = Item() @@ -67,7 +67,7 @@ def test_swap_items_when_my_item_is_missing_returns_false(): assert item_e in jolie.inventory assert not result -@pytest.mark.skip +# @pytest.mark.skip def test_swap_items_when_their_item_is_missing_returns_false(): item_a = Item() item_b = Item() @@ -94,7 +94,7 @@ def test_swap_items_when_their_item_is_missing_returns_false(): assert item_e in jolie.inventory assert not result -@pytest.mark.skip +# @pytest.mark.skip def test_swap_items_from_my_empty_returns_false(): fatimah = Vendor( inventory=[] @@ -114,7 +114,7 @@ def test_swap_items_from_my_empty_returns_false(): assert len(jolie.inventory) == 2 assert not result -@pytest.mark.skip +# @pytest.mark.skip def test_swap_items_from_their_empty_returns_false(): item_a = Item() item_b = Item() @@ -131,7 +131,10 @@ def test_swap_items_from_their_empty_returns_false(): result = fatimah.swap_items(jolie, item_b, nobodys_item) - raise Exception("Complete this test according to comments below.") + # raise Exception("Complete this test according to comments below.") # ********************************************************************* # ****** Complete Assert Portion of this test ********** # ********************************************************************* + assert len(fatimah.inventory) == 3 + assert len(jolie.inventory) == 0 + assert not result From 30843af69297526afeff4080821480a36350f1d6 Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 1 Dec 2022 19:17:23 -0500 Subject: [PATCH 04/21] Passes Wave 4 tests --- swap_meet/vendor.py | 12 ++++++++++++ tests/unit_tests/test_wave_04.py | 6 +++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index 9a97c2a22..1d42aded1 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -33,4 +33,16 @@ def swap_items(self, other_vendor, my_item, their_item): self.inventory.append(their_item) return True + + def swap_first_item(self, other_vendor): + if not self.inventory or not other_vendor.inventory: + return False + + self.inventory.append(other_vendor.inventory[0]) + other_vendor.inventory.append(self.inventory[0]) + + self.inventory.pop(0) + other_vendor.inventory.pop(0) + + return True \ No newline at end of file diff --git a/tests/unit_tests/test_wave_04.py b/tests/unit_tests/test_wave_04.py index 87addbbf6..135388335 100644 --- a/tests/unit_tests/test_wave_04.py +++ b/tests/unit_tests/test_wave_04.py @@ -2,7 +2,7 @@ from swap_meet.vendor import Vendor from swap_meet.item import Item -@pytest.mark.skip +# @pytest.mark.skip def test_swap_first_item_returns_true(): item_a = Item() item_b = Item() @@ -30,7 +30,7 @@ def test_swap_first_item_returns_true(): assert item_a in jolie.inventory assert result -@pytest.mark.skip +# @pytest.mark.skip def test_swap_first_item_from_my_empty_returns_false(): fatimah = Vendor( inventory=[] @@ -48,7 +48,7 @@ def test_swap_first_item_from_my_empty_returns_false(): assert len(jolie.inventory) == 2 assert not result -@pytest.mark.skip +# @pytest.mark.skip def test_swap_first_item_from_their_empty_returns_false(): item_a = Item() item_b = Item() From fe5291bf0142f8fb8a910734e3838ec9a3792aed Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 1 Dec 2022 20:31:50 -0500 Subject: [PATCH 05/21] Passes Wave 5 tests --- swap_meet/clothing.py | 17 +++++++++++++++-- swap_meet/decor.py | 19 +++++++++++++++++-- swap_meet/electronics.py | 18 ++++++++++++++++-- swap_meet/item.py | 16 ++++++++++++++-- tests/unit_tests/test_wave_05.py | 28 ++++++++++++++-------------- 5 files changed, 76 insertions(+), 22 deletions(-) diff --git a/swap_meet/clothing.py b/swap_meet/clothing.py index b8afdeb1e..216105d59 100644 --- a/swap_meet/clothing.py +++ b/swap_meet/clothing.py @@ -1,2 +1,15 @@ -class Clothing: - pass \ No newline at end of file +import uuid +from swap_meet.item import Item + +class Clothing(Item): + def __init__(self, fabric = "Unknown", id = None, condition = 0): + super().__init__() + self.id = id if id is not None else uuid.uuid1().int + self.fabric = fabric + self.condition = condition + + def get_category(self): + return "Clothing" + + def __str__(self): + return f"An object of type Clothing with id {self.id}. It is made from {self.fabric} fabric." \ No newline at end of file diff --git a/swap_meet/decor.py b/swap_meet/decor.py index eab7a9dbe..7e7d76615 100644 --- a/swap_meet/decor.py +++ b/swap_meet/decor.py @@ -1,2 +1,17 @@ -class Decor: - pass \ No newline at end of file +import uuid +from swap_meet.item import Item + +class Decor(Item): + def __init__(self, id = None, width = 0, length = 0, condition = 0): + super().__init__() + self.id = id if id is not None else uuid.uuid1().int + self.width = width + self.length = length + self.condition = condition + + def get_category(self): + return "Decor" + + def __str__(self): + return f"An object of type Decor with id {self.id}. It takes up " \ + f"a {self.width} by {self.length} sized space." \ No newline at end of file diff --git a/swap_meet/electronics.py b/swap_meet/electronics.py index 2f9dff68a..80e48cfa9 100644 --- a/swap_meet/electronics.py +++ b/swap_meet/electronics.py @@ -1,2 +1,16 @@ -class Electronics: - pass +import uuid +from swap_meet.item import Item + +class Electronics(Item): + def __init__(self, id = None, type = "Unknown", condition = 0): + super().__init__() + self.id = id if id is not None else uuid.uuid1().int + self.type = type + self.condition = condition + + def get_category(self): + return "Electronics" + + def __str__(self): + return f"An object of type Electronics with id {self.id}. This is a " \ + f"{self.type} device." diff --git a/swap_meet/item.py b/swap_meet/item.py index af79cec2d..1e601496e 100644 --- a/swap_meet/item.py +++ b/swap_meet/item.py @@ -2,11 +2,23 @@ class Item: - def __init__(self, id = None): + def __init__(self, id = None, condition = 0): self.id = id if id is not None else uuid.uuid1().int + self.condition = condition def get_category(self): - return 'Item' + return "Item" + + def condition_description(self): + switch = { + 0 : "gross", + 1 : "not good", + 2 : "okay", + 3 : "good", + 4 : "not bad", + 5 : "excellent" + } + return switch.get(self.condition) def __str__(self): return f"An object of type Item with id {self.id}" \ No newline at end of file diff --git a/tests/unit_tests/test_wave_05.py b/tests/unit_tests/test_wave_05.py index 7770aee07..e03c5243c 100644 --- a/tests/unit_tests/test_wave_05.py +++ b/tests/unit_tests/test_wave_05.py @@ -7,17 +7,17 @@ # ~~~~~ Clothing Tests ~~~~~ -@pytest.mark.skip +# @pytest.mark.skip def test_clothing_has_default_uuid_length_id(): clothing = Clothing() check_for_default_uuid_length_id(clothing) -@pytest.mark.skip +# @pytest.mark.skip def test_clothing_has_expected_category_and_custom_id(): clothing = Clothing(id=TEST_CUSTOM_ID) check_category_and_custom_id(clothing, TEST_CUSTOM_ID, "Clothing") -@pytest.mark.skip +# @pytest.mark.skip def test_clothing_has_expected_default_to_str(): clothing = Clothing(id=TEST_CUSTOM_ID) expected_str = ( @@ -26,7 +26,7 @@ def test_clothing_has_expected_default_to_str(): ) assert str(clothing) == expected_str -@pytest.mark.skip +# @pytest.mark.skip def test_clothing_has_expected_to_str_with_custom_fabric(): clothing = Clothing(id=TEST_CUSTOM_ID, fabric="Pinstriped") expected_str = ( @@ -37,17 +37,17 @@ def test_clothing_has_expected_to_str_with_custom_fabric(): # ~~~~~ Decor Tests ~~~~~ -@pytest.mark.skip +# @pytest.mark.skip def test_decor_has_default_uuid_length_id(): decor = Decor() check_for_default_uuid_length_id(decor) -@pytest.mark.skip +# @pytest.mark.skip def test_decor_has_expected_category_and_custom_id(): decor = Decor(id=TEST_CUSTOM_ID) check_category_and_custom_id(decor, TEST_CUSTOM_ID, "Decor") -@pytest.mark.skip +# @pytest.mark.skip def test_decor_has_expected_default_to_str(): decor = Decor(id=TEST_CUSTOM_ID) expected_str = ( @@ -56,7 +56,7 @@ def test_decor_has_expected_default_to_str(): ) assert str(decor) == expected_str -@pytest.mark.skip +# @pytest.mark.skip def test_decor_has_expected_to_str_with_custom_size(): decor = Decor(id=TEST_CUSTOM_ID, width=3, length=12) expected_str = ( @@ -67,17 +67,17 @@ def test_decor_has_expected_to_str_with_custom_size(): # ~~~~~ Electronics Tests ~~~~~ -@pytest.mark.skip +# @pytest.mark.skip def test_electronics_has_default_uuid_length_id(): electronics = Electronics() check_for_default_uuid_length_id(electronics) -@pytest.mark.skip +# @pytest.mark.skip def test_electronics_has_expected_category_and_custom_id(): electronics = Electronics(id=TEST_CUSTOM_ID) check_category_and_custom_id(electronics, TEST_CUSTOM_ID, "Electronics") -@pytest.mark.skip +# @pytest.mark.skip def test_electronics_has_expected_default_to_str(): electronics = Electronics(id=TEST_CUSTOM_ID) expected_str = ( @@ -86,7 +86,7 @@ def test_electronics_has_expected_default_to_str(): ) assert str(electronics) == expected_str -@pytest.mark.skip +# @pytest.mark.skip def test_electronics_has_expected_to_str_with_custom_type(): electronics = Electronics(id=TEST_CUSTOM_ID, type="Mobile Phone") expected_str = ( @@ -97,7 +97,7 @@ def test_electronics_has_expected_to_str_with_custom_type(): # ~~~~~ Item Tests ~~~~~ -@pytest.mark.skip +# @pytest.mark.skip def test_items_have_condition_as_float(): items = [ Clothing(condition=3.5), @@ -107,7 +107,7 @@ def test_items_have_condition_as_float(): for item in items: assert item.condition == pytest.approx(3.5) -@pytest.mark.skip +# @pytest.mark.skip def test_items_have_condition_descriptions_that_are_the_same_regardless_of_type(): items = [ Clothing(condition=5), From cfc62db5f2d87edc101e185fad4259e5ddbbb132 Mon Sep 17 00:00:00 2001 From: kelly Date: Fri, 2 Dec 2022 11:56:42 -0500 Subject: [PATCH 06/21] Refactor for inheritance. Passes Wave 5 tests --- swap_meet/clothing.py | 13 +++++-------- swap_meet/decor.py | 14 +++++--------- swap_meet/electronics.py | 15 ++++++--------- swap_meet/item.py | 5 +++-- swap_meet/vendor.py | 4 ++-- 5 files changed, 21 insertions(+), 30 deletions(-) diff --git a/swap_meet/clothing.py b/swap_meet/clothing.py index 216105d59..5589fdd3a 100644 --- a/swap_meet/clothing.py +++ b/swap_meet/clothing.py @@ -1,15 +1,12 @@ -import uuid from swap_meet.item import Item class Clothing(Item): def __init__(self, fabric = "Unknown", id = None, condition = 0): - super().__init__() - self.id = id if id is not None else uuid.uuid1().int + super().__init__(id, condition) self.fabric = fabric - self.condition = condition - - def get_category(self): - return "Clothing" def __str__(self): - return f"An object of type Clothing with id {self.id}. It is made from {self.fabric} fabric." \ No newline at end of file + summary = super().__str__() + class_summary = f"It is made from {self.fabric} fabric." + + return ". ".join((summary, class_summary)) \ No newline at end of file diff --git a/swap_meet/decor.py b/swap_meet/decor.py index 7e7d76615..0f8d2e8b7 100644 --- a/swap_meet/decor.py +++ b/swap_meet/decor.py @@ -1,17 +1,13 @@ -import uuid from swap_meet.item import Item class Decor(Item): def __init__(self, id = None, width = 0, length = 0, condition = 0): - super().__init__() - self.id = id if id is not None else uuid.uuid1().int + super().__init__(id, condition) self.width = width self.length = length - self.condition = condition - - def get_category(self): - return "Decor" def __str__(self): - return f"An object of type Decor with id {self.id}. It takes up " \ - f"a {self.width} by {self.length} sized space." \ No newline at end of file + summary = super().__str__() + class_summary = f"It takes up a {self.width} by {self.length} sized space." + + return ". ".join((summary, class_summary)) \ No newline at end of file diff --git a/swap_meet/electronics.py b/swap_meet/electronics.py index 80e48cfa9..17608d688 100644 --- a/swap_meet/electronics.py +++ b/swap_meet/electronics.py @@ -1,16 +1,13 @@ -import uuid from swap_meet.item import Item class Electronics(Item): def __init__(self, id = None, type = "Unknown", condition = 0): - super().__init__() - self.id = id if id is not None else uuid.uuid1().int + super().__init__(id, condition) self.type = type - self.condition = condition - - def get_category(self): - return "Electronics" def __str__(self): - return f"An object of type Electronics with id {self.id}. This is a " \ - f"{self.type} device." + + summary = super().__str__() + class_summary = f"This is a {self.type} device." + + return ". ".join((summary, class_summary)) diff --git a/swap_meet/item.py b/swap_meet/item.py index 1e601496e..6c55684a0 100644 --- a/swap_meet/item.py +++ b/swap_meet/item.py @@ -7,7 +7,8 @@ def __init__(self, id = None, condition = 0): self.condition = condition def get_category(self): - return "Item" + return type(self).__name__ + def condition_description(self): switch = { @@ -21,4 +22,4 @@ def condition_description(self): return switch.get(self.condition) def __str__(self): - return f"An object of type Item with id {self.id}" \ No newline at end of file + return f"An object of type {self.get_category()} with id {self.id}" \ No newline at end of file diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index 1d42aded1..fae5b9b47 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -16,14 +16,14 @@ def get_by_id(self, id): for item in self.inventory: if item.id == id: - self.inventory.remove(item) return item return None def swap_items(self, other_vendor, my_item, their_item): - if my_item not in self.inventory or their_item not in other_vendor.inventory: + if my_item not in self.inventory or \ + their_item not in other_vendor.inventory: return False self.inventory.remove(my_item) From 05f3a1d20040003be858ec602c354472e92e8e53 Mon Sep 17 00:00:00 2001 From: kelly Date: Fri, 2 Dec 2022 13:12:13 -0500 Subject: [PATCH 07/21] Passes Wave 6 tests --- swap_meet/decor.py | 1 + swap_meet/vendor.py | 41 +++++++++++++ tests/unit_tests/test_wave_06.py | 98 +++++++++++++++++++++++++------- 3 files changed, 119 insertions(+), 21 deletions(-) diff --git a/swap_meet/decor.py b/swap_meet/decor.py index 0f8d2e8b7..5fe39abbd 100644 --- a/swap_meet/decor.py +++ b/swap_meet/decor.py @@ -7,6 +7,7 @@ def __init__(self, id = None, width = 0, length = 0, condition = 0): self.length = length def __str__(self): + summary = super().__str__() class_summary = f"It takes up a {self.width} by {self.length} sized space." diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index fae5b9b47..feede3a3f 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -20,6 +20,47 @@ def get_by_id(self, id): return None + def get_by_category(self, category): + category_items = [] + + for item in self.inventory: + if item.get_category() == category: + category_items.append(item) + + return category_items + + + def get_best_by_category(self, category): + + category_items = self.get_by_category(category) + if not category_items: + return None + + highest_value = 0 + item_to_return = None + + for item in category_items: + if item.condition > highest_value: + highest_value = item.condition + item_to_return = item + return item_to_return + + def swap_best_by_category(self, other_vendor, my_priority, their_priority): + + # if my_priority == getbestbycategory on othervendorinv + # if their_priority == getbestbycategory on self.inventory + + # swap + my_item = self.get_best_by_category(their_priority) + their_item = other_vendor.get_best_by_category(my_priority) + + if not their_item or not my_item: + return False + + self.swap_items(other_vendor, my_item, their_item) + + return True + def swap_items(self, other_vendor, my_item, their_item): if my_item not in self.inventory or \ diff --git a/tests/unit_tests/test_wave_06.py b/tests/unit_tests/test_wave_06.py index ad51bf42d..dfbed1904 100644 --- a/tests/unit_tests/test_wave_06.py +++ b/tests/unit_tests/test_wave_06.py @@ -5,7 +5,7 @@ from swap_meet.decor import Decor from swap_meet.electronics import Electronics -@pytest.mark.skip +# @pytest.mark.skip def test_get_items_by_category(): item_a = Clothing() item_b = Electronics() @@ -22,7 +22,7 @@ def test_get_items_by_category(): assert item_a in items assert item_c in items -@pytest.mark.skip +# @pytest.mark.skip def test_get_no_matching_items_by_category(): item_a = Clothing() item_b = Item() @@ -33,12 +33,14 @@ def test_get_no_matching_items_by_category(): items = vendor.get_by_category("Electronics") - raise Exception("Complete this test according to comments below.") + # raise Exception("Complete this test according to comments below.") # ********************************************************************* # ****** Complete Assert Portion of this test ********** # ********************************************************************* + assert items == [] + assert len(items) == 0 -@pytest.mark.skip +# @pytest.mark.skip def test_best_by_category(): item_a = Clothing(condition=2.0) item_b = Decor(condition=2.0) @@ -54,7 +56,7 @@ def test_best_by_category(): assert best_item.get_category() == "Clothing" assert best_item.condition == pytest.approx(4.0) -@pytest.mark.skip +# @pytest.mark.skip def test_best_by_category_no_matches_is_none(): item_a = Decor(condition=2.0) item_b = Decor(condition=2.0) @@ -67,7 +69,7 @@ def test_best_by_category_no_matches_is_none(): assert best_item is None -@pytest.mark.skip +# @pytest.mark.skip def test_best_by_category_with_duplicates(): # Arrange item_a = Clothing(condition=2.0) @@ -84,7 +86,7 @@ def test_best_by_category_with_duplicates(): assert best_item.get_category() == "Clothing" assert best_item.condition == pytest.approx(4.0) -@pytest.mark.skip +# @pytest.mark.skip def test_swap_best_by_category(): # Arrange # me @@ -110,16 +112,30 @@ def test_swap_best_by_category(): their_priority="Decor" ) - raise Exception("Complete this test according to comments below.") + # raise Exception("Complete this test according to comments below.") # ********************************************************************* # ****** Complete Assert Portion of this test ********** # ********************************************************************* # Assertions should check: # - That the results is truthy + assert result == True + # - That tai and jesse's inventories are the correct length + assert len(tai.inventory) == 3 + assert len(jesse.inventory) == 3 + # - That all the correct items are in tai and jesse's inventories, including the items which were swapped from one vendor to the other + assert item_f in tai.inventory + assert item_a in tai.inventory + assert item_b in tai.inventory + assert item_c not in tai.inventory -@pytest.mark.skip + assert item_c in jesse.inventory + assert item_d in jesse.inventory + assert item_e in jesse.inventory + assert item_f not in jesse.inventory + +# @pytest.mark.skip def test_swap_best_by_category_reordered(): # Arrange item_a = Decor(condition=2.0) @@ -143,16 +159,30 @@ def test_swap_best_by_category_reordered(): their_priority="Decor" ) - raise Exception("Complete this test according to comments below.") + # raise Exception("Complete this test according to comments below.") # ********************************************************************* # ****** Complete Assert Portion of this test ********** # ********************************************************************* # Assertions should check: - # - That result is truthy + # - That the results is truthy + assert result == True + # - That tai and jesse's inventories are the correct length + assert len(tai.inventory) == 3 + assert len(jesse.inventory) == 3 + # - That all the correct items are in tai and jesse's inventories, and that the items that were swapped are not there + assert item_f in tai.inventory + assert item_a in tai.inventory + assert item_b in tai.inventory + assert item_c not in tai.inventory -@pytest.mark.skip + assert item_c in jesse.inventory + assert item_d in jesse.inventory + assert item_e in jesse.inventory + assert item_f not in jesse.inventory + +# @pytest.mark.skip def test_swap_best_by_category_no_inventory_is_false(): tai = Vendor( inventory=[] @@ -178,7 +208,7 @@ def test_swap_best_by_category_no_inventory_is_false(): assert item_b in jesse.inventory assert item_c in jesse.inventory -@pytest.mark.skip +# @pytest.mark.skip def test_swap_best_by_category_no_other_inventory_is_false(): item_a = Clothing(condition=2.0) item_b = Decor(condition=4.0) @@ -204,7 +234,7 @@ def test_swap_best_by_category_no_other_inventory_is_false(): assert item_b in tai.inventory assert item_c in tai.inventory -@pytest.mark.skip +# @pytest.mark.skip def test_swap_best_by_category_no_match_is_false(): # Arrange item_a = Decor(condition=2.0) @@ -228,16 +258,30 @@ def test_swap_best_by_category_no_match_is_false(): their_priority="Clothing" ) - raise Exception("Complete this test according to comments below.") + # raise Exception("Complete this test according to comments below.") # ********************************************************************* # ****** Complete Assert Portion of this test ********** # ********************************************************************* # Assertions should check: - # - That result is falsy + + # - That the results is falsey + assert result == False + # - That tai and jesse's inventories are the correct length - # - That all the correct items are in tai and jesse's inventories + assert len(tai.inventory) == 3 + assert len(jesse.inventory) == 3 -@pytest.mark.skip + # - That all the correct items are in tai and jesse's inventories + assert item_a in tai.inventory + assert item_b in tai.inventory + assert item_c in tai.inventory + + assert item_d in jesse.inventory + assert item_e in jesse.inventory + assert item_f in jesse.inventory + + +# @pytest.mark.skip def test_swap_best_by_category_no_other_match_is_false(): # Arrange item_a = Decor(condition=2.0) @@ -261,11 +305,23 @@ def test_swap_best_by_category_no_other_match_is_false(): their_priority="Decor" ) - raise Exception("Complete this test according to comments below.") + # raise Exception("Complete this test according to comments below.") # ********************************************************************* # ****** Complete Assert Portion of this test ********** # ********************************************************************* # Assertions should check: - # - That result is falsy + # - That the results is falsey + assert result == False + # - That tai and jesse's inventories are the correct length - # - That all the correct items are in tai and jesse's inventories + assert len(tai.inventory) == 3 + assert len(jesse.inventory) == 3 + + # - That all the correct items are in tai and jesse's inventories + assert item_a in tai.inventory + assert item_b in tai.inventory + assert item_c in tai.inventory + + assert item_d in jesse.inventory + assert item_e in jesse.inventory + assert item_f in jesse.inventory \ No newline at end of file From b86231391310b93bdb630c5c2cab663afafccb3b Mon Sep 17 00:00:00 2001 From: kelly Date: Fri, 2 Dec 2022 13:20:34 -0500 Subject: [PATCH 08/21] Refactor swap_first_item --- swap_meet/vendor.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index feede3a3f..08c51420f 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -47,10 +47,6 @@ def get_best_by_category(self, category): def swap_best_by_category(self, other_vendor, my_priority, their_priority): - # if my_priority == getbestbycategory on othervendorinv - # if their_priority == getbestbycategory on self.inventory - - # swap my_item = self.get_best_by_category(their_priority) their_item = other_vendor.get_best_by_category(my_priority) @@ -78,12 +74,8 @@ def swap_items(self, other_vendor, my_item, their_item): def swap_first_item(self, other_vendor): if not self.inventory or not other_vendor.inventory: return False - - self.inventory.append(other_vendor.inventory[0]) - other_vendor.inventory.append(self.inventory[0]) - self.inventory.pop(0) - other_vendor.inventory.pop(0) + self.swap_items(other_vendor, self.inventory[0], other_vendor.inventory[0]) return True \ No newline at end of file From 2c0889f16f2f8957fccfee219b60599f97ad8bfa Mon Sep 17 00:00:00 2001 From: kelly Date: Fri, 2 Dec 2022 15:48:36 -0500 Subject: [PATCH 09/21] Passes Wave 7 tests --- swap_meet/vendor.py | 48 ++++++++++++++++++++++++++++++-- tests/unit_tests/test_wave_07.py | 30 ++++++++++---------- 2 files changed, 61 insertions(+), 17 deletions(-) diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index 08c51420f..98c26b60c 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -75,7 +75,51 @@ def swap_first_item(self, other_vendor): if not self.inventory or not other_vendor.inventory: return False - self.swap_items(other_vendor, self.inventory[0], other_vendor.inventory[0]) + swapped = self.swap_items(other_vendor, self.inventory[0], other_vendor.inventory[0]) - return True + return swapped + + def swap_by_id(self, other_vendor, my_item_id, their_item_id): + my_item = self.get_by_id(my_item_id) + their_item = other_vendor.get_by_id(their_item_id) + + if not their_item or not my_item: + return False + + swapped = self.swap_items(other_vendor, my_item, their_item) + + return swapped + + def choose_and_swap_items(self, other_vendor, category = ''): + self.display_inventory(category) + other_vendor.display_inventory(category) + + my_item_id = input('Enter item from your inventory by id: ') + their_item_id = input('Enter item from their inventory by id: ') + + swapped = self.swap_by_id(other_vendor, int(my_item_id), int(their_item_id)) + + return swapped + + + def display_inventory(self, category = ''): + + # Refactor + + if not self.inventory: + print("No inventory to display.") + return + + if category: + items = self.get_by_category(category) + if items: + for i in range(len(items)): + print(f"{i + 1}. {str(items[i])}") + else: + print("No inventory to display.") + else: + for i in range(len(self.inventory)): + print(f"{i + 1}. {str(self.inventory[i])}") + + \ No newline at end of file diff --git a/tests/unit_tests/test_wave_07.py b/tests/unit_tests/test_wave_07.py index 005b82ecc..46d503bcb 100644 --- a/tests/unit_tests/test_wave_07.py +++ b/tests/unit_tests/test_wave_07.py @@ -7,7 +7,7 @@ # ~~~~~ display_inventory Tests ~~~~~ -@pytest.mark.skip +# @pytest.mark.skip def test_display_inventory_with_items_no_category(capfd): # Arrange item_a = Clothing(id=123, fabric="Striped") @@ -31,7 +31,7 @@ def test_display_inventory_with_items_no_category(capfd): ) assert captured.out == expected_str -@pytest.mark.skip +# @pytest.mark.skip def test_display_inventory_with_items_and_category(capfd): # Arrange item_a = Decor(id=123, width=2, length=4) @@ -52,7 +52,7 @@ def test_display_inventory_with_items_and_category(capfd): ) assert captured.out == expected_str -@pytest.mark.skip +# @pytest.mark.skip def test_display_inventory_with_category_and_no_matching_items(capfd): # Arrange item_a = Decor(id=123, width=2, length=4) @@ -72,7 +72,7 @@ def test_display_inventory_with_category_and_no_matching_items(capfd): ) assert captured.out == expected_str -@pytest.mark.skip +# @pytest.mark.skip def test_display_inventory_no_items_no_category(capfd): # Arrange vendor = Vendor(inventory=[]) @@ -87,7 +87,7 @@ def test_display_inventory_no_items_no_category(capfd): ) assert captured.out == expected_str -@pytest.mark.skip +# @pytest.mark.skip def test_display_inventory_no_items_with_category(capfd): # Arrange vendor = Vendor(inventory=[]) @@ -104,7 +104,7 @@ def test_display_inventory_no_items_with_category(capfd): # ~~~~~ swap_by_id Tests ~~~~~ -@pytest.mark.skip +# @pytest.mark.skip def test_swap_by_id_success_returns_true(): # Arrange item_a = Decor(id=123) @@ -141,7 +141,7 @@ def test_swap_by_id_success_returns_true(): assert item_e in jesse.inventory assert item_f in jesse.inventory -@pytest.mark.skip +# @pytest.mark.skip def test_swap_by_id_with_caller_empty_inventory_returns_false(): # Arrange tai = Vendor(inventory=[]) @@ -169,7 +169,7 @@ def test_swap_by_id_with_caller_empty_inventory_returns_false(): assert item_e in jesse.inventory assert item_f in jesse.inventory -@pytest.mark.skip +# @pytest.mark.skip def test_swap_by_id_with_other_empty_inventory_returns_false(): # Arrange item_a = Decor(id=123) @@ -198,7 +198,7 @@ def test_swap_by_id_with_other_empty_inventory_returns_false(): assert len(jesse.inventory) == 0 -@pytest.mark.skip +# @pytest.mark.skip def test_swap_by_id_fails_if_caller_missing_item(): # Arrange item_a = Decor(id=123) @@ -235,7 +235,7 @@ def test_swap_by_id_fails_if_caller_missing_item(): assert item_e in jesse.inventory assert item_f in jesse.inventory -@pytest.mark.skip +# @pytest.mark.skip def test_swap_by_id_fails_if_other_missing_item(): # Arrange item_a = Decor(id=123) @@ -274,7 +274,7 @@ def test_swap_by_id_fails_if_other_missing_item(): # ~~~~~ choose_and_swap_items Tests ~~~~~ -@pytest.mark.skip +# @pytest.mark.skip def test_choose_and_swap_items_success(monkeypatch): # Arrange item_a = Decor(id=123) @@ -311,7 +311,7 @@ def test_choose_and_swap_items_success(monkeypatch): assert item_d in jesse.inventory assert item_e in jesse.inventory -@pytest.mark.skip +# @pytest.mark.skip def test_choose_and_swap_items_with_calling_inventory_empty(monkeypatch): # Arrange tai = Vendor(inventory=[]) @@ -339,7 +339,7 @@ def test_choose_and_swap_items_with_calling_inventory_empty(monkeypatch): assert item_e in jesse.inventory assert item_f in jesse.inventory -@pytest.mark.skip +# @pytest.mark.skip def test_choose_and_swap_items_with_other_inventory_empty(monkeypatch): # Arrange item_a = Decor(id=123) @@ -368,7 +368,7 @@ def test_choose_and_swap_items_with_other_inventory_empty(monkeypatch): assert len(jesse.inventory) == 0 -@pytest.mark.skip +# @pytest.mark.skip def test_choose_and_swap_items_with_caller_missing_item(monkeypatch): # Arrange item_a = Decor(id=123) @@ -405,7 +405,7 @@ def test_choose_and_swap_items_with_caller_missing_item(monkeypatch): assert item_e in jesse.inventory assert item_f in jesse.inventory -@pytest.mark.skip +# @pytest.mark.skip def test_choose_and_swap_items_with_other_vendor_missing_item(monkeypatch): # Arrange item_a = Decor(id=123) From 222a77dfe253de63438eaae9d95a6dcd2d9ac2e5 Mon Sep 17 00:00:00 2001 From: kelly Date: Fri, 2 Dec 2022 15:53:58 -0500 Subject: [PATCH 10/21] Passes Integration tests --- tests/integration_tests/test_wave_01_02_03.py | 2 +- tests/integration_tests/test_wave_04_05_06_07.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration_tests/test_wave_01_02_03.py b/tests/integration_tests/test_wave_01_02_03.py index 404641a86..f69b98916 100644 --- a/tests/integration_tests/test_wave_01_02_03.py +++ b/tests/integration_tests/test_wave_01_02_03.py @@ -2,7 +2,7 @@ from swap_meet.vendor import Vendor from swap_meet.item import Item -@pytest.mark.skip +# @pytest.mark.skip @pytest.mark.integration_test def test_integration_wave_01_02_03(): # make a vendor diff --git a/tests/integration_tests/test_wave_04_05_06_07.py b/tests/integration_tests/test_wave_04_05_06_07.py index cdbf79eaf..d1a2a72ee 100644 --- a/tests/integration_tests/test_wave_04_05_06_07.py +++ b/tests/integration_tests/test_wave_04_05_06_07.py @@ -4,7 +4,7 @@ from swap_meet.decor import Decor from swap_meet.electronics import Electronics -@pytest.mark.skip +# @pytest.mark.skip @pytest.mark.integration_test def test_integration_wave_04_05_06(capfd): camila = Vendor() From 528e02823ff2ee02bbe3451f13d47dd106542b8c Mon Sep 17 00:00:00 2001 From: kelly Date: Wed, 7 Dec 2022 08:35:32 -0500 Subject: [PATCH 11/21] Refactors Vendor methods --- swap_meet/vendor.py | 100 ++++++++++++++++++++++++++++---------------- 1 file changed, 65 insertions(+), 35 deletions(-) diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index 98c26b60c..cab2692a7 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -14,36 +14,52 @@ def remove(self, item): def get_by_id(self, id): - for item in self.inventory: - if item.id == id: - return item + # for item in self.inventory: + # if item.id == id: + # return item + # item = list(filter(lambda x: x.id == id, self.inventory))[0] + # return item if item else None - return None + item = next((i for i in self.inventory if i.id == id), None) + + return item def get_by_category(self, category): - category_items = [] - for item in self.inventory: - if item.get_category() == category: - category_items.append(item) + items = [i for i in self.inventory if i.get_category() == category] + + return items + + # category_items = [] + + # for item in self.inventory: + # if item.get_category() == category: + # category_items.append(item) - return category_items + # return category_items def get_best_by_category(self, category): - category_items = self.get_by_category(category) - if not category_items: + items = self.get_by_category(category) + + if not items: return None - highest_value = 0 - item_to_return = None + max_value = max([i.condition for i in items]) + + item = next((i for i in items if i.condition == max_value), None) + + return item + + # highest_value = 0 + # item_to_return = None - for item in category_items: - if item.condition > highest_value: - highest_value = item.condition - item_to_return = item - return item_to_return + # for item in category_items: + # if item.condition > highest_value: + # highest_value = item.condition + # item_to_return = item + # return item_to_return def swap_best_by_category(self, other_vendor, my_priority, their_priority): @@ -75,11 +91,15 @@ def swap_first_item(self, other_vendor): if not self.inventory or not other_vendor.inventory: return False - swapped = self.swap_items(other_vendor, self.inventory[0], other_vendor.inventory[0]) + my_item = self.inventory[0] + their_item = other_vendor.inventory[0] + + swapped = self.swap_items(other_vendor, my_item, their_item) return swapped def swap_by_id(self, other_vendor, my_item_id, their_item_id): + my_item = self.get_by_id(my_item_id) their_item = other_vendor.get_by_id(their_item_id) @@ -91,35 +111,45 @@ def swap_by_id(self, other_vendor, my_item_id, their_item_id): return swapped def choose_and_swap_items(self, other_vendor, category = ''): + self.display_inventory(category) other_vendor.display_inventory(category) - my_item_id = input('Enter item from your inventory by id: ') - their_item_id = input('Enter item from their inventory by id: ') + my_item_id = int(input('Enter item from your inventory by id: ')) + their_item_id = int(input('Enter item from their inventory by id: ')) - swapped = self.swap_by_id(other_vendor, int(my_item_id), int(their_item_id)) + swapped = self.swap_by_id(other_vendor, my_item_id, their_item_id) return swapped def display_inventory(self, category = ''): - # Refactor + # Refactored if not self.inventory: print("No inventory to display.") return - if category: - items = self.get_by_category(category) - if items: - for i in range(len(items)): - print(f"{i + 1}. {str(items[i])}") - else: - print("No inventory to display.") - else: - for i in range(len(self.inventory)): - print(f"{i + 1}. {str(self.inventory[i])}") + items = self.get_by_category(category) if category else self.inventory - - \ No newline at end of file + if items: + for i, item in enumerate(items, 1): + print(f"{i}. {str(item)}") + else: + print("No inventory to display.") + + # if not self.inventory: + # print("No inventory to display.") + # return + + # if category: + # items = self.get_by_category(category) + # if items: + # for i in range(len(items)): + # print(f"{i + 1}. {str(items[i])}") + # else: + # print("No inventory to display.") + # else: + # for i in range(len(self.inventory)): + # print(f"{i + 1}. {str(self.inventory[i])}") \ No newline at end of file From a7f6cff727043d2d0ce0eaaf007c41839a0add10 Mon Sep 17 00:00:00 2001 From: kelly Date: Wed, 7 Dec 2022 11:54:26 -0500 Subject: [PATCH 12/21] Adds swap by category attribute functionality --- swap_meet/clothing.py | 3 +++ swap_meet/decor.py | 3 +++ swap_meet/electronics.py | 3 +++ swap_meet/vendor.py | 23 +++++++++++++++++++++++ 4 files changed, 32 insertions(+) diff --git a/swap_meet/clothing.py b/swap_meet/clothing.py index 5589fdd3a..23bb2b860 100644 --- a/swap_meet/clothing.py +++ b/swap_meet/clothing.py @@ -5,6 +5,9 @@ def __init__(self, fabric = "Unknown", id = None, condition = 0): super().__init__(id, condition) self.fabric = fabric + def get_attribute(self): + return self.fabric + def __str__(self): summary = super().__str__() class_summary = f"It is made from {self.fabric} fabric." diff --git a/swap_meet/decor.py b/swap_meet/decor.py index 5fe39abbd..b9f6596f1 100644 --- a/swap_meet/decor.py +++ b/swap_meet/decor.py @@ -6,6 +6,9 @@ def __init__(self, id = None, width = 0, length = 0, condition = 0): self.width = width self.length = length + def get_attribute(self): + return self.width * self.length + def __str__(self): summary = super().__str__() diff --git a/swap_meet/electronics.py b/swap_meet/electronics.py index 17608d688..cda20f10e 100644 --- a/swap_meet/electronics.py +++ b/swap_meet/electronics.py @@ -5,6 +5,9 @@ def __init__(self, id = None, type = "Unknown", condition = 0): super().__init__(id, condition) self.type = type + def get_attribute(self): + return self.type + def __str__(self): summary = super().__str__() diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index cab2692a7..b30c905f1 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -73,6 +73,29 @@ def swap_best_by_category(self, other_vendor, my_priority, their_priority): return True + # Optional get_by method + + def get_by_category_attribute(self, category, attribute): + + category_items = self.get_by_category(category) + + items = [item for item in category_items if attribute == item.get_attribute()] + + return items + + # Optional swap method + + def swap_by_attribute(self, other_vendor, category, attribute): + my_items = self.get_by_category_attribute(category, attribute) + their_items = other_vendor.get_by_category_attribute(category, attribute) + + my_item = my_items[0] + their_item = their_items[0] + + swapped = swapped = self.swap_items(other_vendor, my_item, their_item) + + return True + def swap_items(self, other_vendor, my_item, their_item): if my_item not in self.inventory or \ From 06a7593e7c2cce3f0b1a402e59ba8b15c8fe1ed0 Mon Sep 17 00:00:00 2001 From: kelly Date: Wed, 7 Dec 2022 21:39:58 -0500 Subject: [PATCH 13/21] Adds unit tests for attribute methods --- swap_meet/vendor.py | 25 ++-- tests/unit_tests/test_wave_07.py | 198 ++++++++++++++++++++++++++++++- 2 files changed, 215 insertions(+), 8 deletions(-) diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index b30c905f1..6cd0576d9 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -20,14 +20,16 @@ def get_by_id(self, id): # item = list(filter(lambda x: x.id == id, self.inventory))[0] # return item if item else None - item = next((i for i in self.inventory if i.id == id), None) + item = next((item for item in self.inventory if item.id == id), None) return item def get_by_category(self, category): - items = [i for i in self.inventory if i.get_category() == category] + inventory = self.inventory + items = [item for item in inventory if item.get_category() == category] + return items # category_items = [] @@ -46,9 +48,10 @@ def get_best_by_category(self, category): if not items: return None - max_value = max([i.condition for i in items]) + max_value = max([item.condition for item in items]) - item = next((i for i in items if i.condition == max_value), None) + item = \ + next((item for item in items if item.condition == max_value), None) return item @@ -79,15 +82,23 @@ def get_by_category_attribute(self, category, attribute): category_items = self.get_by_category(category) - items = [item for item in category_items if attribute == item.get_attribute()] + items = [item for item in category_items \ + if attribute == item.get_attribute()] return items # Optional swap method def swap_by_attribute(self, other_vendor, category, attribute): + # if not self.inventory or not other_vendor.inventory: + # return False + my_items = self.get_by_category_attribute(category, attribute) - their_items = other_vendor.get_by_category_attribute(category, attribute) + their_items = \ + other_vendor.get_by_category_attribute(category, attribute) + + if not their_items or not my_items: + return False my_item = my_items[0] their_item = their_items[0] @@ -97,7 +108,7 @@ def swap_by_attribute(self, other_vendor, category, attribute): return True def swap_items(self, other_vendor, my_item, their_item): - + if my_item not in self.inventory or \ their_item not in other_vendor.inventory: return False diff --git a/tests/unit_tests/test_wave_07.py b/tests/unit_tests/test_wave_07.py index 46d503bcb..84f2fad7e 100644 --- a/tests/unit_tests/test_wave_07.py +++ b/tests/unit_tests/test_wave_07.py @@ -440,4 +440,200 @@ def test_choose_and_swap_items_with_other_vendor_missing_item(monkeypatch): assert len(jesse.inventory) == 3 assert item_d in jesse.inventory assert item_e in jesse.inventory - assert item_f in jesse.inventory \ No newline at end of file + assert item_f in jesse.inventory + + +# ~~~~~ swap_by_attribute Tests ~~~~~ +def test_swap_by_attribute_success_returns_true(): + # Arrange + item_a = Decor(width=2, length=4) + item_b = Electronics(type='radio') + item_c = Decor(width=1, length=3) + jesse = Vendor( + inventory=[item_a, item_b, item_c] + ) + + item_d = Electronics(type='radio') + item_e = Decor(width=4, length=3) + item_f = Clothing(fabric='denim') + tai = Vendor( + inventory=[item_d, item_e, item_f] + ) + + # Act + result = jesse.swap_by_attribute( + other_vendor=tai, + category='Electronics', + attribute='radio' + ) + + # Assert + assert result == True + + assert len(jesse.inventory) == 3 + assert item_a in jesse.inventory + assert item_c in jesse.inventory + assert item_d in jesse.inventory + + assert len(tai.inventory) == 3 + assert item_b in tai.inventory + assert item_e in tai.inventory + assert item_f in tai.inventory + +def test_swap_by_attribute_with_caller_empty_inventory_returns_false(): + # Arrange + tai = Vendor(inventory=[]) + + item_d = Electronics(type='radio') + item_e = Decor(width=4, length=3) + item_f = Clothing(fabric='denim') + jesse = Vendor( + inventory=[item_d, item_e, item_f] + ) + + # Act + result = tai.swap_by_attribute( + other_vendor=jesse, + category='Electronics', + attribute='radio' + ) + + # Assert + assert result == False + assert len(tai.inventory) == 0 + + assert len(jesse.inventory) == 3 + assert item_d in jesse.inventory + assert item_e in jesse.inventory + assert item_f in jesse.inventory + +def test_swap_by_attribute_with_other_empty_inventory_returns_false(): + # Arrange + item_a = Decor(width=2, length=4) + item_b = Electronics(type='radio') + item_c = Decor(width=1, length=3) + jesse = Vendor( + inventory=[item_a, item_b, item_c] + ) + + tai = Vendor(inventory=[]) + + # Act + result = jesse.swap_by_attribute( + other_vendor=tai, + category='Electronics', + attribute='radio' + ) + + # Assert + assert result == False + + assert len(jesse.inventory) == 3 + assert item_a in jesse.inventory + assert item_b in jesse.inventory + assert item_c in jesse.inventory + + assert len(tai.inventory) == 0 + +def test_swap_by_attribute_fails_if_caller_missing_item(): + # Arrange + item_a = Decor(width=2, length=4) + item_b = Electronics(type='laptop') + item_c = Decor(width=1, length=3) + jesse = Vendor( + inventory=[item_a, item_b, item_c] + ) + + item_d = Electronics(type='radio') + item_e = Decor(width=4, length=3) + item_f = Clothing(fabric='denim') + tai = Vendor( + inventory=[item_d, item_e, item_f] + ) + + # Act + result = jesse.swap_by_attribute( + other_vendor=tai, + category='Electronics', + attribute='radio' + ) + + # Assert + assert result == False + + assert len(jesse.inventory) == 3 + assert item_a in jesse.inventory + assert item_b in jesse.inventory + assert item_c in jesse.inventory + + assert len(tai.inventory) == 3 + assert item_d in tai.inventory + assert item_e in tai.inventory + assert item_f in tai.inventory + +def test_swap_by_attribute_fails_if_other_missing_item(): + # Arrange + item_a = Decor(width=2, length=4) + item_b = Electronics(type='laptop') + item_c = Decor(width=1, length=3) + jesse = Vendor( + inventory=[item_a, item_b, item_c] + ) + + item_d = Electronics(type='radio') + item_e = Decor(width=4, length=3) + item_f = Clothing(fabric='denim') + tai = Vendor( + inventory=[item_d, item_e, item_f] + ) + + # Act + result = jesse.swap_by_attribute( + other_vendor=tai, + category='Electronics', + attribute='laptop' + ) + + # Assert + assert result == False + + assert len(jesse.inventory) == 3 + assert item_a in jesse.inventory + assert item_b in jesse.inventory + assert item_c in jesse.inventory + + assert len(tai.inventory) == 3 + assert item_d in tai.inventory + assert item_e in tai.inventory + assert item_f in tai.inventory + +# ~~~~~ get_by_category_attribute Tests ~~~~~ + +def test_get_items_by_category_attribute(): + item_a = Clothing(fabric="silk") + item_b = Electronics(type="radio") + item_c = Clothing(fabric="silk") + item_d = Decor(width=1, length=2) + item_e = Item(condition=0) + vendor = Vendor( + inventory=[item_a, item_b, item_c, item_d, item_e] + ) + + items = vendor.get_by_category_attribute("Clothing", "silk") + + assert len(items) == 2 + assert item_a in items + assert item_c in items + +def test_get_no_matching_items_by_category_attribute(): + item_a = Decor(width=2, length=4) + item_b = Electronics(type="laptop") + item_c = Decor(width=1, length=3) + vendor = Vendor( + inventory=[item_a, item_b, item_c] + ) + + items = vendor.get_by_category_attribute("Electronics", "radio") + + assert items == [] + assert len(items) == 0 \ No newline at end of file From 62405d6e6ca662a0bd3b3c8a0e0759cf9915b355 Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 8 Dec 2022 07:47:40 -0500 Subject: [PATCH 14/21] Cleans up Vendor class methods --- swap_meet/vendor.py | 64 +++++++-------------------------------------- 1 file changed, 9 insertions(+), 55 deletions(-) diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index 6cd0576d9..7fb5ecc63 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -14,12 +14,6 @@ def remove(self, item): def get_by_id(self, id): - # for item in self.inventory: - # if item.id == id: - # return item - # item = list(filter(lambda x: x.id == id, self.inventory))[0] - # return item if item else None - item = next((item for item in self.inventory if item.id == id), None) return item @@ -32,15 +26,6 @@ def get_by_category(self, category): return items - # category_items = [] - - # for item in self.inventory: - # if item.get_category() == category: - # category_items.append(item) - - # return category_items - - def get_best_by_category(self, category): items = self.get_by_category(category) @@ -50,20 +35,11 @@ def get_best_by_category(self, category): max_value = max([item.condition for item in items]) - item = \ - next((item for item in items if item.condition == max_value), None) + item = next( + (item for item in items if item.condition == max_value), None) return item - # highest_value = 0 - # item_to_return = None - - # for item in category_items: - # if item.condition > highest_value: - # highest_value = item.condition - # item_to_return = item - # return item_to_return - def swap_best_by_category(self, other_vendor, my_priority, their_priority): my_item = self.get_best_by_category(their_priority) @@ -76,26 +52,20 @@ def swap_best_by_category(self, other_vendor, my_priority, their_priority): return True - # Optional get_by method - def get_by_category_attribute(self, category, attribute): category_items = self.get_by_category(category) - items = [item for item in category_items \ + items = [item for item in category_items if attribute == item.get_attribute()] return items - # Optional swap method - def swap_by_attribute(self, other_vendor, category, attribute): - # if not self.inventory or not other_vendor.inventory: - # return False my_items = self.get_by_category_attribute(category, attribute) - their_items = \ - other_vendor.get_by_category_attribute(category, attribute) + their_items = other_vendor.get_by_category_attribute( + category, attribute) if not their_items or not my_items: return False @@ -109,8 +79,9 @@ def swap_by_attribute(self, other_vendor, category, attribute): def swap_items(self, other_vendor, my_item, their_item): - if my_item not in self.inventory or \ - their_item not in other_vendor.inventory: + inventory = self.inventory + + if my_item not in inventory or their_item not in other_vendor.inventory: return False self.inventory.remove(my_item) @@ -159,8 +130,6 @@ def choose_and_swap_items(self, other_vendor, category = ''): def display_inventory(self, category = ''): - # Refactored - if not self.inventory: print("No inventory to display.") return @@ -171,19 +140,4 @@ def display_inventory(self, category = ''): for i, item in enumerate(items, 1): print(f"{i}. {str(item)}") else: - print("No inventory to display.") - - # if not self.inventory: - # print("No inventory to display.") - # return - - # if category: - # items = self.get_by_category(category) - # if items: - # for i in range(len(items)): - # print(f"{i + 1}. {str(items[i])}") - # else: - # print("No inventory to display.") - # else: - # for i in range(len(self.inventory)): - # print(f"{i + 1}. {str(self.inventory[i])}") \ No newline at end of file + print("No inventory to display.") \ No newline at end of file From 0ba12e122acfaba293a72a0c45dbb2e22fd86531 Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 8 Dec 2022 15:53:51 -0500 Subject: [PATCH 15/21] Adjusts attribute test for code coverage. --- swap_meet/clothing.py | 1 - swap_meet/decor.py | 1 - swap_meet/electronics.py | 1 - swap_meet/item.py | 1 - swap_meet/vendor.py | 41 +++++++------------------------- tests/unit_tests/test_wave_07.py | 14 +++++------ 6 files changed, 16 insertions(+), 43 deletions(-) diff --git a/swap_meet/clothing.py b/swap_meet/clothing.py index 23bb2b860..db073be4d 100644 --- a/swap_meet/clothing.py +++ b/swap_meet/clothing.py @@ -11,5 +11,4 @@ def get_attribute(self): def __str__(self): summary = super().__str__() class_summary = f"It is made from {self.fabric} fabric." - return ". ".join((summary, class_summary)) \ No newline at end of file diff --git a/swap_meet/decor.py b/swap_meet/decor.py index b9f6596f1..5b7332bfe 100644 --- a/swap_meet/decor.py +++ b/swap_meet/decor.py @@ -13,5 +13,4 @@ def __str__(self): summary = super().__str__() class_summary = f"It takes up a {self.width} by {self.length} sized space." - return ". ".join((summary, class_summary)) \ No newline at end of file diff --git a/swap_meet/electronics.py b/swap_meet/electronics.py index cda20f10e..21d98723e 100644 --- a/swap_meet/electronics.py +++ b/swap_meet/electronics.py @@ -12,5 +12,4 @@ def __str__(self): summary = super().__str__() class_summary = f"This is a {self.type} device." - return ". ".join((summary, class_summary)) diff --git a/swap_meet/item.py b/swap_meet/item.py index 6c55684a0..92b023fa3 100644 --- a/swap_meet/item.py +++ b/swap_meet/item.py @@ -9,7 +9,6 @@ def __init__(self, id = None, condition = 0): def get_category(self): return type(self).__name__ - def condition_description(self): switch = { 0 : "gross", diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index 7fb5ecc63..beb73ba1f 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -13,56 +13,44 @@ def remove(self, item): return None def get_by_id(self, id): - item = next((item for item in self.inventory if item.id == id), None) - return item def get_by_category(self, category): - inventory = self.inventory - items = [item for item in inventory if item.get_category() == category] - return items def get_best_by_category(self, category): - items = self.get_by_category(category) if not items: return None max_value = max([item.condition for item in items]) - + item = next( (item for item in items if item.condition == max_value), None) - return item def swap_best_by_category(self, other_vendor, my_priority, their_priority): - my_item = self.get_best_by_category(their_priority) their_item = other_vendor.get_best_by_category(my_priority) - + if not their_item or not my_item: return False - + self.swap_items(other_vendor, my_item, their_item) - return True def get_by_category_attribute(self, category, attribute): - category_items = self.get_by_category(category) - - items = [item for item in category_items - if attribute == item.get_attribute()] - + items = [item for item in category_items + if attribute == item.get_attribute()] + return items def swap_by_attribute(self, other_vendor, category, attribute): - my_items = self.get_by_category_attribute(category, attribute) their_items = other_vendor.get_by_category_attribute( category, attribute) @@ -72,18 +60,14 @@ def swap_by_attribute(self, other_vendor, category, attribute): my_item = my_items[0] their_item = their_items[0] - - swapped = swapped = self.swap_items(other_vendor, my_item, their_item) - - return True + swapped = self.swap_items(other_vendor, my_item, their_item) + return swapped def swap_items(self, other_vendor, my_item, their_item): - inventory = self.inventory - if my_item not in inventory or their_item not in other_vendor.inventory: return False - + self.inventory.remove(my_item) other_vendor.inventory.append(my_item) @@ -98,9 +82,7 @@ def swap_first_item(self, other_vendor): my_item = self.inventory[0] their_item = other_vendor.inventory[0] - swapped = self.swap_items(other_vendor, my_item, their_item) - return swapped def swap_by_id(self, other_vendor, my_item_id, their_item_id): @@ -112,7 +94,6 @@ def swap_by_id(self, other_vendor, my_item_id, their_item_id): return False swapped = self.swap_items(other_vendor, my_item, their_item) - return swapped def choose_and_swap_items(self, other_vendor, category = ''): @@ -122,12 +103,9 @@ def choose_and_swap_items(self, other_vendor, category = ''): my_item_id = int(input('Enter item from your inventory by id: ')) their_item_id = int(input('Enter item from their inventory by id: ')) - swapped = self.swap_by_id(other_vendor, my_item_id, their_item_id) - return swapped - def display_inventory(self, category = ''): if not self.inventory: @@ -135,7 +113,6 @@ def display_inventory(self, category = ''): return items = self.get_by_category(category) if category else self.inventory - if items: for i, item in enumerate(items, 1): print(f"{i}. {str(item)}") diff --git a/tests/unit_tests/test_wave_07.py b/tests/unit_tests/test_wave_07.py index 84f2fad7e..d1027bdb4 100644 --- a/tests/unit_tests/test_wave_07.py +++ b/tests/unit_tests/test_wave_07.py @@ -454,7 +454,7 @@ def test_swap_by_attribute_success_returns_true(): ) item_d = Electronics(type='radio') - item_e = Decor(width=4, length=3) + item_e = Decor(width=4, length=2) item_f = Clothing(fabric='denim') tai = Vendor( inventory=[item_d, item_e, item_f] @@ -463,21 +463,21 @@ def test_swap_by_attribute_success_returns_true(): # Act result = jesse.swap_by_attribute( other_vendor=tai, - category='Electronics', - attribute='radio' + category='Decor', + attribute=8 ) # Assert assert result == True assert len(jesse.inventory) == 3 - assert item_a in jesse.inventory + assert item_e in jesse.inventory + assert item_b in jesse.inventory assert item_c in jesse.inventory - assert item_d in jesse.inventory assert len(tai.inventory) == 3 - assert item_b in tai.inventory - assert item_e in tai.inventory + assert item_d in tai.inventory + assert item_a in tai.inventory assert item_f in tai.inventory def test_swap_by_attribute_with_caller_empty_inventory_returns_false(): From 5aa6d0b77a783f303c7ef2cb79b02035d0078f2d Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 8 Dec 2022 16:26:47 -0500 Subject: [PATCH 16/21] Adds id type validation --- swap_meet/item.py | 9 ++++++- swap_meet/vendor.py | 9 ++++--- tests/unit_tests/test_wave_02.py | 5 ++++ tests/unit_tests/test_wave_07.py | 42 ++++++++++++++++---------------- 4 files changed, 39 insertions(+), 26 deletions(-) diff --git a/swap_meet/item.py b/swap_meet/item.py index 92b023fa3..5daa76dab 100644 --- a/swap_meet/item.py +++ b/swap_meet/item.py @@ -3,7 +3,14 @@ class Item: def __init__(self, id = None, condition = 0): - self.id = id if id is not None else uuid.uuid1().int + if id is not None: + if type(id) is not int: + raise ValueError("invalid id") + else: + self.id = id + else: + self.id = uuid.uuid1().int + # self.id = id if id is not None and type(id) is int else uuid.uuid1().int self.condition = condition def get_category(self): diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index beb73ba1f..1b54c7009 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -31,6 +31,7 @@ def get_best_by_category(self, category): item = next( (item for item in items if item.condition == max_value), None) + return item def swap_best_by_category(self, other_vendor, my_priority, their_priority): @@ -96,17 +97,17 @@ def swap_by_id(self, other_vendor, my_item_id, their_item_id): swapped = self.swap_items(other_vendor, my_item, their_item) return swapped - def choose_and_swap_items(self, other_vendor, category = ''): + def choose_and_swap_items(self, other_vendor, category = ""): self.display_inventory(category) other_vendor.display_inventory(category) - my_item_id = int(input('Enter item from your inventory by id: ')) - their_item_id = int(input('Enter item from their inventory by id: ')) + my_item_id = int(input("Enter item from your inventory by id: ")) + their_item_id = int(input("Enter item from their inventory by id: ")) swapped = self.swap_by_id(other_vendor, my_item_id, their_item_id) return swapped - def display_inventory(self, category = ''): + def display_inventory(self, category = ""): if not self.inventory: print("No inventory to display.") diff --git a/tests/unit_tests/test_wave_02.py b/tests/unit_tests/test_wave_02.py index cf8253198..22d02624f 100644 --- a/tests/unit_tests/test_wave_02.py +++ b/tests/unit_tests/test_wave_02.py @@ -20,6 +20,11 @@ def test_items_use_custom_id_if_passed(): assert isinstance(item.id, int) assert item.id == 12345 +# @pytest.mark.skip +def test_items_use_string_as_custom_id_raises_value_error(): + with pytest.raises(ValueError): + item = Item(id="142") + # @pytest.mark.skip def test_item_obj_returns_text_item_for_category(): item = Item() diff --git a/tests/unit_tests/test_wave_07.py b/tests/unit_tests/test_wave_07.py index d1027bdb4..49fadff9e 100644 --- a/tests/unit_tests/test_wave_07.py +++ b/tests/unit_tests/test_wave_07.py @@ -447,15 +447,15 @@ def test_choose_and_swap_items_with_other_vendor_missing_item(monkeypatch): def test_swap_by_attribute_success_returns_true(): # Arrange item_a = Decor(width=2, length=4) - item_b = Electronics(type='radio') + item_b = Electronics(type="radio") item_c = Decor(width=1, length=3) jesse = Vendor( inventory=[item_a, item_b, item_c] ) - item_d = Electronics(type='radio') + item_d = Electronics(type="radio") item_e = Decor(width=4, length=2) - item_f = Clothing(fabric='denim') + item_f = Clothing(fabric="denim") tai = Vendor( inventory=[item_d, item_e, item_f] ) @@ -463,7 +463,7 @@ def test_swap_by_attribute_success_returns_true(): # Act result = jesse.swap_by_attribute( other_vendor=tai, - category='Decor', + category="Decor", attribute=8 ) @@ -484,9 +484,9 @@ def test_swap_by_attribute_with_caller_empty_inventory_returns_false(): # Arrange tai = Vendor(inventory=[]) - item_d = Electronics(type='radio') + item_d = Electronics(type="radio") item_e = Decor(width=4, length=3) - item_f = Clothing(fabric='denim') + item_f = Clothing(fabric="denim") jesse = Vendor( inventory=[item_d, item_e, item_f] ) @@ -494,8 +494,8 @@ def test_swap_by_attribute_with_caller_empty_inventory_returns_false(): # Act result = tai.swap_by_attribute( other_vendor=jesse, - category='Electronics', - attribute='radio' + category="Electronics", + attribute="radio" ) # Assert @@ -510,7 +510,7 @@ def test_swap_by_attribute_with_caller_empty_inventory_returns_false(): def test_swap_by_attribute_with_other_empty_inventory_returns_false(): # Arrange item_a = Decor(width=2, length=4) - item_b = Electronics(type='radio') + item_b = Electronics(type="radio") item_c = Decor(width=1, length=3) jesse = Vendor( inventory=[item_a, item_b, item_c] @@ -521,8 +521,8 @@ def test_swap_by_attribute_with_other_empty_inventory_returns_false(): # Act result = jesse.swap_by_attribute( other_vendor=tai, - category='Electronics', - attribute='radio' + category="Electronics", + attribute="radio" ) # Assert @@ -538,15 +538,15 @@ def test_swap_by_attribute_with_other_empty_inventory_returns_false(): def test_swap_by_attribute_fails_if_caller_missing_item(): # Arrange item_a = Decor(width=2, length=4) - item_b = Electronics(type='laptop') + item_b = Electronics(type="laptop") item_c = Decor(width=1, length=3) jesse = Vendor( inventory=[item_a, item_b, item_c] ) - item_d = Electronics(type='radio') + item_d = Electronics(type="radio") item_e = Decor(width=4, length=3) - item_f = Clothing(fabric='denim') + item_f = Clothing(fabric="denim") tai = Vendor( inventory=[item_d, item_e, item_f] ) @@ -554,8 +554,8 @@ def test_swap_by_attribute_fails_if_caller_missing_item(): # Act result = jesse.swap_by_attribute( other_vendor=tai, - category='Electronics', - attribute='radio' + category="Electronics", + attribute="radio" ) # Assert @@ -574,15 +574,15 @@ def test_swap_by_attribute_fails_if_caller_missing_item(): def test_swap_by_attribute_fails_if_other_missing_item(): # Arrange item_a = Decor(width=2, length=4) - item_b = Electronics(type='laptop') + item_b = Electronics(type="laptop") item_c = Decor(width=1, length=3) jesse = Vendor( inventory=[item_a, item_b, item_c] ) - item_d = Electronics(type='radio') + item_d = Electronics(type="radio") item_e = Decor(width=4, length=3) - item_f = Clothing(fabric='denim') + item_f = Clothing(fabric="denim") tai = Vendor( inventory=[item_d, item_e, item_f] ) @@ -590,8 +590,8 @@ def test_swap_by_attribute_fails_if_other_missing_item(): # Act result = jesse.swap_by_attribute( other_vendor=tai, - category='Electronics', - attribute='laptop' + category="Electronics", + attribute="laptop" ) # Assert From f9f3cc925dd4dd65e6fdb66d9e9e6336fcea2e53 Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 8 Dec 2022 17:21:50 -0500 Subject: [PATCH 17/21] Minor changes to improve consistency in vendor --- swap_meet/vendor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index 1b54c7009..5a5af20d9 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -41,8 +41,8 @@ def swap_best_by_category(self, other_vendor, my_priority, their_priority): if not their_item or not my_item: return False - self.swap_items(other_vendor, my_item, their_item) - return True + swapped = self.swap_items(other_vendor, my_item, their_item) + return swapped def get_by_category_attribute(self, category, attribute): category_items = self.get_by_category(category) From 09c1229da7db18659819a33265d992091c9e1db4 Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 8 Dec 2022 17:27:10 -0500 Subject: [PATCH 18/21] Code cleanup --- swap_meet/decor.py | 3 ++- swap_meet/item.py | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/swap_meet/decor.py b/swap_meet/decor.py index 5b7332bfe..8f7aacc5f 100644 --- a/swap_meet/decor.py +++ b/swap_meet/decor.py @@ -7,7 +7,8 @@ def __init__(self, id = None, width = 0, length = 0, condition = 0): self.length = length def get_attribute(self): - return self.width * self.length + item_size = self.width * self.length + return item_size def __str__(self): diff --git a/swap_meet/item.py b/swap_meet/item.py index 5daa76dab..0d9674127 100644 --- a/swap_meet/item.py +++ b/swap_meet/item.py @@ -5,12 +5,11 @@ class Item: def __init__(self, id = None, condition = 0): if id is not None: if type(id) is not int: - raise ValueError("invalid id") + raise ValueError("invalid id input") else: self.id = id else: self.id = uuid.uuid1().int - # self.id = id if id is not None and type(id) is int else uuid.uuid1().int self.condition = condition def get_category(self): From 8149e52efbb5217672a27d30989fefeefff2cb65 Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 8 Dec 2022 18:13:44 -0500 Subject: [PATCH 19/21] Adds docstrings --- swap_meet/clothing.py | 4 ++++ swap_meet/decor.py | 5 ++++- swap_meet/electronics.py | 5 ++++- swap_meet/item.py | 1 + swap_meet/vendor.py | 40 +++++++++++++++++++++++++++++++++++++++- 5 files changed, 52 insertions(+), 3 deletions(-) diff --git a/swap_meet/clothing.py b/swap_meet/clothing.py index db073be4d..9b124ebd4 100644 --- a/swap_meet/clothing.py +++ b/swap_meet/clothing.py @@ -1,6 +1,10 @@ from swap_meet.item import Item class Clothing(Item): + """Clothing class inherits id and condition from Item class and adds the + fabric attribute. + """ + def __init__(self, fabric = "Unknown", id = None, condition = 0): super().__init__(id, condition) self.fabric = fabric diff --git a/swap_meet/decor.py b/swap_meet/decor.py index 8f7aacc5f..47c7f7ce1 100644 --- a/swap_meet/decor.py +++ b/swap_meet/decor.py @@ -1,6 +1,10 @@ from swap_meet.item import Item class Decor(Item): + """Decor class inherits id and condition from Item class and adds the + width and length attributes. + """ + def __init__(self, id = None, width = 0, length = 0, condition = 0): super().__init__(id, condition) self.width = width @@ -11,7 +15,6 @@ def get_attribute(self): return item_size def __str__(self): - summary = super().__str__() class_summary = f"It takes up a {self.width} by {self.length} sized space." return ". ".join((summary, class_summary)) \ No newline at end of file diff --git a/swap_meet/electronics.py b/swap_meet/electronics.py index 21d98723e..61bcced7c 100644 --- a/swap_meet/electronics.py +++ b/swap_meet/electronics.py @@ -1,6 +1,10 @@ from swap_meet.item import Item class Electronics(Item): + """Electronics class inherits id and condition from Item class and adds the + type attribute. + """ + def __init__(self, id = None, type = "Unknown", condition = 0): super().__init__(id, condition) self.type = type @@ -9,7 +13,6 @@ def get_attribute(self): return self.type def __str__(self): - summary = super().__str__() class_summary = f"This is a {self.type} device." return ". ".join((summary, class_summary)) diff --git a/swap_meet/item.py b/swap_meet/item.py index 0d9674127..050d46b64 100644 --- a/swap_meet/item.py +++ b/swap_meet/item.py @@ -1,6 +1,7 @@ import uuid class Item: + """Item class has a unique id and a condition.""" def __init__(self, id = None, condition = 0): if id is not None: diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index 5a5af20d9..cde8d6a7c 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -1,27 +1,46 @@ class Vendor: + """Vendor class contains an inventory list of Item objects and methods to + add, remove, retrieve, and swap items with other vendor instances. + """ + def __init__(self, inventory = None): + """Creates Vendor instance""" self.inventory = inventory if inventory is not None else [] def add(self, item): + """Adds items to inventory. Returns item.""" + self.inventory.append(item) return item def remove(self, item): + """Removes item from inventory. Returns removed item or None if item + not found. + """ + if item in self.inventory: self.inventory.remove(item) return item return None def get_by_id(self, id): + """Gets item by item id from list of inventory. Returns Item object.""" + item = next((item for item in self.inventory if item.id == id), None) return item def get_by_category(self, category): + """Gets items in inventory that match category. Returns a list.""" + inventory = self.inventory items = [item for item in inventory if item.get_category() == category] return items def get_best_by_category(self, category): + """Gets item with the best condition in category from inventory. Returns + Item object. + """ + items = self.get_by_category(category) if not items: @@ -35,6 +54,8 @@ def get_best_by_category(self, category): return item def swap_best_by_category(self, other_vendor, my_priority, their_priority): + """Swaps best items in category from two vendors. Returns boolean.""" + my_item = self.get_best_by_category(their_priority) their_item = other_vendor.get_best_by_category(my_priority) @@ -45,6 +66,10 @@ def swap_best_by_category(self, other_vendor, my_priority, their_priority): return swapped def get_by_category_attribute(self, category, attribute): + """Gets items from inventory that match category and item attribute. + Returns a list. + """ + category_items = self.get_by_category(category) items = [item for item in category_items if attribute == item.get_attribute()] @@ -52,6 +77,10 @@ def get_by_category_attribute(self, category, attribute): return items def swap_by_attribute(self, other_vendor, category, attribute): + """Swaps items that match category and item attribute from 2 vendors. + Returns boolean. + """ + my_items = self.get_by_category_attribute(category, attribute) their_items = other_vendor.get_by_category_attribute( category, attribute) @@ -65,6 +94,8 @@ def swap_by_attribute(self, other_vendor, category, attribute): return swapped def swap_items(self, other_vendor, my_item, their_item): + """Swaps items from 2 vendors. Returns boolean.""" + inventory = self.inventory if my_item not in inventory or their_item not in other_vendor.inventory: return False @@ -78,6 +109,8 @@ def swap_items(self, other_vendor, my_item, their_item): return True def swap_first_item(self, other_vendor): + """Swaps first item in inventory from 2 vendors. Returns boolean.""" + if not self.inventory or not other_vendor.inventory: return False @@ -87,7 +120,8 @@ def swap_first_item(self, other_vendor): return swapped def swap_by_id(self, other_vendor, my_item_id, their_item_id): - + """Swaps items by id from 2 vendors. Returns boolean.""" + my_item = self.get_by_id(my_item_id) their_item = other_vendor.get_by_id(their_item_id) @@ -98,6 +132,9 @@ def swap_by_id(self, other_vendor, my_item_id, their_item_id): return swapped def choose_and_swap_items(self, other_vendor, category = ""): + """Displays inventory from 2 vendors and allows user to select items to + swap by id. Returns boolean. + """ self.display_inventory(category) other_vendor.display_inventory(category) @@ -108,6 +145,7 @@ def choose_and_swap_items(self, other_vendor, category = ""): return swapped def display_inventory(self, category = ""): + """Displays inventory.""" if not self.inventory: print("No inventory to display.") From f86ca515c49329a973b8dd609ca36242786b5b34 Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 8 Dec 2022 18:22:42 -0500 Subject: [PATCH 20/21] Code cleanup --- swap_meet/vendor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index cde8d6a7c..76a4d4bf6 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -5,11 +5,12 @@ class Vendor: def __init__(self, inventory = None): """Creates Vendor instance""" + self.inventory = inventory if inventory is not None else [] def add(self, item): """Adds items to inventory. Returns item.""" - + self.inventory.append(item) return item From 3a0f2c0866bc8cc9d74ed04b2dd1f768dc7337a6 Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 8 Dec 2022 18:24:59 -0500 Subject: [PATCH 21/21] Added to method descriptions. --- swap_meet/vendor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index 76a4d4bf6..170b94529 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -146,7 +146,7 @@ def choose_and_swap_items(self, other_vendor, category = ""): return swapped def display_inventory(self, category = ""): - """Displays inventory.""" + """Displays Vendor inventory with item descriptions.""" if not self.inventory: print("No inventory to display.")