Test buying an item when we don't have enough of money
This commit is contained in:
		@@ -14,11 +14,12 @@ class Item(Entity):
 | 
				
			|||||||
    A class for items
 | 
					    A class for items
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    held: bool
 | 
					    held: bool
 | 
				
			||||||
    held_by: Optional[Player]
 | 
					    held_by: Optional[InventoryHolder]
 | 
				
			||||||
    price: int
 | 
					    price: int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, held: bool = False, held_by: Optional[Player] = None,
 | 
					    def __init__(self, held: bool = False,
 | 
				
			||||||
                 price: int = 2, *args, **kwargs):
 | 
					                 held_by: Optional[InventoryHolder] = None,
 | 
				
			||||||
 | 
					price: int = 2, *args, **kwargs):
 | 
				
			||||||
        super().__init__(*args, **kwargs)
 | 
					        super().__init__(*args, **kwargs)
 | 
				
			||||||
        self.held = held
 | 
					        self.held = held
 | 
				
			||||||
        self.held_by = held_by
 | 
					        self.held_by = held_by
 | 
				
			||||||
@@ -45,7 +46,7 @@ class Item(Entity):
 | 
				
			|||||||
        Indicates what should be done when the item is equipped.
 | 
					        Indicates what should be done when the item is equipped.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def hold(self, player: "Player") -> None:
 | 
					    def hold(self, player: InventoryHolder) -> None:
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        The item is taken from the floor and put into the inventory
 | 
					        The item is taken from the floor and put into the inventory
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
@@ -66,15 +67,14 @@ class Item(Entity):
 | 
				
			|||||||
    def get_all_items() -> list:
 | 
					    def get_all_items() -> list:
 | 
				
			||||||
        return [BodySnatchPotion, Bomb, Heart, Sword]
 | 
					        return [BodySnatchPotion, Bomb, Heart, Sword]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def be_sold(self, buyer: InventoryHolder, seller: InventoryHolder,
 | 
					    def be_sold(self, buyer: InventoryHolder, seller: InventoryHolder) -> bool:
 | 
				
			||||||
                game: Any) -> bool:
 | 
					 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        Does all necessary actions when an object is to be sold.
 | 
					        Does all necessary actions when an object is to be sold.
 | 
				
			||||||
        Is overwritten by some classes that cannot exist in the player's
 | 
					        Is overwritten by some classes that cannot exist in the player's
 | 
				
			||||||
        inventory
 | 
					        inventory
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        if buyer.hazel >= self.price:
 | 
					        if buyer.hazel >= self.price:
 | 
				
			||||||
            buyer.add_to_inventory(self)
 | 
					            self.hold(buyer)
 | 
				
			||||||
            seller.remove_from_inventory(self)
 | 
					            seller.remove_from_inventory(self)
 | 
				
			||||||
            buyer.change_hazel_balance(-self.price)
 | 
					            buyer.change_hazel_balance(-self.price)
 | 
				
			||||||
            seller.change_hazel_balance(self.price)
 | 
					            seller.change_hazel_balance(self.price)
 | 
				
			||||||
@@ -109,22 +109,6 @@ class Heart(Item):
 | 
				
			|||||||
        d["healing"] = self.healing
 | 
					        d["healing"] = self.healing
 | 
				
			||||||
        return d
 | 
					        return d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def be_sold(self, buyer: InventoryHolder, seller: InventoryHolder,
 | 
					 | 
				
			||||||
                game: Any) -> bool:
 | 
					 | 
				
			||||||
        """
 | 
					 | 
				
			||||||
        Does all necessary actions when an object is to be sold.
 | 
					 | 
				
			||||||
        Is overwritten by some classes that cannot exist in the player's
 | 
					 | 
				
			||||||
        inventory
 | 
					 | 
				
			||||||
        """
 | 
					 | 
				
			||||||
        if buyer.hazel >= self.price:
 | 
					 | 
				
			||||||
            self.hold(buyer)
 | 
					 | 
				
			||||||
            seller.remove_from_inventory(self)
 | 
					 | 
				
			||||||
            buyer.change_hazel_balance(-self.price)
 | 
					 | 
				
			||||||
            seller.change_hazel_balance(self.price)
 | 
					 | 
				
			||||||
            return True
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            return False
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Bomb(Item):
 | 
					class Bomb(Item):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -194,7 +194,7 @@ class Game:
 | 
				
			|||||||
        if self.store_menu.values and not self.player.dead:
 | 
					        if self.store_menu.values and not self.player.dead:
 | 
				
			||||||
            if key == KeyValues.ENTER:
 | 
					            if key == KeyValues.ENTER:
 | 
				
			||||||
                item = self.store_menu.validate()
 | 
					                item = self.store_menu.validate()
 | 
				
			||||||
                flag = item.be_sold(self.player, self.store_menu.merchant, self)
 | 
					                flag = item.be_sold(self.player, self.store_menu.merchant)
 | 
				
			||||||
                if not flag:
 | 
					                if not flag:
 | 
				
			||||||
                    self.message = _("You do not have enough money")
 | 
					                    self.message = _("You do not have enough money")
 | 
				
			||||||
                    self.display_actions(DisplayActions.UPDATE)
 | 
					                    self.display_actions(DisplayActions.UPDATE)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -528,6 +528,15 @@ class TestGame(unittest.TestCase):
 | 
				
			|||||||
        self.assertEqual(self.game.player.health,
 | 
					        self.assertEqual(self.game.player.health,
 | 
				
			||||||
                         self.game.player.maxhealth - 1)
 | 
					                         self.game.player.maxhealth - 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # We don't have enough of money
 | 
				
			||||||
 | 
					        self.game.player.hazel = 0
 | 
				
			||||||
 | 
					        item = self.game.store_menu.validate()
 | 
				
			||||||
 | 
					        self.game.handle_key_pressed(KeyValues.ENTER)
 | 
				
			||||||
 | 
					        self.assertNotIn(item, self.game.player.inventory)
 | 
				
			||||||
 | 
					        self.assertIn(item, merchant.inventory)
 | 
				
			||||||
 | 
					        self.assertEqual(self.game.message, _("You do not have enough money"))
 | 
				
			||||||
 | 
					        self.game.handle_key_pressed(KeyValues.ENTER)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Exit the menu
 | 
					        # Exit the menu
 | 
				
			||||||
        self.game.handle_key_pressed(KeyValues.SPACE)
 | 
					        self.game.handle_key_pressed(KeyValues.SPACE)
 | 
				
			||||||
        self.assertEqual(self.game.state, GameMode.PLAY)
 | 
					        self.assertEqual(self.game.state, GameMode.PLAY)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user