0%

Eindproject: een uitleenprogramma dat gegevens bewaart · eindproject

Eindproject: Eindproject: bewijs het volledige uitleenprogramma

De opdrachtfuncties werken afzonderlijk. Bewijs nu dat ze één traject vormen dat gegevens bewaart wanneer elke bewerking hetzelfde expliciete databasepad ontvangt. Eén publieke test kan dat scenario bewijzen zonder de acht gerichte databasetests die je al hebt te vervangen.

Open tests/test_lending.py. Het bevat precies één onvoltooide test, test_complete_cli_workflow(tmp_path, capsys). Laat tests/test_catalog.py ongewijzigd. Die acht tests beschermen nog steeds de schemavoorbereiding, query’s, verwijzende sleutels, uitleenregels, blijvende opslag na commit, rollback en herhaling van imports en gecontroleerde migratie.

Maak binnen de nieuwe test database_path en csv_path onder tmp_path. Schrijf de exacte tekst met drie rijen uit data/items.csv naar de tijdelijke CSV. Roep daarna lending.main in deze volgorde aan:

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

Gebruik dezelfde argumenten als Run: lid 17, uitlening 501, voorwerp 1, uitleentekst 2026-08-26 en terugbrengtekst 2026-08-27. Controleer na elke aanroep met een assertion status 0, lees capsys en vergelijk de volledige stdout voor die opdracht. Vereis elke keer lege stderr. Door de opgevangen uitvoer na elke aanroep te lezen, voorkom je dat de uitvoer van de ene opdracht verborgen raakt in die van een andere.

De uitvoer van available moet het uitgeleende voorwerp 1 weglaten. De eerste uitvoer van activity moet het geregistreerde e-mailadres bevatten en de terugbrengwaarde van de actieve uitlening als NULL weergeven. Na teruggave moet de tweede uitvoer van activity 2026-08-27 in dezelfde uitleenrij tonen.

Open ten slotte een nieuwe sqlite3-verbinding naar database_path. Vergelijk schemaversie 2, aantallen van drie voorwerpen, één lid en één uitlening, plus de opgeslagen terugbrengtekst van uitlening 501. Sluit die verbinding in finally. Deze laatste leesopdracht bewijst dat de toestand van het traject na het sluiten van de opdrachtverbindingen is blijven bestaan.

Druk op Run. demo.py voert hetzelfde traject uit in één tijdelijke map en drukt daarna dit af:

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

Hier demonstreert Run het traject via demo.py; Submit controleert je testsuite. De afzonderlijke werkbalkactie Run project tests gebruikt de kleine testrunner van Python Land, die geen pytest-fixtures zoals tmp_path en capsys meegeeft. De volgende les, Download je project en voer het lokaal uit, geeft de opdrachten om beide testbestanden met pytest op je computer uit te voeren.

Een betrouwbare suite kan beide testbestanden twee keer uitvoeren vanuit afzonderlijke schone mappen. De ene CLI-test moet ook realistische regressies ontdekken in statussen, kopregels, geïmporteerde toestand, beschikbaarheid, e-mail en NULL in activity en blijvend opgeslagen teruggaven. Houd de test onafhankelijk door alleen op de eigen argumenten en tijdelijke paden te vertrouwen.

Opdracht

Maak de ene functie test_complete_cli_workflow(tmp_path, capsys) in tests/test_lending.py af.

Maak de database en CSV onder tmp_path; voer alle acht de successtappen via lending.main uit in de beschreven volgorde; vergelijk elke status, elk stdout-blok en lege stderr; open daarna opnieuw met sqlite3 om de exacte blijvend opgeslagen aantallen en terugbrengtekst te bewijzen. Laat tests/test_catalog.py ongewijzigd.