예제 #1
0
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)
예제 #2
0
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
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
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))
예제 #6
0
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
예제 #7
0
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)