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"]
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)
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
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"]
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, )
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()