From ec737af530672e49757ad4194f71d7104f50824d Mon Sep 17 00:00:00 2001 From: Ivana Maldonado Date: Fri, 8 Apr 2022 03:44:09 -0400 Subject: [PATCH 1/3] Finished project. --- main.py | 13 ++++++ swap_meet/clothing.py | 13 +++++- swap_meet/decor.py | 11 ++++- swap_meet/electronics.py | 15 ++++++- swap_meet/item.py | 19 +++++++- swap_meet/vendor.py | 75 +++++++++++++++++++++++++++++++- tests/unit_tests/test_wave_01.py | 22 +++++++--- tests/unit_tests/test_wave_02.py | 20 +++++++-- tests/unit_tests/test_wave_03.py | 18 +++++--- tests/unit_tests/test_wave_04.py | 9 ++-- tests/unit_tests/test_wave_05.py | 15 ++++--- tests/unit_tests/test_wave_06.py | 72 ++++++++++++++++++++++++------ 12 files changed, 257 insertions(+), 45 deletions(-) create mode 100644 main.py diff --git a/main.py b/main.py new file mode 100644 index 000000000..0d49fda7d --- /dev/null +++ b/main.py @@ -0,0 +1,13 @@ +from re import I +from swap_meet.vendor import Vendor +from swap_meet.item import Item + +# Istances of Vendor: +vendor = Vendor() +vendor_1 = Vendor(inventory=["item_1","item_2","item_3"]) + +# Instance of Item: +item_1 = Item(category='decor') +item_2 = Item(category='clothing', condition=3) + + diff --git a/swap_meet/clothing.py b/swap_meet/clothing.py index b8afdeb1e..b5febebf9 100644 --- a/swap_meet/clothing.py +++ b/swap_meet/clothing.py @@ -1,2 +1,11 @@ -class Clothing: - pass \ No newline at end of file +from swap_meet.item import Item + +class Clothing(Item): + def __init__(self, condition=0): + super().__init__(category="Clothing", condition=condition) + + + def __str__(self): + return "The finest clothing you could wear." + + \ No newline at end of file diff --git a/swap_meet/decor.py b/swap_meet/decor.py index eab7a9dbe..7a788abc4 100644 --- a/swap_meet/decor.py +++ b/swap_meet/decor.py @@ -1,2 +1,9 @@ -class Decor: - pass \ No newline at end of file +from swap_meet.item import Item + +class Decor(Item): + def __init__(self, condition=0): + super().__init__(category="Decor", condition=condition) + + + def __str__(self): + return "Something to decorate your space." \ No newline at end of file diff --git a/swap_meet/electronics.py b/swap_meet/electronics.py index 2f9dff68a..3a7c9f271 100644 --- a/swap_meet/electronics.py +++ b/swap_meet/electronics.py @@ -1,2 +1,13 @@ -class Electronics: - pass +from pytest import Item + + +from swap_meet.item import Item + +class Electronics(Item): + def __init__(self, condition=0): + super().__init__(category="Electronics", condition=condition) + + + def __str__(self): + return "A gadget full of buttons and secrets." + diff --git a/swap_meet/item.py b/swap_meet/item.py index 560d759c2..54ee20bfa 100644 --- a/swap_meet/item.py +++ b/swap_meet/item.py @@ -1,2 +1,19 @@ class Item: - pass \ No newline at end of file + def __init__(self, category="", condition=0): + self.category = category + self.condition = condition + + + def __str__(self): + return "Hello World!" + + + def condition_description(self): + descriptions = ["Destroyed", + "Barely there", + "Heavily used", + "Good", + "Mint", + "New"] + + return descriptions[self.condition] diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index 87302c056..3cc9ad1cc 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -1,2 +1,75 @@ class Vendor: - pass \ No newline at end of file + def __init__(self, inventory=[]): + self.inventory = inventory + + + 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 False + + + def get_by_category(self, category): + items_by_category = [] + + for item in self.inventory: + if item.category == category: + items_by_category.append(item) + return items_by_category + + + def swap_items(self, friend, my_item, their_item): + if my_item not in self.inventory or their_item not in friend.inventory: + return False + + self.remove(my_item) + friend.add(my_item) + + friend.remove(their_item) + self.add(their_item) + + return True + + + def swap_first_item(self, friend): + if not self.inventory or not friend.inventory: + return False + + self.swap_items(friend, self.inventory[0], friend.inventory[0]) + return True + + + def get_best_by_category(self, category): + if not self.inventory: + return None + + category_items = self.get_by_category(category) + + if not category_items: + return None + + best_item = category_items[0] + + for item in category_items: + if item.condition > best_item.condition: + best_item = item + + return best_item + + + def swap_best_by_category(self, other, my_priority, their_priority): + my_best_item = self.get_best_by_category(their_priority) + their_best_item = other.get_best_by_category(my_priority) + + if their_best_item == None or my_best_item == None: + return False + else: + self.swap_items(other, my_best_item, their_best_item) + return True diff --git a/tests/unit_tests/test_wave_01.py b/tests/unit_tests/test_wave_01.py index 58478ccf9..b30e3bc4f 100644 --- a/tests/unit_tests/test_wave_01.py +++ b/tests/unit_tests/test_wave_01.py @@ -2,12 +2,14 @@ import pytest from swap_meet.vendor import Vendor -@pytest.mark.skip +# 1 +# @pytest.mark.skip def test_vendor_has_inventory(): vendor = Vendor() assert len(vendor.inventory) == 0 -@pytest.mark.skip +#2 +# @pytest.mark.skip def test_vendor_takes_optional_inventory(): inventory = ["a", "b", "c"] vendor = Vendor(inventory=inventory) @@ -16,7 +18,9 @@ def test_vendor_takes_optional_inventory(): assert "b" in vendor.inventory assert "c" in vendor.inventory -@pytest.mark.skip + +#3 +# @pytest.mark.skip def test_adding_to_inventory(): vendor = Vendor() item = "new item" @@ -27,7 +31,8 @@ def test_adding_to_inventory(): assert item in vendor.inventory assert result == item -@pytest.mark.skip +#4 +# @pytest.mark.skip def test_removing_from_inventory_returns_item(): item = "item to remove" vendor = Vendor( @@ -40,7 +45,8 @@ def test_removing_from_inventory_returns_item(): assert item not in vendor.inventory assert result == item -@pytest.mark.skip +# 5 +# @pytest.mark.skip def test_removing_not_found_is_false(): item = "item to remove" vendor = Vendor( @@ -49,7 +55,11 @@ def test_removing_not_found_is_false(): result = vendor.remove(item) - raise Exception("Complete this test according to comments below.") + assert len(vendor.inventory) == 3 + assert item not in vendor.inventory + assert result == False + + # raise Exception("Complete this test according to comments below.") # ********************************************************************* # ****** Complete Assert Portion of this test ********** # ********************************************************************* diff --git a/tests/unit_tests/test_wave_02.py b/tests/unit_tests/test_wave_02.py index 3d7060d7c..f293b0ea8 100644 --- a/tests/unit_tests/test_wave_02.py +++ b/tests/unit_tests/test_wave_02.py @@ -2,12 +2,15 @@ from swap_meet.vendor import Vendor from swap_meet.item import Item -@pytest.mark.skip + +# 1 +# @pytest.mark.skip def test_items_have_blank_default_category(): item = Item() assert item.category == "" -@pytest.mark.skip +# 2 +# @pytest.mark.skip def test_get_items_by_category(): item_a = Item(category="clothing") item_b = Item(category="electronics") @@ -23,7 +26,8 @@ def test_get_items_by_category(): assert item_c in items assert item_b not in items -@pytest.mark.skip +# 3 +# @pytest.mark.skip def test_get_no_matching_items_by_category(): item_a = Item(category="clothing") item_b = Item(category="clothing") @@ -34,7 +38,15 @@ def test_get_no_matching_items_by_category(): items = vendor.get_by_category("electronics") - raise Exception("Complete this test according to comments below.") + assert len(items) == 0 + assert item_a not in items + assert item_b not in items + assert item_c not in items + + + + + # raise Exception("Complete this test according to comments below.") # ********************************************************************* # ****** Complete Assert Portion of this test ********** # ********************************************************************* diff --git a/tests/unit_tests/test_wave_03.py b/tests/unit_tests/test_wave_03.py index 0300b638f..886dc137a 100644 --- a/tests/unit_tests/test_wave_03.py +++ b/tests/unit_tests/test_wave_03.py @@ -2,7 +2,8 @@ from swap_meet.vendor import Vendor from swap_meet.item import Item -@pytest.mark.skip +# 1 +# @pytest.mark.skip def test_item_overrides_to_string(): item = Item() @@ -10,7 +11,8 @@ def test_item_overrides_to_string(): assert stringified_item == "Hello World!" -@pytest.mark.skip +# 2 +# @pytest.mark.skip def test_swap_items_returns_true(): item_a = Item(category="clothing") item_b = Item(category="clothing") @@ -38,7 +40,8 @@ def test_swap_items_returns_true(): assert item_b in jolie.inventory assert result -@pytest.mark.skip +# 3 +# @pytest.mark.skip def test_swap_items_when_my_item_is_missing_returns_false(): item_a = Item(category="clothing") item_b = Item(category="clothing") @@ -65,7 +68,8 @@ def test_swap_items_when_my_item_is_missing_returns_false(): assert item_e in jolie.inventory assert not result -@pytest.mark.skip +# 4 +# @pytest.mark.skip def test_swap_items_when_their_item_is_missing_returns_false(): item_a = Item(category="clothing") item_b = Item(category="clothing") @@ -92,7 +96,8 @@ def test_swap_items_when_their_item_is_missing_returns_false(): assert item_e in jolie.inventory assert not result -@pytest.mark.skip +# 5 +# @pytest.mark.skip def test_swap_items_from_my_empty_returns_false(): fatimah = Vendor( inventory=[] @@ -112,7 +117,8 @@ def test_swap_items_from_my_empty_returns_false(): assert len(jolie.inventory) == 2 assert not result -@pytest.mark.skip +# 6 +# @pytest.mark.skip def test_swap_items_from_their_empty_returns_false(): item_a = Item(category="clothing") item_b = Item(category="clothing") diff --git a/tests/unit_tests/test_wave_04.py b/tests/unit_tests/test_wave_04.py index 8190a4ebb..05c5f1e9a 100644 --- a/tests/unit_tests/test_wave_04.py +++ b/tests/unit_tests/test_wave_04.py @@ -2,7 +2,8 @@ from swap_meet.vendor import Vendor from swap_meet.item import Item -@pytest.mark.skip +# 1 +# @pytest.mark.skip def test_swap_first_item_returns_true(): item_a = Item(category="clothing") item_b = Item(category="clothing") @@ -30,7 +31,8 @@ def test_swap_first_item_returns_true(): assert item_a in jolie.inventory assert result -@pytest.mark.skip +# 2 +# @pytest.mark.skip def test_swap_first_item_from_my_empty_returns_false(): fatimah = Vendor( inventory=[] @@ -48,7 +50,8 @@ def test_swap_first_item_from_my_empty_returns_false(): assert len(jolie.inventory) == 2 assert not result -@pytest.mark.skip +# 3 +# @pytest.mark.skip def test_swap_first_item_from_their_empty_returns_false(): item_a = Item(category="clothing") item_b = Item(category="clothing") diff --git a/tests/unit_tests/test_wave_05.py b/tests/unit_tests/test_wave_05.py index 7abea06cd..c6012eba5 100644 --- a/tests/unit_tests/test_wave_05.py +++ b/tests/unit_tests/test_wave_05.py @@ -3,25 +3,29 @@ from swap_meet.decor import Decor from swap_meet.electronics import Electronics -@pytest.mark.skip +# 1 +# @pytest.mark.skip def test_clothing_has_default_category_and_to_str(): cloth = Clothing() assert cloth.category == "Clothing" assert str(cloth) == "The finest clothing you could wear." -@pytest.mark.skip +# 2 +# @pytest.mark.skip def test_decor_has_default_category_and_to_str(): decor = Decor() assert decor.category == "Decor" assert str(decor) == "Something to decorate your space." -@pytest.mark.skip +# 3 +# @pytest.mark.skip def test_electronics_has_default_category_and_to_str(): electronics = Electronics() assert electronics.category == "Electronics" assert str(electronics) == "A gadget full of buttons and secrets." -@pytest.mark.skip +# 4 +# @pytest.mark.skip def test_items_have_condition_as_float(): items = [ Clothing(condition=3.5), @@ -31,7 +35,8 @@ def test_items_have_condition_as_float(): for item in items: assert item.condition == pytest.approx(3.5) -@pytest.mark.skip +# 5 +# @pytest.mark.skip def test_items_have_condition_descriptions_that_are_the_same_regardless_of_type(): items = [ Clothing(condition=5), diff --git a/tests/unit_tests/test_wave_06.py b/tests/unit_tests/test_wave_06.py index 1f7065ab4..a6ce1cfe3 100644 --- a/tests/unit_tests/test_wave_06.py +++ b/tests/unit_tests/test_wave_06.py @@ -4,7 +4,8 @@ from swap_meet.decor import Decor from swap_meet.electronics import Electronics -@pytest.mark.skip +# 1 +# @pytest.mark.skip def test_best_by_category(): item_a = Clothing(condition=2.0) item_b = Decor(condition=2.0) @@ -20,7 +21,8 @@ def test_best_by_category(): assert best_item.category == "Clothing" assert best_item.condition == pytest.approx(4.0) -@pytest.mark.skip +# 2 +# @pytest.mark.skip def test_best_by_category_no_matches_is_none(): item_a = Decor(condition=2.0) item_b = Decor(condition=2.0) @@ -33,7 +35,8 @@ def test_best_by_category_no_matches_is_none(): assert best_item is None -@pytest.mark.skip +# 3 +# @pytest.mark.skip def test_best_by_category_with_duplicates(): # Arrange item_a = Clothing(condition=2.0) @@ -50,7 +53,8 @@ def test_best_by_category_with_duplicates(): assert best_item.category == "Clothing" assert best_item.condition == pytest.approx(4.0) -@pytest.mark.skip +# 4 +# @pytest.mark.skip def test_swap_best_by_category(): # Arrange # me @@ -76,7 +80,17 @@ def test_swap_best_by_category(): their_priority="Decor" ) - raise Exception("Complete this test according to comments below.") + assert result + assert len(tai.inventory) == 3 + assert len(jesse.inventory) == 3 + assert item_d in jesse.inventory + assert item_e in jesse.inventory + assert item_c in jesse.inventory + assert item_a in tai.inventory + assert item_b in tai.inventory + assert item_f in tai.inventory + + # raise Exception("Complete this test according to comments below.") # ********************************************************************* # ****** Complete Assert Portion of this test ********** # ********************************************************************* @@ -85,7 +99,8 @@ def test_swap_best_by_category(): # - That tai and jesse's inventories are the correct length # - That all the correct items are in tai and jesse's inventories, including the items which were swapped from one vendor to the other -@pytest.mark.skip +# 5 +# @pytest.mark.skip def test_swap_best_by_category_reordered(): # Arrange item_a = Decor(condition=2.0) @@ -109,7 +124,16 @@ def test_swap_best_by_category_reordered(): their_priority="Decor" ) - raise Exception("Complete this test according to comments below.") + assert result + assert len(tai.inventory) == 3 + assert len(jesse.inventory) == 3 + assert item_d in jesse.inventory + assert item_e in jesse.inventory + assert item_c in jesse.inventory + assert item_a in tai.inventory + assert item_b in tai.inventory + assert item_f in tai.inventory + # raise Exception("Complete this test according to comments below.") # ********************************************************************* # ****** Complete Assert Portion of this test ********** # ********************************************************************* @@ -118,7 +142,8 @@ def test_swap_best_by_category_reordered(): # - That tai and jesse's inventories are the correct length # - That all the correct items are in tai and jesse's inventories, and that the items that were swapped are not there -@pytest.mark.skip +# 6 +# @pytest.mark.skip def test_swap_best_by_category_no_inventory_is_false(): tai = Vendor( inventory=[] @@ -144,7 +169,8 @@ 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 +# 7 +# @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) @@ -170,7 +196,8 @@ 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 +# 8 +# @pytest.mark.skip def test_swap_best_by_category_no_match_is_false(): # Arrange item_a = Decor(condition=2.0) @@ -194,7 +221,16 @@ def test_swap_best_by_category_no_match_is_false(): their_priority="Clothing" ) - raise Exception("Complete this test according to comments below.") + assert not result + assert len(tai.inventory) == 3 + assert len(jesse.inventory) == 3 + assert item_d in jesse.inventory + assert item_e in jesse.inventory + assert item_f in jesse.inventory + assert item_a in tai.inventory + assert item_b in tai.inventory + assert item_c in tai.inventory + # raise Exception("Complete this test according to comments below.") # ********************************************************************* # ****** Complete Assert Portion of this test ********** # ********************************************************************* @@ -203,7 +239,8 @@ def test_swap_best_by_category_no_match_is_false(): # - That tai and jesse's inventories are the correct length # - That all the correct items are in tai and jesse's inventories -@pytest.mark.skip +# 9 +# @pytest.mark.skip def test_swap_best_by_category_no_other_match_is_false(): # Arrange item_a = Decor(condition=2.0) @@ -227,7 +264,16 @@ def test_swap_best_by_category_no_other_match_is_false(): their_priority="Decor" ) - raise Exception("Complete this test according to comments below.") + assert not result + assert len(tai.inventory) == 3 + assert len(jesse.inventory) == 3 + assert item_d in jesse.inventory + assert item_e in jesse.inventory + assert item_f in jesse.inventory + assert item_a in tai.inventory + assert item_b in tai.inventory + assert item_c in tai.inventory + # raise Exception("Complete this test according to comments below.") # ********************************************************************* # ****** Complete Assert Portion of this test ********** # ********************************************************************* From 85905c1477e441755f92770ce08eebc5963e7e15 Mon Sep 17 00:00:00 2001 From: Ivana Maldonado Date: Fri, 8 Apr 2022 04:21:40 -0400 Subject: [PATCH 2/3] Fixed error on main.py --- main.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/main.py b/main.py index 0d49fda7d..2c0258fa7 100644 --- a/main.py +++ b/main.py @@ -1,13 +1,12 @@ -from re import I from swap_meet.vendor import Vendor from swap_meet.item import Item -# Istances of Vendor: + vendor = Vendor() -vendor_1 = Vendor(inventory=["item_1","item_2","item_3"]) +# vendor_1 = Vendor(inventory=["item_1","item_2","item_3"]) -# Instance of Item: -item_1 = Item(category='decor') -item_2 = Item(category='clothing', condition=3) +item = Item() +# item_1 = Item(category='decor') +# item_2 = Item(category='clothing', condition=3) From 77b357c65c0c31c883b5938760d8624b3450b8c5 Mon Sep 17 00:00:00 2001 From: Ivana Maldonado Date: Fri, 8 Apr 2022 12:57:15 -0400 Subject: [PATCH 3/3] Forgot to uncomment integration tests. --- swap_meet/vendor.py | 4 +++- tests/integration_tests/test_wave_01_02_03.py | 2 +- tests/integration_tests/test_wave_04_05_06.py | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index 3cc9ad1cc..94dfde25a 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -1,5 +1,7 @@ class Vendor: - def __init__(self, inventory=[]): + def __init__(self, inventory=None): + if not inventory: + inventory = [] self.inventory = inventory diff --git a/tests/integration_tests/test_wave_01_02_03.py b/tests/integration_tests/test_wave_01_02_03.py index 9912414da..25707d998 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.py b/tests/integration_tests/test_wave_04_05_06.py index 4d0be9909..91b1362b6 100644 --- a/tests/integration_tests/test_wave_04_05_06.py +++ b/tests/integration_tests/test_wave_04_05_06.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(): camila = Vendor()