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]
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
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
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
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
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
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
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
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
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))
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
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]