示例#1
0
def create_n_contract_objects(user_object):
    """
    This fixture resembles a contract object factory.
    Shifts are distinguised by id, there is no specific need for the start_stop mechanism.
    Nonetheless we distinguish them by name too.
    :return: Function
    """
    name = "Test Contract{}"
    hours = 20.0
    start_date = datetime.date(2019, 1, 1)
    end_date = datetime.date(2019, 1, 31)

    def create_contracts(start_stop, user):
        return [
            Contract.objects.create(
                name=name.format(i),
                hours=hours,
                start_date=start_date,
                end_date=end_date,
                user=user,
                created_by=user,
                modified_by=user,
            ) for i in range(*start_stop)
        ]

    return create_contracts
def valid_contract_json(user_object):
    """
    This fixture provides a valid (according to the ContractSerializer) JSON dictionary.
    :param user_object:
    :param user_object:
    :return: Dict
    """
    name = "Test Contract"
    minutes = 1200
    start_date = datetime.date(2019, 1, 1).isoformat()
    end_date = datetime.date(2019, 1, 31).isoformat()
    user = str(user_object.id)

    created_at = datetime.datetime(2018, 12, 31, hour=10).isoformat()
    modified_at = created_at

    data = {
        "name": name,
        "minutes": minutes,
        "start_date": start_date,
        "end_date": end_date,
        "user": user,
        "created_by": user,
        "modified_by": user,
        "created_at": created_at,
        "modified_at": modified_at,
        "carryover_target_date": start_date,
        "initial_carryover_minutes": 0,
    }

    return data
def report_update_contract(create_n_contract_objects, report_update_user):
    return create_n_contract_objects(
        (1,),
        report_update_user,
        start_date=datetime.date(2019, 1, 1),
        end_date=datetime.date(2019, 2, 28),
    )[0]
示例#4
0
def valid_contract_json(user_object):
    """
    This fixture provides a valid (according to the ContractSerializer) JSON dictionary.
    :param user_object:
    :param user_object:
    :return: Dict
    """
    name = "Test Contract"
    hours = 20.0
    start_date = datetime.date(2019, 1, 1).isoformat()
    end_date = datetime.date(2019, 1, 31).isoformat()
    user = user_object.id

    created_at = datetime.datetime(2018, 12, 31, hour=10).isoformat()
    modified_at = created_at

    data = {
        "name": name,
        "hours": hours,
        "start_date": start_date,
        "end_date": end_date,
        "user": user,
        "created_by": user,
        "modified_by": user,
        "created_at": created_at,
        "modified_at": modified_at,
    }

    return data
def contract_ending_in_april(create_n_contract_objects, user_object):
    return create_n_contract_objects(
        (1,),
        user_object,
        start_date=datetime.date(2019, 1, 1),
        end_date=datetime.date(2019, 4, 30),
        initial_carryover_minutes=300,
        carryover_target_date=datetime.date(2019, 3, 1),
    )[0]
def contract_locked_shifts(create_n_contract_objects, user_object):
    """
    This fixture provides an a contract, which should have N unlocked not-planned shifts in the first month.
    Those Shifts should trhow an ValidationError during Worktimesheet creation in the next month.
    """
    _start_date = datetime.date(2020, 1, 1)
    _end_date = datetime.date(2020, 2, 29)
    return create_n_contract_objects(
        (1,), start_date=_start_date, end_date=_end_date, user=user_object
    )[0]
def incorrect_carryover_target_date_for_future_contract_json(valid_contract_json):
    """
    This fixture creates an invalid (according to the ContractSerializer) JSON dictionary
    where month_start_clocking date is 1.1.2019 while the contract starts on 1.2.2019.
    :param valid_contract_json:
    :return:
    """
    valid_contract_json["start_date"] = datetime.date(2019, 2, 1).isoformat()
    valid_contract_json["end_date"] = datetime.date(2019, 3, 31).isoformat()
    return valid_contract_json
def non_zero_initial_carryover_minutes_for_future_contract_json(valid_contract_json):
    """
    This fixture creates an invalid (according to the ContractSerializer) JSON dictionary
    where start_carry_over is not timedelta(0) for the contract starting in the future.
    :param valid_contract_json:
    :return:
    """
    valid_contract_json["start_date"] = datetime.date(2019, 2, 1).isoformat()
    valid_contract_json["end_date"] = datetime.date(2019, 3, 31).isoformat()
    valid_contract_json["carryover_target_date"] = datetime.date(2019, 2, 1).isoformat()
    valid_contract_json["initial_carryover_minutes"] = 300
    return valid_contract_json
def end_date_before_months_with_shifts_contract_json(valid_contract_json):
    """
    This fixture creates an invalid, according to the ContractSerializer, JSON dictionary.
    Hereby the end_date is inccorect in such a way that after an update there would exist
    shifts outside of the [start_date, end_date] interval.
    :param valid_contract_json:
    :return: Dict
    """
    start_date = datetime.date(2019, 1, 1)
    end_date = datetime.date(2019, 1, 31)
    valid_contract_json["start_date"] = start_date.isoformat()
    valid_contract_json["end_date"] = end_date.isoformat()
    return valid_contract_json
示例#10
0
def create_n_report_objects():
    """
    This fixture resembles a report object factory.
    Shifts are distinguised by id, there is no specific need for the start_stop mechanism.
    Nonetheless in terms of consistency this mechanism is kept as in the user_conftest.py.
    :return: Function
    """
    month_year = datetime.date(2019, 1, 1)
    hours = datetime.timedelta(0)
    created_at = datetime.datetime(2019, 1, 1, 16).isoformat()
    modified_at = created_at

    def create_reports(start_stop, user, contract, month_year=month_year):
        lst = []
        for i in range(*start_stop):
            report = Report.objects.create(
                month_year=month_year,
                hours=hours,
                contract=contract,
                user=user,
                created_by=user,
                modified_by=user,
                created_at=created_at,
                modified_at=modified_at,
            )
            lst.append(report)

        return lst

    return create_reports
示例#11
0
def contract_start_mid_january(create_n_contract_objects, user_object):
    """
    Provide contract which starts at the 16. of January and ends in february.
    :param create_n_contract_objects:
    :param user_object:
    :return:
    """
    cont = create_n_contract_objects(
        (1,),
        start_date=datetime.date(2020, 1, 16),
        end_date=datetime.date(2020, 2, 29),
        user=user_object,
        carryover_target_date=datetime.date(2020, 1, 1),
    )[0]

    update_reports(cont, datetime.date(2020, 2, 1))  # bring second Report up to date
    return cont
示例#12
0
def contract_end_date_7_months_apart_json(valid_contract_json):
    """
    Set the end_date to be more than 6 months apart from the initial end_date.
    :param valid_contract_json:
    :return:
    """
    valid_contract_json["end_date"] = datetime.date(2019, 7, 31).isoformat()
    return valid_contract_json
示例#13
0
def contract_ending_in_february_json(valid_contract_json):
    """
    Change the enddate to Februaray 28th.
    Testing that the creation of this contract in March won't work.
    :param valid_contract_json:
    :return:
    """
    valid_contract_json["end_date"] = datetime.date(2019, 2, 28)
    return valid_contract_json
示例#14
0
def incorrect_carryover_target_date_contract_json(valid_contract_json):
    """
    This fixture creates an invalid (according to the ContractSerializer) JSON dictionary
    where month_start_clocking date is not in-between start_date and end_date.
    :param valid_contract_json:
    :return:
    """
    valid_contract_json["carryover_target_date"] = datetime.date(2019, 2, 1).isoformat()
    return valid_contract_json
示例#15
0
def end_date_day_incorrect_contract_json(valid_contract_json):
    """
    This fixture creates an invalid according to the ContractSerializer) JSON dictionary
    where the end_date day is invalid.
    :param valid_contract_json:
    :return: Dict
    """
    end_date = datetime.date(2019, 1, 22)
    valid_contract_json["end_date"] = end_date
    return valid_contract_json
示例#16
0
def end_date_before_start_date_contract_json(valid_contract_json):
    """
    This fixture creates an invalid according to the ContractSerializer) JSON dictionary
    where the end_date datetime is before the start_date datetime.
    :param valid_contract_json:
    :return: Dict
    """
    start_date = datetime.date(2019, 2, 1)
    valid_contract_json["start_date"] = start_date
    return valid_contract_json
示例#17
0
def db_get_current_endpoint(create_n_report_objects, user_object,
                            contract_object, report_object):
    """
    This fixture creates two reports for February and March 2019.
    :param create_n_report_objects:
    :param user_object:
    :param contract_object:
    :param report_object:
    :return:
    """
    # create 2 more Reports for February and March
    create_n_report_objects((1, ),
                            user_object,
                            contract_object,
                            month_year=datetime.date(2019, 2, 1))
    create_n_report_objects((1, ),
                            user_object,
                            contract_object,
                            month_year=datetime.date(2019, 3, 1))
示例#18
0
def create_n_contract_objects(user_object):
    """
    This fixture resembles a contract object factory.
    Shifts are distinguised by id, there is no specific need for the start_stop mechanism.
    Nonetheless we distinguish them by name too.
    :return: Function
    """
    name = "Test Contract{}"
    minutes = 1200
    _start_date = datetime.date(2019, 1, 1)
    _end_date = datetime.date(2019, 1, 31)

    def create_contracts(
        start_stop,
        user,
        start_date=_start_date,
        end_date=_end_date,
        initial_carryover_minutes=0,
        carryover_target_date=_start_date,
    ):
        return [
            Contract.objects.create(
                name=name.format(i),
                minutes=minutes,
                start_date=start_date,
                end_date=end_date,
                initial_carryover_minutes=initial_carryover_minutes,
                carryover_target_date=carryover_target_date,
                user=user,
                created_by=user,
                modified_by=user,
            )
            for i in range(*start_stop)
        ]

    return create_contracts
示例#19
0
def contract_ending_in_february_test_update_version(
    create_n_contract_objects, user_object
):
    end_date = datetime.date(2019, 2, 28)
    return create_n_contract_objects((1,), user_object, end_date=end_date)[0]