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