0%

Abschlussprojekt: Ein Verleihprogramm mit dauerhafter Speicherung · Abschlussprojekt

Abschlussprojekt: Abschlussprojekt: Das vollständige Verleihprogramm prüfen

Die Befehlsfunktionen arbeiten einzeln. Belege jetzt, dass sie einen dauerhaft gespeicherten Ablauf bilden, wenn jede Operation denselben ausdrücklich angegebenen Datenbankpfad erhält. Ein öffentlicher Test kann diese Geschichte belegen, ohne die acht bereits vorhandenen gezielten Datenbanktests zu ersetzen.

Öffne tests/test_lending.py. Es enthält genau einen unfertigen Test, test_complete_cli_workflow(tmp_path, capsys). Lass tests/test_catalog.py unverändert. Diese acht Tests schützen weiterhin Schemaeinrichtung, Abfragen, Fremdschlüssel, Ausleihregeln, dauerhafte Speicherung durch Commit, Import-Rollback und -Wiederholung sowie abgesicherte Migration.

Erstelle innerhalb des neuen Tests database_path und csv_path unterhalb von tmp_path. Schreibe den exakten Text mit drei Zeilen aus data/items.csv in die temporäre CSV-Datei. Rufe dann lending.main in dieser Reihenfolge auf:

init
import-items
register-member
checkout
available
activity
return
activity

Verwende dieselben Argumente wie Run: Mitglied 17, Ausleihvorgang 501, Gegenstand 1, Ausleihbeschriftung 2026-08-26 und Rückgabebeschriftung 2026-08-27. Sichere nach jedem Aufruf Status 0 zu, lies capsys und vergleiche die vollständige stdout-Ausgabe dieses Befehls. Verlange jedes Mal leeres stderr. Die erfasste Ausgabe nach jedem Aufruf zu lesen verhindert, dass die Ausgabe eines Befehls in der eines anderen verborgen bleibt.

Die Verfügbarkeitsausgabe muss den ausgeliehenen Gegenstand 1 weglassen. Die erste Aktivitätsausgabe muss die registrierte E-Mail enthalten und die noch fehlende Rückgabeangabe des aktiven Ausleihvorgangs als NULL darstellen. Nach der Rückgabe muss die zweite Aktivitätsausgabe 2026-08-27 in derselben Ausleihzeile zeigen.

Öffne abschließend eine neue sqlite3-Verbindung zu database_path. Vergleiche Schemaversion 2, die Anzahlen von drei Gegenständen, einem Mitglied und einem Ausleihvorgang sowie die gespeicherte Rückgabebeschriftung von Ausleihvorgang 501. Schließe diese Verbindung in finally. Dieser letzte Lesezugriff belegt, dass der Zustand des Ablaufs über die Befehlsverbindungen hinaus erhalten blieb.

Klicke auf Run. demo.py führt denselben Ablauf in einem temporären Verzeichnis aus und gibt dann Folgendes aus:

== reopen ==
Schema version: 2
Items: 3
Members: 1
Loans: 1
Loan 501 returned_on: 2026-08-27
Temporary demo database removed: yes

Hier zeigt Run den Ablauf über demo.py; Submit prüft deine Testsuite. Die separate Werkzeugleistenaktion Run project tests verwendet Python Lands kleinen Testrunner, der keine pytest-Fixtures wie tmp_path und capsys liefert. Die nächste Lektion, Dein Projekt herunterladen und lokal ausführen, enthält die Befehle, um beide Testdateien mit pytest auf deinem Computer auszuführen.

Eine verlässliche Testsuite kann beide Testdateien zweimal aus separaten sauberen Verzeichnissen ausführen. Der eine CLI-Test sollte außerdem realistische Regressionen bei Statuswerten, Kopfzeilen, importiertem Zustand, Verfügbarkeit, Aktivitäts-E-Mail und NULL sowie dauerhaftem Rückgabeverhalten erkennen. Halte den Test unabhängig, indem er sich nur auf seine Argumente und temporären Pfade stützt.

Aufgabe

Vervollständige die eine Funktion test_complete_cli_workflow(tmp_path, capsys) in tests/test_lending.py.

Erstelle Datenbank und CSV-Datei unterhalb von tmp_path, rufe alle acht Erfolgsschritte über lending.main in der dokumentierten Reihenfolge auf, vergleiche jeden Status, jeden stdout-Block und leeres stderr und öffne dann mit sqlite3 erneut, um die exakten dauerhaften Anzahlen und die Rückgabebeschriftung zu belegen. Lass tests/test_catalog.py unverändert.