diff --git a/demo.py b/demo.py index baa18b0..0d61400 100644 --- a/demo.py +++ b/demo.py @@ -1,21 +1,24 @@ import inventory -inventory.add_item("Apfel", 10) +inventory.add_item("Apfel", 1) inventory.add_item("Bananen", 10) inventory.add_item("Weintrauben", 10) -inventory.add_item("Birnen", 4) +inventory.add_item("Birnen", 5) print("Bestand Apfel:", inventory.get_stock("Apfel")) print("Bestand Bananen:", inventory.get_stock("Bananen")) print("Bestand Birnen:", inventory.get_stock("Birnen")) print("Bestand Weintrauben:", inventory.get_stock("Weintrauben")) -inventory.sell_item("Weintrauben", "Hallo") +inventory.sell_item("Weintrauben", 4) inventory.sell_item("Apfel", 1) inventory.sell_item("Bananen", 5) inventory.sell_item("Birnen", 4) -print("Bestand Apfel nach Verkauf:", inventory.get_stock("Apfel")) +try: + print("Bestand Apfel nach Verkauf:", inventory.get_stock("Apfel")) +except ValueError: + print("Apfel ist nicht mehr im Lager.") print("Bestand Bananen nach Verkauf:", inventory.get_stock("Bananen")) print("Bestand Weintrauben nach Verkauf:", inventory.get_stock("Weintrauben")) print("Bestand Birnen nach Verkauf:", inventory.get_stock("Birnen")) diff --git a/inventory.py b/inventory.py index 55617d9..743f0ed 100644 --- a/inventory.py +++ b/inventory.py @@ -1,12 +1,17 @@ # Globale Datenstruktur für das Lager + items = {} # key: Artikelname, value: Anzahl def add_item(name, qty): if not isinstance(name, str): raise ValueError(f"Fehler: Artikelname '{name}' muss ein String sein.") + if not name.strip(): + raise ValueError("Fehler: Artikelname darf nicht leer sein oder nur aus Leerzeichen bestehen.") if not isinstance(qty, int): - raise ValueError(f"Fehler: Menge '{qty}' muss eine Zahl sein.") + raise ValueError("Fehler: Die Menge muss eine Zahl sein.") + if qty <= 0: + raise ValueError("Fehler: Die Menge muss größer als 0 sein.") if name in items: items[name] += qty @@ -26,6 +31,9 @@ def sell_item(name, qty): raise ValueError(f"Fehler: '{name}' können nicht verkauft werden, Bestand zu niedrig.") items[name] -= qty + if items[name] == 0: + del items[name] + return True diff --git a/tests/test_inventory.py b/tests/test_inventory.py index aae57ee..5414c2c 100644 --- a/tests/test_inventory.py +++ b/tests/test_inventory.py @@ -10,7 +10,7 @@ def setUp(self): def test_add_item_und_get_stock(self): inventory.add_item("Apfel", 10) - self.assertEqual(inventory.get_stock("Apfel"), 10) + self.assertEqual(inventory.items["Apfel"], 10) def test_add_item_return_true(self): result = inventory.add_item("Apfel", 10) @@ -19,26 +19,33 @@ def test_add_item_return_true(self): def test_add_item_existing_item_erhoeht_bestand(self): inventory.add_item("Apfel", 5) - self.assertEqual(inventory.get_stock("Apfel"), 5) + self.assertEqual(inventory.items["Apfel"], 5) inventory.add_item("Apfel", 3) - self.assertEqual(inventory.get_stock("Apfel"), 8) + self.assertEqual(inventory.items["Apfel"], 8) def test_add_item_falscher_name(self): inventory.add_item("Apfel", 5) - for name in [123]: - for qty in [5]: - with self.assertRaises(ValueError) as cm: - inventory.add_item(name, qty) - self.assertEqual(str(cm.exception), f"Fehler: Artikelname '{name}' muss ein String sein.") + with self.assertRaises(ValueError) as cm: + inventory.add_item(123, 5) + self.assertEqual(str(cm.exception), "Fehler: Artikelname '123' muss ein String sein.") + + def test_add_item_leerer_string(self): + with self.assertRaises(ValueError) as cm: + inventory.add_item(" ", 5) + self.assertEqual(str(cm.exception), + "Fehler: Artikelname darf nicht leer sein oder nur aus Leerzeichen bestehen.") + + def test_add_item_menge_0(self): + with self.assertRaises(ValueError) as cm: + inventory.add_item("Äpfel", 0) + self.assertEqual(str(cm.exception), "Fehler: Die Menge muss größer als 0 sein.") def test_add_item_falsche_menge(self): inventory.add_item("Weintrauben", 10) - for name in ["Weintrauben"]: - for qty in ["fünf"]: - with self.assertRaises(ValueError) as cm: - inventory.add_item(name, qty) - self.assertEqual(str(cm.exception), "Fehler: Menge 'fünf' muss eine Zahl sein.") + with self.assertRaises(ValueError) as cm: + inventory.add_item("Weintrauben", "fünf") + self.assertEqual(str(cm.exception), "Fehler: Die Menge muss eine Zahl sein.") def test_sell_item_gueltig(self): inventory.add_item("Banane", 5) @@ -47,19 +54,15 @@ def test_sell_item_gueltig(self): def test_sell_item_ungueltiger_zahl(self): inventory.add_item("Apfel", 10) - for name in ["Apfel"]: - for qty in ["Hallo"]: - with self.assertRaises(ValueError) as cm: - inventory.sell_item(name, qty) + with self.assertRaises(ValueError) as cm: + inventory.sell_item("Apfel", "Hallo") self.assertEqual(str(cm.exception), "Fehler: Menge 'Hallo' muss eine Zahl sein.") def test_sell_item_ungueltiger_name(self): inventory.add_item("Apfel", 10) - for name in [5]: - for qty in [10]: - with self.assertRaises(ValueError) as cm: - inventory.sell_item(name, qty) - self.assertEqual(str(cm.exception), f"Fehler: Artikelname '{name}' muss ein String sein.") + with self.assertRaises(ValueError) as cm: + inventory.sell_item(5, 10) + self.assertEqual(str(cm.exception), "Fehler: Artikelname '5' muss ein String sein.") def test_sell_item_return_true(self): inventory.add_item("Banane", 10) @@ -72,7 +75,7 @@ def test_sell_item_groesser_als_add_item(self): with self.assertRaises(ValueError) as cm: inventory.sell_item("Apfel", 5) self.assertEqual(str(cm.exception), "Fehler: 'Apfel' können nicht verkauft werden, Bestand zu niedrig.") - self.assertEqual(inventory.get_stock("Apfel"), 3) + self.assertEqual(inventory.items["Apfel"], 3) def test_sell_item_artikel_existiert_nicht(self): with self.assertRaises(ValueError) as cm: @@ -81,20 +84,23 @@ def test_sell_item_artikel_existiert_nicht(self): def test_get_stock_falscher_datentyp(self): inventory.add_item("Apfel", 10) - for name in [123]: - with self.assertRaises(ValueError) as cm: - inventory.get_stock(name) - self.assertEqual(str(cm.exception), f"Fehler: '{name}', der Artikelname muss ein String sein.") + with self.assertRaises(ValueError) as cm: + inventory.get_stock(123) + self.assertEqual(str(cm.exception), "Fehler: '123', der Artikelname muss ein String sein.") def test_get_stock_artikel_existiert_nicht(self): inventory.add_item("Apfel", 10) - for name in ["Birne"]: - with self.assertRaises(ValueError) as cm: - inventory.get_stock(name) - self.assertEqual(str(cm.exception), f"Fehler: Artikel '{name}' existiert nicht im Lager.") + with self.assertRaises(ValueError) as cm: + inventory.get_stock("Birne") + self.assertEqual(str(cm.exception), "Fehler: Artikel 'Birne' existiert nicht im Lager.") def test_total_items_und_sell_items(self): inventory.add_item("Apfel", 5) inventory.add_item("Banane", 10) inventory.sell_item("Apfel", 1) self.assertEqual(inventory.total_items(), 14) + + def test_item_aus_liste_bei_bestand_0(self): + inventory.add_item("Apfel", 5) + inventory.sell_item("Apfel", 5) + self.assertNotIn("Apfel", inventory.items)