def test_all_other_applications_rejected_on_application_completed_ok( session: Session, application: Application, new_apartment_applications: List[ApartmentApplication], ): assert len(new_apartment_applications) == 5 assert all(app.status == ApartmentApplicationStatus.NEW for app in new_apartment_applications) app1, app2, app3, app4, app5 = new_apartment_applications application.reject_apartment_application(session, app1) application.consider_apartment_application(session, app2) application.consider_apartment_application(session, app3) application.process_apartment_application(session, app3) application.consider_apartment_application(session, app4) application.consider_apartment_application(session, app5) assert app1.status == ApartmentApplicationStatus.REJECTED assert all(app.status == ApartmentApplicationStatus.CONSIDERED for app in (app2, app4, app5)) assert app3.status == ApartmentApplicationStatus.PROCESSING application.tenant_signed_contract(session, app3, datetime.now()) application.landlord_signed_contract(session, app3, datetime.now()) assert app1.status == ApartmentApplicationStatus.REJECTED assert all(app.status == ApartmentApplicationStatus.CONSIDERED for app in (app2, app4, app5)) assert app3.status == ApartmentApplicationStatus.AWARDED application.provide_keys_to_tenant(session, app3) application.tenant_receive_keys(session, app3) assert all(app.status == ApartmentApplicationStatus.REJECTED for app in (app1, app2, app4, app5)) assert app3.status == ApartmentApplicationStatus.COMPLETED
def test_landlord_provide_keys_for_contract_not_signed_fail( process_apartment_application: ApartmentApplication, session: Session, application: Application, ): assert process_apartment_application.status == ApartmentApplicationStatus.PROCESSING with pytest.raises(ApplicationError): application.provide_keys_to_tenant(session, process_apartment_application)
def completed_apartment_application( awarded_apartment_application: ApartmentApplication, application: Application, session: Session, ): application.provide_keys_to_tenant(session, awarded_apartment_application) application.tenant_receive_keys(session, awarded_apartment_application) assert awarded_apartment_application.status == ApartmentApplicationStatus.COMPLETED return awarded_apartment_application
def test_tenant_accept_keys_from_landlord_on_awarded_application_ok( application: Application, awarded_apartment_application: ApartmentApplication, session: Session, ): contract: Contract = awarded_apartment_application.contract assert not contract.tenant_has_received_keys assert contract.status == ContractStatus.SIGNED application.provide_keys_to_tenant(session, awarded_apartment_application) application.tenant_receive_keys(session, awarded_apartment_application) apartment_application = session.query(ApartmentApplication).get( awarded_apartment_application.id) assert apartment_application.contract.tenant_has_received_keys assert apartment_application.contract.status == ContractStatus.COMPLETED
def test_landlord_provide_keys_to_tenant_on_awarded_application_ok( application: Application, awarded_apartment_application: ApartmentApplication, session: Session, ): contract: Contract = awarded_apartment_application.contract assert not contract.landlord_has_provided_keys assert contract.status == ContractStatus.SIGNED application.provide_keys_to_tenant(session, awarded_apartment_application) apartment_application = session.query(ApartmentApplication).get( awarded_apartment_application.id) assert apartment_application.contract.landlord_has_provided_keys assert apartment_application.contract.status == ContractStatus.SIGNED
def landlord_provide_keys_to_tenant( application_id: UUID, landlord: Landlord = Depends(deps.get_current_active_landlord), session: Session = Depends(deps.get_database_session), app: Application = Depends(deps.get_application), ): try: apartment_application: ApartmentApplication = ( session.query(ApartmentApplication).join( Apartment, ApartmentApplication.apartment_id == Apartment.id).filter( ApartmentApplication.id == application_id).filter( Apartment.landlord_id == landlord.id).one_or_none()) if not apartment_application: raise HTTPException(404, "application not found") return app.provide_keys_to_tenant(session, apartment_application) except ApplicationError as e: raise HTTPException(400, str(e))