def return_loan(actor, loan, audit): permitted = actor is not None and actor == loan["owner"] and loan["state"] == "open" audit.append({"action": "return", "outcome": "allowed" if permitted else "denied"}) if not permitted: return False loan["state"] = "returned" return True loan = {"owner": "borrower-18", "state": "open"} audit = [] assert not return_loan(None, loan, audit) assert not return_loan("borrower-19", loan, audit) assert loan["state"] == "open" assert return_loan("borrower-18", loan, audit) assert not return_loan("borrower-18", loan, audit) assert loan["state"] == "returned" assert [event["outcome"] for event in audit] == ["denied", "denied", "allowed", "denied"] assert all(set(event) == {"action", "outcome"} for event in audit) print("anonymous denied; other denied; owner returned; repeat denied")