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_tenant_accept_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.tenant_receive_keys(session, process_apartment_application)
def test_tenant_accept_keys_when_landlord_has_not_provided_keys_fail( awarded_apartment_application: ApartmentApplication, session: Session, application: Application, ): assert awarded_apartment_application.status == ApartmentApplicationStatus.AWARDED assert not awarded_apartment_application.contract.landlord_has_provided_keys with pytest.raises(ApplicationError): application.tenant_receive_keys(session, awarded_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 tenant_received_keys( application_id: UUID, tenant: Tenant = Depends(deps.get_current_active_tenant), session: Session = Depends(deps.get_database_session), app: Application = Depends(deps.get_application), ): try: apartment_application: ApartmentApplication = ( session.query(ApartmentApplication).filter( ApartmentApplication.id == application_id).filter( ApartmentApplication.tenant_id == tenant.id).one_or_none()) if not apartment_application: raise HTTPException(404, "application not found") return app.tenant_receive_keys(session, apartment_application) except ApplicationError as e: raise HTTPException(400, str(e))