diff --git a/swap_meet/clothing.py b/swap_meet/clothing.py index b8afdeb1e..14e81de5d 100644 --- a/swap_meet/clothing.py +++ b/swap_meet/clothing.py @@ -1,2 +1,14 @@ -class Clothing: - pass \ No newline at end of file +from swap_meet.item import Item + +class Clothing(Item): + def __init__(self, category = "",condition = 0): + super().__init__(category = "Clothing", condition = condition) + + + def __str__(self): + return "The finest clothing you could wear." + + + + + diff --git a/swap_meet/decor.py b/swap_meet/decor.py index eab7a9dbe..3ba187c87 100644 --- a/swap_meet/decor.py +++ b/swap_meet/decor.py @@ -1,2 +1,10 @@ -class Decor: - pass \ No newline at end of file +from swap_meet.item import Item +class Decor(Item): + def __init__(self, category = "",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..6f0585609 100644 --- a/swap_meet/electronics.py +++ b/swap_meet/electronics.py @@ -1,2 +1,9 @@ -class Electronics: - pass +from swap_meet.item import Item +class Electronics(Item): + def __init__(self, category = "", 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..eccfe089a 100644 --- a/swap_meet/item.py +++ b/swap_meet/item.py @@ -1,2 +1,22 @@ class Item: - pass \ No newline at end of file + def __init__(self, age = 0, category = "", condition = 0): + self.category = category + self.condition = condition + self.age = age + +# Wave 3 + def __str__(self): + return "Hello World!" + +# Wave 5 + def condition_description(self): + condition_descriptions = ["I dont like zero", "I dont like one either", + "Maybe I like two", "Hmmmm.....probably three is nice", "I like four", + "Five is a nice number"] + return condition_descriptions[self.condition] + + + + + + diff --git a/swap_meet/vendor.py b/swap_meet/vendor.py index 87302c056..1a654302b 100644 --- a/swap_meet/vendor.py +++ b/swap_meet/vendor.py @@ -1,2 +1,98 @@ class Vendor: - pass \ No newline at end of file + MAX_AGE = 1000 +# Wave 1 + def __init__(self, inventory = None): + if inventory is None: + inventory = [] + self.inventory = inventory + def add(self,item): + self.inventory.append(item) + return item + def remove(self,item): + for inventory_item in self.inventory: + if inventory_item == item: + self.inventory.remove(item) + return item + return False + +# Wave 2 + def get_by_category(self, category): + item_list = [] + for item in self.inventory: + if item.category == category: + item_list.append(item) + return item_list + +# Wave 3 + def swap_items(self, friend_vendor, my_item, their_item): + if my_item not in self.inventory or their_item not in friend_vendor.inventory: + return False + + self.remove(my_item) + friend_vendor.add(my_item) + friend_vendor.remove(their_item) + self.add(their_item) + return True + + +# Wave 4 + def swap_first_item(self, friend_vendor): + if len(self.inventory) == 0 or len(friend_vendor.inventory) == 0: + return False + + return self.swap_items(friend_vendor, self.inventory[0], + friend_vendor.inventory[0]) + + +# Wave 6 + + def get_best_by_category(self, category): + matching_category_items = self.get_by_category(category) + highest_condition = 0 + highest_item = None + for item in matching_category_items: + if item.condition > highest_condition: + highest_condition = item.condition + highest_item = item + return highest_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 my_best_item == None or their_best_item == None: + return False + return self.swap_items(other, my_best_item, their_best_item) + + +# Optional Enhancement + def find_newest_item (self): + min_item_age = self.MAX_AGE + min_item = None + for item in self.inventory: + if item.age < min_item_age: + min_item_age = item.age + min_item = item + return min_item + + def swap_by_newest(self, friend_vendor): + vendor_newest_item = self.find_newest_item() + friend_newest_item = friend_vendor.find_newest_item() + return self.swap_items(friend_vendor, vendor_newest_item, friend_newest_item) + + + + + + + + + + + + + + + + diff --git a/tests/integration_tests/test_wave_01_02_03.py b/tests/integration_tests/test_wave_01_02_03.py index 9912414da..34d042fdd 100644 --- a/tests/integration_tests/test_wave_01_02_03.py +++ b/tests/integration_tests/test_wave_01_02_03.py @@ -2,8 +2,8 @@ from swap_meet.vendor import Vendor from swap_meet.item import Item -@pytest.mark.skip -@pytest.mark.integration_test +# @pytest.mark.skip +# @pytest.mark.integration_test def test_integration_wave_01_02_03(): # make a vendor vendor = 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..cb3b346a2 100644 --- a/tests/integration_tests/test_wave_04_05_06.py +++ b/tests/integration_tests/test_wave_04_05_06.py @@ -4,8 +4,8 @@ from swap_meet.decor import Decor from swap_meet.electronics import Electronics -@pytest.mark.skip -@pytest.mark.integration_test +# @pytest.mark.skip +# @pytest.mark.integration_test def test_integration_wave_04_05_06(): camila = Vendor() valentina = Vendor() diff --git a/tests/unit_tests/test_wave_01.py b/tests/unit_tests/test_wave_01.py index 58478ccf9..19868ee5d 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_is_false(): item = "item to remove" vendor = Vendor( @@ -49,7 +49,11 @@ def test_removing_not_found_is_false(): result = vendor.remove(item) - 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 == 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..6701eb277 100644 --- a/tests/unit_tests/test_wave_02.py +++ b/tests/unit_tests/test_wave_02.py @@ -2,12 +2,12 @@ from swap_meet.vendor import Vendor from swap_meet.item import Item -@pytest.mark.skip +# @pytest.mark.skip def test_items_have_blank_default_category(): item = Item() assert item.category == "" -@pytest.mark.skip +# @pytest.mark.skip def test_get_items_by_category(): item_a = Item(category="clothing") item_b = Item(category="electronics") @@ -23,7 +23,7 @@ def test_get_items_by_category(): assert item_c in items assert item_b not in items -@pytest.mark.skip +# @pytest.mark.skip def test_get_no_matching_items_by_category(): item_a = Item(category="clothing") item_b = Item(category="clothing") @@ -34,7 +34,12 @@ def test_get_no_matching_items_by_category(): items = vendor.get_by_category("electronics") - raise Exception("Complete this test according to comments below.") - # ********************************************************************* - # ****** Complete Assert Portion of this test ********** - # ********************************************************************* + assert len(items) == 0 + assert item_a not in items + assert item_c not in items + assert item_b 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..2d573fa52 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(): item = Item() @@ -10,7 +10,7 @@ def test_item_overrides_to_string(): assert stringified_item == "Hello World!" -@pytest.mark.skip +# @pytest.mark.skip def test_swap_items_returns_true(): item_a = Item(category="clothing") item_b = Item(category="clothing") @@ -38,7 +38,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(category="clothing") item_b = Item(category="clothing") @@ -65,7 +65,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(category="clothing") item_b = Item(category="clothing") @@ -92,7 +92,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=[] @@ -112,7 +112,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(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..4ef21ff8e 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(category="clothing") item_b = Item(category="clothing") @@ -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(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..fdeb063a9 100644 --- a/tests/unit_tests/test_wave_05.py +++ b/tests/unit_tests/test_wave_05.py @@ -3,25 +3,25 @@ from swap_meet.decor import Decor from swap_meet.electronics import Electronics -@pytest.mark.skip +# @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 +# @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 +# @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 +# @pytest.mark.skip def test_items_have_condition_as_float(): items = [ Clothing(condition=3.5), @@ -31,7 +31,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), diff --git a/tests/unit_tests/test_wave_06.py b/tests/unit_tests/test_wave_06.py index 1f7065ab4..bc4a68812 100644 --- a/tests/unit_tests/test_wave_06.py +++ b/tests/unit_tests/test_wave_06.py @@ -3,8 +3,9 @@ from swap_meet.clothing import Clothing from swap_meet.decor import Decor from swap_meet.electronics import Electronics +from swap_meet.item import Item -@pytest.mark.skip +# @pytest.mark.skip def test_best_by_category(): item_a = Clothing(condition=2.0) item_b = Decor(condition=2.0) @@ -20,7 +21,7 @@ def test_best_by_category(): assert best_item.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) @@ -33,7 +34,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) @@ -50,7 +51,7 @@ def test_best_by_category_with_duplicates(): assert best_item.category == "Clothing" assert best_item.condition == pytest.approx(4.0) -@pytest.mark.skip +# @pytest.mark.skip def test_swap_best_by_category(): # Arrange # me @@ -60,6 +61,7 @@ def test_swap_best_by_category(): tai = Vendor( inventory=[item_a, item_b, item_c] ) + actual_length_tai = len(tai.inventory) # them item_d = Clothing(condition=2.0) @@ -68,6 +70,7 @@ def test_swap_best_by_category(): jesse = Vendor( inventory=[item_d, item_e, item_f] ) + actual_length_jesse = len(jesse.inventory) # Act result = tai.swap_best_by_category( @@ -76,16 +79,34 @@ def test_swap_best_by_category(): their_priority="Decor" ) - raise Exception("Complete this test according to comments below.") - # ********************************************************************* - # ****** Complete Assert Portion of this test ********** - # ********************************************************************* - # Assertions should check: - # - That the results is truthy - # - 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 +# raise Exception("Complete this test according to comments below.") +# # ********************************************************************* +# # ****** Complete Assert Portion of this test ********** +# # ********************************************************************* +# # Assertions should check: +# # - That the results is truthy +# # - 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 + + # Assert + assert result == True + expected_length_tai = len(tai.inventory) + assert expected_length_tai == actual_length_tai + + expected_length_jesse = len(jesse.inventory) + assert expected_length_jesse == actual_length_jesse + + assert (item_f in tai.inventory) == True + assert (item_c not in tai.inventory) == True + assert (item_c in jesse.inventory) == True + assert (item_f not in jesse.inventory) == True + + + -@pytest.mark.skip + + +# @pytest.mark.skip def test_swap_best_by_category_reordered(): # Arrange item_a = Decor(condition=2.0) @@ -94,6 +115,7 @@ def test_swap_best_by_category_reordered(): tai = Vendor( inventory=[item_c, item_b, item_a] ) + actual_length_tai = len(tai.inventory) item_d = Clothing(condition=2.0) item_e = Decor(condition=4.0) @@ -101,6 +123,7 @@ def test_swap_best_by_category_reordered(): jesse = Vendor( inventory=[item_f, item_e, item_d] ) + actual_length_jesse = len(jesse.inventory) # Act result = tai.swap_best_by_category( @@ -109,16 +132,29 @@ def test_swap_best_by_category_reordered(): their_priority="Decor" ) - raise Exception("Complete this test according to comments below.") - # ********************************************************************* - # ****** Complete Assert Portion of this test ********** - # ********************************************************************* - # Assertions should check: - # - That result is truthy - # - 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 + # Assert + assert result == True + expected_length_tai = len(tai.inventory) + assert expected_length_tai == actual_length_tai + + expected_length_jesse = len(jesse.inventory) + assert expected_length_jesse == actual_length_jesse + + assert (item_f in tai.inventory) == True + assert (item_c not in tai.inventory) == True + assert (item_c in jesse.inventory) == True + assert (item_f not in jesse.inventory) == True + +# raise Exception("Complete this test according to comments below.") +# # ********************************************************************* +# # ****** Complete Assert Portion of this test ********** +# # ********************************************************************* +# # Assertions should check: +# # - That result is truthy +# # - 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 def test_swap_best_by_category_no_inventory_is_false(): tai = Vendor( inventory=[] @@ -144,7 +180,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) @@ -170,7 +206,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) @@ -179,6 +215,7 @@ def test_swap_best_by_category_no_match_is_false(): tai = Vendor( inventory=[item_a, item_b, item_c] ) + actual_length_tai = len(tai.inventory) item_d = Clothing(condition=2.0) item_e = Decor(condition=4.0) @@ -186,6 +223,7 @@ def test_swap_best_by_category_no_match_is_false(): jesse = Vendor( inventory=[item_d, item_e, item_f] ) + actual_length_jesse = len(jesse.inventory) # Act result = tai.swap_best_by_category( @@ -194,16 +232,31 @@ def test_swap_best_by_category_no_match_is_false(): their_priority="Clothing" ) - raise Exception("Complete this test according to comments below.") - # ********************************************************************* - # ****** Complete Assert Portion of this test ********** - # ********************************************************************* - # Assertions should check: - # - That result is falsy - # - 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 + # Assert + assert result == False + expected_length_tai = len(tai.inventory) + assert expected_length_tai == actual_length_tai + + expected_length_jesse = len(jesse.inventory) + assert expected_length_jesse == actual_length_jesse + + assert (item_a in tai.inventory) == True + assert (item_b in tai.inventory) == True + assert (item_c in tai.inventory) == True + assert (item_d in jesse.inventory) == True + assert (item_e in jesse.inventory) == True + assert (item_f in jesse.inventory) == True + +# raise Exception("Complete this test according to comments below.") +# # ********************************************************************* +# # ****** Complete Assert Portion of this test ********** +# # ********************************************************************* +# # Assertions should check: +# # - That result is falsy +# # - 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 def test_swap_best_by_category_no_other_match_is_false(): # Arrange item_a = Decor(condition=2.0) @@ -212,6 +265,7 @@ def test_swap_best_by_category_no_other_match_is_false(): tai = Vendor( inventory=[item_c, item_b, item_a] ) + actual_length_tai = len(tai.inventory) item_d = Clothing(condition=2.0) item_e = Decor(condition=4.0) @@ -219,6 +273,7 @@ def test_swap_best_by_category_no_other_match_is_false(): jesse = Vendor( inventory=[item_f, item_e, item_d] ) + actual_length_jesse = len(jesse.inventory) # Act result = tai.swap_best_by_category( @@ -227,11 +282,61 @@ def test_swap_best_by_category_no_other_match_is_false(): their_priority="Decor" ) - raise Exception("Complete this test according to comments below.") - # ********************************************************************* - # ****** Complete Assert Portion of this test ********** - # ********************************************************************* - # Assertions should check: - # - That result is falsy - # - That tai and jesse's inventories are the correct length - # - That all the correct items are in tai and jesse's inventories + # Assert + assert result == False + expected_length_tai = len(tai.inventory) + assert expected_length_tai == actual_length_tai + + expected_length_jesse = len(jesse.inventory) + assert expected_length_jesse == actual_length_jesse + + assert (item_a in tai.inventory) == True + assert (item_b in tai.inventory) == True + assert (item_c in tai.inventory) == True + assert (item_d in jesse.inventory) == True + assert (item_e in jesse.inventory) == True + assert (item_f in jesse.inventory) == True + +# raise Exception("Complete this test according to comments below.") +# # ********************************************************************* +# # ****** Complete Assert Portion of this test ********** +# # ********************************************************************* +# # Assertions should check: +# # - That result is falsy +# # - That tai and jesse's inventories are the correct length +# # - That all the correct items are in tai and jesse's inventories + +# Optional enhancement +# @pytest.mark.skip +def test_swap_by_newest_returns_True(): + # Arrange + item_a = Item(age = 5) + item_b = Item(age = 1) + item_c = Item(age = 13) + fatimah = Vendor( + inventory=[item_a, item_b, item_c] + ) + + item_d = Item(age = 6) + item_e = Item(age = 2) + jolie = Vendor( + inventory=[item_d, item_e] + ) + # Act + + result = fatimah.swap_items(jolie, item_b, item_e) + + # Assert + + assert len(fatimah.inventory) == 3 + assert item_b not in fatimah.inventory + assert item_a in fatimah.inventory + assert item_c in fatimah.inventory + assert item_e in fatimah.inventory + assert len(jolie.inventory) == 2 + assert item_e not in jolie.inventory + assert item_d in jolie.inventory + assert item_b in jolie.inventory + assert result + +