예제 #1
0
def test_tenant_update_apartment_fail(
    client: TestClient,
    session: Session,
    landlord_auth_header: dict,
    tenant_auth_header: dict,
    application: Application,
):
    application.create_amenity(session, "first")
    application.create_amenity(session, "second")
    assert not session.query(Apartment).count()
    response = client.post("/api/apartments/",
                           json=apartment_create_data,
                           headers=landlord_auth_header)
    assert response.status_code == 201
    assert session.query(Apartment).count() == 1
    apartment = session.query(Apartment).all()[0]
    assert apartment.name != "updated name"
    assert apartment.amenities == []
    response = client.put(
        f"/api/apartments/{apartment.id}",
        json={
            "name": "updated name",
            "amenities": ["first", "second"]
        },
        headers=tenant_auth_header,
    )
    assert response.status_code == 403
예제 #2
0
def test_create_exisiting_amenity_fail(session: Session,
                                       application: Application):
    assert not session.query(Amenity).count()
    application.create_amenity(session, "hello")
    assert session.query(Amenity).count() == 1
    amenity = session.query(Amenity).all()[0]
    assert amenity.title == "hello"
    with pytest.raises(ApplicationError):
        application.create_amenity(session, "hello")
예제 #3
0
def test_update_apartment_ok(session: Session, landlord: Landlord,
                             application: Application):
    application.create_amenity(session, "first")
    amenity1 = session.query(Amenity).filter(Amenity.title == "first").first()
    assert not session.query(Apartment).count()
    application.create_apartment(
        session,
        landlord,
        name="Apartment Name",
        monthly_price=450.70,
        utilities_price=320.15,
        address="some address",
        country="Nigeria",
        state="Kano",
        city="Kano",
        description="Apartment description",
        house_type=HouseType.DUPLEX,
        bedrooms=3,
        bathrooms=4,
        size=1200,
        longitude=1324.5,
        latitude=324.6,
        furnish_type=FurnishType.UNFURNISHED,
        available_from=datetime.now().date(),
        available_to=datetime.now().date(),
        amenities=[amenity1],
    )
    assert session.query(Apartment).count() == 1
    apartment: Apartment = session.query(Apartment).all()[0]
    apartment.landlord == landlord
    apartment.name == "Apartment Name"
    apartment.monthly_price == 450.7
    apartment.utilities_price == 320.15
    apartment.address == "some address"
    apartment.country == "Nigeria"
    apartment.state == "Kano"
    apartment.city == "Kano"
    apartment.description == "Apartment description"
    apartment.house_type == HouseType.DUPLEX,
    apartment.bedrooms == 3
    apartment.bathrooms == 4
    apartment.size == 1200
    apartment.furnish_type == FurnishType.UNFURNISHED
    apartment.available_from == datetime.now().date()
    apartment.available_to == datetime.now().date(),
    apartment.amenities == [amenity1]
    application.create_amenity(session, "pool")
    application.create_amenity(session, "barn")
    assert session.query(Amenity).count() == 3
    amenities = session.query(Amenity).all()
    application.update_apartment(session,
                                 apartment.landlord,
                                 apartment.id,
                                 amenities=amenities)
    xapartment = application.apartment_service.get(session, apartment.id)
    assert xapartment.amenities == amenities
예제 #4
0
def test_tenant_create_apartments_fail(
    client: TestClient,
    session: Session,
    tenant_auth_header: dict,
    application: Application,
):
    application.create_amenity(session, "first")
    application.create_amenity(session, "second")
    create_data = {**apartment_create_data, "amenities": ["first", "second"]}
    assert not session.query(Apartment).count()
    response = client.post("/api/apartments/",
                           json=create_data,
                           headers=tenant_auth_header)
    assert response.status_code == 403
예제 #5
0
def test_fetch_amenities(
    user,
    user_auth_header,
    session: Session,
    client: TestClient,
    application: Application,
):
    application.create_amenity(session, "pool")
    application.create_amenity(session, "barn")
    assert session.query(Amenity).count() == 2
    response = client.get("/api/amenities/", headers=user_auth_header)
    assert response.status_code == 200
    result = response.json()
    assert isinstance(result, list)
    assert len(result) == 2
예제 #6
0
def test_create_apartment_with_negative_size_fail(
    client: TestClient,
    session: Session,
    landlord_auth_header: dict,
    application: Application,
):
    application.create_amenity(session, "first")
    application.create_amenity(session, "second")
    create_data = {
        **apartment_create_data,
        "size": 0,
        "amenities": ["first", "second"],
    }
    assert not session.query(Apartment).count()
    response = client.post("/api/apartments/",
                           json=create_data,
                           headers=landlord_auth_header)
    assert response.status_code == 422
예제 #7
0
async def create_amenity(
        data: AmenityCreateSchema,
        admin: Admin = Depends(dependencies.get_current_admin_user),
        application: Application = Depends(dependencies.get_application),
        session: Session = Depends(dependencies.get_database_session),
):
    try:
        return application.create_amenity(session, **data.dict())
    except ApplicationError as e:
        raise HTTPException(401, str(e))
예제 #8
0
def test_landlord_update_apartments_ok(
    client: TestClient,
    session: Session,
    landlord_auth_header: dict,
    application: Application,
):
    application.create_amenity(session, "first")
    application.create_amenity(session, "second")
    assert not session.query(Apartment).count()
    response = client.post("/api/apartments/",
                           json=apartment_create_data,
                           headers=landlord_auth_header)
    assert response.status_code == 201
    assert session.query(Apartment).count() == 1
    apartment = session.query(Apartment).all()[0]
    assert apartment.name != "updated name"
    assert apartment.amenities == []
    response = client.put(
        f"/api/apartments/{apartment.id}",
        json={
            "name": "updated name",
            "amenities": ["first", "second"]
        },
        headers=landlord_auth_header,
    )
    result = response.json()
    expected_keys = [
        *apartment_create_data.keys(), "id", "amenityTitles", "totalPrice"
    ]
    expected_keys.remove("amenities")
    expected_keys.remove("longitude")
    expected_keys.remove("latitude")
    assert all(key in result for key in expected_keys)
    assert response.status_code == 200
    session.expire_all()
    assert session.query(Apartment).count() == 1
    apartment = session.query(Apartment).all()[0]
    assert apartment.name == "updated name"
    assert len(apartment.amenities) == 2
예제 #9
0
def test_landlord_create_apartments_ok(
    client: TestClient,
    session: Session,
    landlord_auth_header: dict,
    application: Application,
):
    application.create_amenity(session, "first")
    application.create_amenity(session, "second")
    create_data = {**apartment_create_data, "amenities": ["first", "second"]}
    assert not session.query(Apartment).count()
    response = client.post("/api/apartments/",
                           json=create_data,
                           headers=landlord_auth_header)
    result = response.json()
    expected_keys = [
        *apartment_create_data.keys(), "id", "amenityTitles", "totalPrice"
    ]
    expected_keys.remove("amenities")
    expected_keys.remove("longitude")
    expected_keys.remove("latitude")
    assert all(key in result for key in expected_keys)
    assert isinstance(result, dict)
    assert response.status_code == 201
    assert session.query(Apartment).count() == 1
예제 #10
0
def test_create_amenity_ok(session: Session, application: Application):
    assert not session.query(Amenity).count()
    application.create_amenity(session, "hello")
    assert session.query(Amenity).count() == 1
    amenity = session.query(Amenity).all()[0]
    assert amenity.title == "hello"