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_consider_apartment_application_not_in_new_status_fail( application: Application, session: Session, awarded_apartment_application: ApartmentApplication, ): assert awarded_apartment_application.status == ApartmentApplicationStatus.AWARDED with pytest.raises(ApplicationError): application.consider_apartment_application( session, awarded_apartment_application)
def consider_application( application_id: UUID, background_tasks: BackgroundTasks, landlord: Landlord = Depends(deps.get_current_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") email_message = f"Your application for apartment {apartment_application.apartment.name} has been considered. You stand a chance of being awarded this apartment" background_tasks.add_task( send_email, to=apartment_application.tenant.email, subject="Digirent Apartment Application Notification", message=email_message, ) return app.consider_apartment_application(session, apartment_application) except ApplicationError as e: raise HTTPException(400, str(e))
def test_landlord_start_move_in_process_for_another_apartment_application_when_there_is_an_ongoing_move_in_process_fail( application: Application, session: Session, process_apartment_application: ApartmentApplication, another_new_apartment_application: ApartmentApplication, ): assert another_new_apartment_application.id != process_apartment_application.id assert process_apartment_application.status == ApartmentApplicationStatus.PROCESSING assert another_new_apartment_application.status == ApartmentApplicationStatus.NEW application.consider_apartment_application( session, another_new_apartment_application) assert (another_new_apartment_application.status == ApartmentApplicationStatus.CONSIDERED) with pytest.raises(ApplicationError): application.process_apartment_application( session, another_new_apartment_application)
def test_landlord_consider_a_tenant_application_ok( new_apartment_application: ApartmentApplication, application: Application, session: Session, ): tenant_application = application.consider_apartment_application( session, new_apartment_application) assert tenant_application.status == ApartmentApplicationStatus.CONSIDERED tenant_application_db = (session.query(ApartmentApplication).filter_by( tenant_id=new_apartment_application.tenant.id).filter_by( apartment_id=new_apartment_application.apartment.id).one_or_none()) assert tenant_application_db.status == ApartmentApplicationStatus.CONSIDERED