def test_another_tenant_apply_for_completed_apartment_application_fail( another_tenant: Tenant, session: Session, completed_apartment_application: ApartmentApplication, application: Application, ): with pytest.raises(ApplicationError): application.apply_for_apartment( session, another_tenant, completed_apartment_application.apartment)
def test_tenant_apply_for_apartment(application: Application, tenant: Tenant, apartment: Apartment, session: Session): assert not session.query(ApartmentApplication).count() application.apply_for_apartment(session, tenant, apartment) assert session.query(ApartmentApplication).count() apartment_application = session.query(ApartmentApplication).all()[0] assert apartment_application.tenant == tenant assert apartment_application.apartment == apartment assert apartment_application.status == ApartmentApplicationStatus.NEW
def test_tenant_apply_for_already_awarded_apartment_fail( application: Application, awarded_apartment_application: ApartmentApplication, another_tenant: Tenant, session: Session, ): assert awarded_apartment_application.status == ApartmentApplicationStatus.AWARDED with pytest.raises(ApplicationError): application.apply_for_apartment( session, another_tenant, awarded_apartment_application.apartment)
def test_tenant_apply_for_same_apartment_again_fail(application: Application, tenant: Tenant, apartment: Apartment, session: Session): application.apply_for_apartment(session, tenant, apartment) apartment_application = session.query(ApartmentApplication).all()[0] assert apartment_application.tenant == tenant assert apartment_application.apartment == apartment assert apartment_application.status == ApartmentApplicationStatus.NEW with pytest.raises(ApplicationError): application.apply_for_apartment(session, tenant, apartment)
def apply( apartment_id: UUID, tenant: Tenant = Depends(deps.get_current_tenant), session: Session = Depends(deps.get_database_session), application: Application = Depends(deps.get_application), ): try: apartment = application.apartment_service.get(session, apartment_id) if not apartment: raise HTTPException(404, "Apartment not found") return application.apply_for_apartment(session, tenant, apartment) except ApplicationError as e: raise HTTPException(400, str(e))
def new_apartment_applications( session: Session, application: Application, apartment: Apartment) -> List[ApartmentApplication]: applications = [] for i in range(5): tenant = application.create_tenant( session, f"fname{i}", f"lname{i}", datetime.now().date(), f"jdoe{i}#email.com", f"012345{i}", f"password{i}", ) applications.append( application.apply_for_apartment(session, tenant, apartment)) return applications
def test_tenant_apply_for_apartment_if_previous_one_failed_ok( session: Session, application: Application, failed_apartment_application: ApartmentApplication, ): assert failed_apartment_application.status == ApartmentApplicationStatus.FAILED assert (session.query(ApartmentApplication).filter( ApartmentApplication.tenant_id == failed_apartment_application.tenant_id).filter( ApartmentApplication.apartment_id == failed_apartment_application.apartment_id).count() == 1) second_app = application.apply_for_apartment( session, failed_apartment_application.tenant, failed_apartment_application.apartment, ) session.expire_all() assert (session.query(ApartmentApplication).filter( ApartmentApplication.tenant_id == failed_apartment_application.tenant_id).filter( ApartmentApplication.apartment_id == failed_apartment_application.apartment_id).count() == 2) assert (session.query(ApartmentApplication).get( second_app.id).status == ApartmentApplicationStatus.NEW)