Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions demo.py
Original file line number Diff line number Diff line change
@@ -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"))
Expand Down
10 changes: 9 additions & 1 deletion inventory.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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


Expand Down
68 changes: 37 additions & 31 deletions tests/test_inventory.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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:
Expand All @@ -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)