Exemple #1
0
def test_update_contract_by_user(client: TestClient,
                                 normal_user_token_headers: dict,
                                 db: Session) -> None:
    r = client.get(f"{settings.API_V1_STR}/users/me",
                   headers=normal_user_token_headers)
    user_id = r.json()["id"]
    contract = create_random_contract(db, user_id=user_id)
    date_today = date.today()
    data = {
        "weekdays": random_weekdays(),
        "weeks": 44,
        "hours": 40.0,
        "price_hour_standard": 3.5,
        "price_hour_extra": 3.8,
        "price_fees": 3.08,
        "price_meals": 4.0,
        "start": str(date_today),
        "end": str(date_today + relativedelta(months=+12, days=-1))
    }
    response = client.put(f"{settings.API_V1_STR}/contracts/{contract.id}",
                          headers=normal_user_token_headers,
                          json=data)
    assert response.status_code == 200
    content = response.json()
    assert content["weekdays"] == data["weekdays"]
    assert content["weeks"] == data["weeks"]
    assert content["hours"] == data["hours"]
    assert content["price_hour_standard"] == data["price_hour_standard"]
    assert content["price_hour_extra"] == data["price_hour_extra"]
    assert content["price_fees"] == data["price_fees"]
    assert content["price_meals"] == data["price_meals"]
    assert content["start"] == data["start"]
    assert content["end"] == data["end"]
def test_create_working_day_by_user(client: TestClient,
                                    normal_user_token_headers: dict,
                                    db: Session) -> None:
    r = client.get(f"{settings.API_V1_STR}/users/me",
                   headers=normal_user_token_headers)
    user_id = r.json()["id"]
    contract = create_random_contract(db, user_id=user_id)
    day_type = create_random_day_type(db)
    data = {
        "day": str(random_date_range(contract.start, contract.end)),
        "start": str(random_time_range(8, 12)),
        "end": str(random_time_range(14, 19))
    }
    response = client.post(
        f"{settings.API_V1_STR}/working_days/" +
        f"?day_type_id={day_type.id}&contract_id={contract.id}",
        headers=normal_user_token_headers,
        json=data,
    )
    assert response.status_code == 200
    content = response.json()
    assert "id" in content
    assert content["day_type_id"] == day_type.id
    assert content["contract_id"] == contract.id
    assert content["day"] == data["day"]
    assert content["start"] == data["start"]
    assert content["end"] == data["end"]
Exemple #3
0
def test_read_contract_by_user(client: TestClient,
                               normal_user_token_headers: dict,
                               db: Session) -> None:
    r = client.get(f"{settings.API_V1_STR}/users/me",
                   headers=normal_user_token_headers)
    user_id = r.json()["id"]
    contract = create_random_contract(db, user_id=user_id)
    response = client.get(
        f"{settings.API_V1_STR}/contracts/{contract.id}",
        headers=normal_user_token_headers,
    )
    assert response.status_code == 200
    content = response.json()
    assert "id" in content
    assert "user_id" in content
    assert "nanny_id" in content
    assert content["weekdays"] == contract.weekdays
    assert content["weeks"] == contract.weeks
    assert content["hours"] == contract.hours
    assert content["price_hour_standard"] == contract.price_hour_standard
    assert content["price_hour_extra"] == contract.price_hour_extra
    assert content["price_fees"] == contract.price_fees
    assert content["price_meals"] == contract.price_meals
    assert content["start"] == str(contract.start)
    assert content["end"] == str(contract.end)
Exemple #4
0
def test_delete_contract_by_another_user(client: TestClient,
                                         normal_user_token_headers: dict,
                                         db: Session) -> None:
    contract = create_random_contract(db)
    response = client.delete(
        f"{settings.API_V1_STR}/contracts/{contract.id}",
        headers=normal_user_token_headers,
    )
    assert response.status_code == 400
Exemple #5
0
def test_update_contract_attach_nanny_by_another_user(
        client: TestClient, normal_user_token_headers: dict,
        db: Session) -> None:
    contract = create_random_contract(db, has_nanny=False)
    assert contract.nanny_id == None
    assert not contract.nanny_id

    nanny = create_random_user(db)
    response = client.put(
        f"{settings.API_V1_STR}/contracts/{contract.id}/nanny",
        headers=normal_user_token_headers,
        json=f"{nanny.id}")
    assert response.status_code == 400
def test_update_contract_by_another_user(client: TestClient,
                                         normal_user_token_headers: dict,
                                         db: Session) -> None:
    contract = create_random_contract(db)
    date_today = date.today()
    data = {
        "start": str(date_today),
        "end": str(date_today + relativedelta(months=+12, days=-1))
    }
    response = client.put(f"{settings.API_V1_STR}/contracts/{contract.id}",
                          headers=normal_user_token_headers,
                          json=data)
    assert response.status_code == 400
def test_read_contract_by_admin(client: TestClient,
                                superuser_token_headers: dict,
                                db: Session) -> None:
    contract = create_random_contract(db)
    response = client.get(
        f"{settings.API_V1_STR}/contracts/{contract.id}",
        headers=superuser_token_headers,
    )
    assert response.status_code == 200
    content = response.json()
    assert "id" in content
    assert "id" in content["user"]
    assert content["start"] == str(contract.start)
    assert content["end"] == str(contract.end)
def test_delete_contract_by_user(client: TestClient,
                                 normal_user_token_headers: dict,
                                 db: Session) -> None:
    r = client.get(f"{settings.API_V1_STR}/users/me",
                   headers=normal_user_token_headers)
    user_id = r.json()["id"]
    contract = create_random_contract(db, user_id=user_id)
    response = client.delete(f"{settings.API_V1_STR}/contracts/{contract.id}",
                             headers=normal_user_token_headers)
    assert response.status_code == 200
    content = response.json()
    assert "id" in content
    assert content["start"] == str(contract.start)
    assert content["end"] == str(contract.end)
def test_update_working_day_by_another_user(client: TestClient,
                                            normal_user_token_headers: dict,
                                            db: Session) -> None:
    contract = create_random_contract(db)
    working_day = create_random_working_day(db, contract_id=contract.id)
    data = {
        "day": str(random_date_range(contract.start, contract.end)),
        "start": str(random_time_range(8, 12)),
        "end": str(random_time_range(14, 19))
    }
    response = client.put(
        f"{settings.API_V1_STR}/working_days/{working_day.id}",
        headers=normal_user_token_headers,
        json=data)
    assert response.status_code == 400
def test_read_working_day_from_contract_by_month_by_user(
        client: TestClient, normal_user_token_headers: dict,
        db: Session) -> None:
    r = client.get(f"{settings.API_V1_STR}/users/me",
                   headers=normal_user_token_headers)
    user_id = r.json()["id"]
    contract = create_random_contract(db, user_id=user_id)
    working_day = create_random_working_day(db, contract_id=contract.id)
    month_date = str(contract.start)
    year = str(month_date).split("-")[0]
    month = str(month_date).split("-")[1]

    response = client.get(
        f"{settings.API_V1_STR}/contracts/{contract.id}/working_days/{working_day.id}",
        headers=normal_user_token_headers,
    )
def test_update_contract_by_admin(client: TestClient,
                                  superuser_token_headers: dict,
                                  db: Session) -> None:
    contract = create_random_contract(db)
    date_today = date.today()
    data = {
        "start": str(date_today),
        "end": str(date_today + relativedelta(months=+12, days=-1))
    }
    response = client.put(f"{settings.API_V1_STR}/contracts/{contract.id}",
                          headers=superuser_token_headers,
                          json=data)
    assert response.status_code == 200
    content = response.json()
    assert content["start"] == data["start"]
    assert content["end"] == data["end"]
Exemple #12
0
def test_update_contract_attach_nanny_by_admin(client: TestClient,
                                               superuser_token_headers: dict,
                                               db: Session) -> None:
    contract = create_random_contract(db)

    nanny = create_random_user(db)
    response = client.put(
        f"{settings.API_V1_STR}/contracts/{contract.id}/nanny",
        headers=superuser_token_headers,
        json=f"{nanny.id}")
    assert response.status_code == 200
    content = response.json()
    assert "id" in content
    assert "user_id" in content
    assert "nanny_id" in content
    assert content["nanny_id"] == nanny.id
    assert content["weekdays"] == contract.weekdays
    assert content["weeks"] == contract.weeks
    assert content["hours"] == contract.hours
    assert content["price_hour_standard"] == contract.price_hour_standard
    assert content["price_hour_extra"] == contract.price_hour_extra
    assert content["price_fees"] == contract.price_fees
    assert content["price_meals"] == contract.price_meals
    assert content["start"] == str(contract.start)
    assert content["end"] == str(contract.end)

    response = client.get(
        f"{settings.API_V1_STR}/contracts/{contract.id}",
        headers=superuser_token_headers,
    )
    assert response.status_code == 200
    content = response.json()
    assert "id" in content
    assert "user_id" in content
    assert "nanny_id" in content
    assert content["nanny_id"] == nanny.id
    assert content["weekdays"] == contract.weekdays
    assert content["weeks"] == contract.weeks
    assert content["hours"] == contract.hours
    assert content["price_hour_standard"] == contract.price_hour_standard
    assert content["price_hour_extra"] == contract.price_hour_extra
    assert content["price_fees"] == contract.price_fees
    assert content["price_meals"] == contract.price_meals
    assert content["start"] == str(contract.start)
    assert content["end"] == str(contract.end)
def test_create_working_day_by_another_user(client: TestClient,
                                            normal_user_token_headers: dict,
                                            db: Session) -> None:
    user = create_random_user(db)
    contract = create_random_contract(db, user_id=user.id)
    day_type = create_random_day_type(db)
    data = {
        "day": str(random_date_range(contract.start, contract.end)),
        "start": str(random_time_range(8, 12)),
        "end": str(random_time_range(14, 19))
    }
    response = client.post(
        f"{settings.API_V1_STR}/working_days/" +
        f"?day_type_id={day_type.id}&contract_id={contract.id}",
        headers=normal_user_token_headers,
        json=data,
    )
    assert response.status_code == 400
def test_update_contract_by_user(client: TestClient,
                                 normal_user_token_headers: dict,
                                 db: Session) -> None:
    r = client.get(f"{settings.API_V1_STR}/users/me",
                   headers=normal_user_token_headers)
    user_id = r.json()["id"]
    contract = create_random_contract(db, user_id=user_id)
    date_today = date.today()
    data = {
        "start": str(date_today),
        "end": str(date_today + relativedelta(months=+12, days=-1))
    }
    response = client.put(f"{settings.API_V1_STR}/contracts/{contract.id}",
                          headers=normal_user_token_headers,
                          json=data)
    assert response.status_code == 200
    content = response.json()
    assert content["start"] == data["start"]
    assert content["end"] == data["end"]
def create_random_working_day(
    db: Session,
    user_id: int = None,
    nanny_id: int = None,
    day_type_id: int = None,
    contract_id: int = None,
    day: str = None,
) -> models.WorkingDay:
    if not user_id:
        user = create_random_user(db)
        user_id = user.id
    if not nanny_id:
        nanny = create_random_user(db)
        nanny_id = nanny.id
    if day_type_id:
        day_type = crud.day_type.get(db, id=day_type_id)
    else:
        day_type = create_random_day_type(db)
    if contract_id:
        contract = crud.contract.get(db, id=contract_id)
    else:
        contract = create_random_contract(db,
                                          user_id=user.id,
                                          nanny_id=nanny.id)
    if not day:
        day = random_date_range(contract.start, contract.end)

    start_time = random_time_range(8, 12)
    start = str(start_time)
    end_time = random_time_range(14, 19)
    end = str(end_time)

    working_day_in = WorkingDayCreate(
        day=day,
        start=start,
        end=end,
    )
    return crud.working_day.create_with_owner(
        db=db,
        obj_in=working_day_in,
        day_type_id=day_type.id,
        contract_id=contract.id,
    )
Exemple #16
0
def test_update_contract_by_another_user(client: TestClient,
                                         normal_user_token_headers: dict,
                                         db: Session) -> None:
    contract = create_random_contract(db)
    date_today = date.today()
    data = {
        "weekdays": random_weekdays(),
        "weeks": 44,
        "hours": 40.0,
        "price_hour_standard": 3.5,
        "price_hour_extra": 3.8,
        "price_fees": 3.08,
        "price_meals": 4.0,
        "start": str(date_today),
        "end": str(date_today + relativedelta(months=+12, days=-1))
    }
    response = client.put(f"{settings.API_V1_STR}/contracts/{contract.id}",
                          headers=normal_user_token_headers,
                          json=data)
    assert response.status_code == 400
def test_update_working_day_by_admin(client: TestClient,
                                     superuser_token_headers: dict,
                                     db: Session) -> None:
    contract = create_random_contract(db)
    working_day = create_random_working_day(db, contract_id=contract.id)
    data = {
        "day": str(random_date_range(contract.start, contract.end)),
        "start": str(random_time_range(8, 12)),
        "end": str(random_time_range(14, 19))
    }
    response = client.put(
        f"{settings.API_V1_STR}/working_days/{working_day.id}",
        headers=superuser_token_headers,
        json=data)
    assert response.status_code == 200
    content = response.json()
    assert "id" in content
    assert "day_type_id" in content
    assert "contract_id" in content
    assert content["day"] == data["day"]
    assert content["start"] == data["start"]
    assert content["end"] == data["end"]
def test_delete_working_day_by_user(client: TestClient,
                                    normal_user_token_headers: dict,
                                    db: Session) -> None:
    r = client.get(f"{settings.API_V1_STR}/users/me",
                   headers=normal_user_token_headers)
    user_id = r.json()["id"]
    contract = create_random_contract(db, user_id=user_id)
    day_type = create_random_day_type(db)
    working_day = create_random_working_day(db,
                                            day_type_id=day_type.id,
                                            contract_id=contract.id)
    response = client.delete(
        f"{settings.API_V1_STR}/working_days/{working_day.id}",
        headers=normal_user_token_headers,
    )
    assert response.status_code == 200
    content = response.json()
    assert "id" in content
    assert "day_type_id" in content
    assert "contract_id" in content
    assert content["day"] == str(working_day.day)
    assert content["start"] == str(working_day.start)
    assert content["end"] == str(working_day.end)
def test_read_working_days_from_contract_by_month_by_user(
        client: TestClient, normal_user_token_headers: dict,
        db: Session) -> None:
    r = client.get(f"{settings.API_V1_STR}/users/me",
                   headers=normal_user_token_headers)
    user_id = r.json()["id"]
    contract = create_random_contract(db, user_id=user_id)
    working_days = []
    next_days = +1
    working_days.insert(
        0,
        create_random_working_day(db,
                                  contract_id=contract.id,
                                  day=str(contract.start +
                                          relativedelta(days=+next_days * 1))))
    working_days.insert(
        1,
        create_random_working_day(db,
                                  contract_id=contract.id,
                                  day=str(contract.start +
                                          relativedelta(days=+next_days * 2))))
    working_days.insert(
        2,
        create_random_working_day(db,
                                  contract_id=contract.id,
                                  day=str(contract.start +
                                          relativedelta(days=+next_days * 5))))

    # Month N
    month_date = str(contract.start)
    year = str(month_date).split("-")[0]
    month = str(month_date).split("-")[1]

    response = client.get(
        f"{settings.API_V1_STR}/contracts/{contract.id}/working_days?year={year}&month={month}",
        headers=normal_user_token_headers,
    )
    assert response.status_code == 200
    content = response.json()
    assert isinstance(content, list)

    holidays_fra = [
        datetime.strftime(x[0], "%Y-%m-%d")
        for x in holidays.FRA(years=int(year)).items()
        if x[0] >= datetime.strptime(f"{year}-{month}-01", "%Y-%m-%d").date()
        and x[0] < datetime.strptime(f"{year}-{month}-01", "%Y-%m-%d").date() +
        relativedelta(months=+1)
    ]
    weekmask = contract.weekdays
    startDay = datetime.strptime(f"{year}-{month}-01", "%Y-%m-%d").date()
    endDay = datetime.strptime(f"{year}-{month}-01",
                               "%Y-%m-%d").date() + relativedelta(months=+1)
    workingdays_list = [x.day for x in working_days]
    business_days_inherited_pandas = pandas.bdate_range(
        start=startDay,
        end=endDay,
        freq="C",
        weekmask=weekmask,
        holidays=holidays_fra + workingdays_list).format()
    working_days2 = working_days + [dict(day=x) for x in holidays_fra] + [
        dict(day=x) for x in business_days_inherited_pandas
    ]
    assert len(content) == len(working_days2)
    for i in content:
        assert "id" in dict(i).keys()
        assert "day" in dict(i).keys()
        assert "start" in dict(i).keys()
        assert "end" in dict(i).keys()
        assert "contract_id" in dict(i).keys()
        assert "day_type_id" in dict(i).keys()