Beispiel #1
0
 def test_calculate_single_labour_costs_7(self):
     parser = ShiftParser()
     assert parser.calculate_single_labour_costs(example_7) == {
         '10:00': 9.999999999999998,
         '13:00': 9.999999999999998,
         '14:00': 9.999999999999998,
         '15:00': 9.999999999999998,
     }
Beispiel #2
0
 def test_calculate_single_labour_costs_1(self):
     parser = ShiftParser()
     assert parser.calculate_single_labour_costs(example_2) == {
         '18:00': 6.000000000000003,
         '19:00': 11.99999999999999,
         '20:00': 11.99999999999999,
         '21:00': 11.99999999999999,
         '22:00': 11.99999999999999,
     }
Beispiel #3
0
 def test_calculate_single_labour_costs_4(self):
     parser = ShiftParser()
     assert parser.calculate_single_labour_costs(example_4) == {
         '09:00': 9.999999999999998,
         '10:00': 9.999999999999998,
         '11:00': 9.999999999999998,
         '12:00': 9.999999999999998,
         '13:00': 9.999999999999998,
         '14:00': 9.999999999999998,
         '16:00': 9.999999999999998,
         '17:00': 9.999999999999998,
     }
Beispiel #4
0
 def test_calculate_single_labour_costs_6(self):
     parser = ShiftParser()
     assert parser.calculate_single_labour_costs(example_6) == {
         '11:00': 9.999999999999998,
         '12:00': 9.999999999999998,
         '13:00': 9.999999999999998,
         '14:00': 9.999999999999998,
         '17:00': 9.999999999999998,
         '18:00': 9.999999999999998,
         '19:00': 9.999999999999998,
         '20:00': 9.999999999999998,
         '21:00': 9.999999999999998,
         '22:00': 9.999999999999998,
     }
Beispiel #5
0
 def test_calculate_single_labour_costs_3(self):
     parser = ShiftParser()
     assert parser.calculate_single_labour_costs(example_3) == {
         '12:00': 13.99999999999998,
         '13:00': 13.99999999999998,
         '14:00': 13.99999999999998,
         '15:00': 13.99999999999998,
         '17:00': 13.99999999999998,
         '18:00': 13.99999999999998,
         '19:00': 13.99999999999998,
         '20:00': 13.99999999999998,
         '21:00': 13.99999999999998,
         '22:00': 7.000000000000001,
     }
Beispiel #6
0
class TestParsingTimestamps:
    parser = ShiftParser()

    def test_parse_timestamp_1(self):
        assert self.parser.parse_timestamp('10:00') == datetime(
            1900, 1, 1, 10, 0)

    def test_parse_timestamp_2(self):
        assert self.parser.parse_timestamp('4') == datetime(1900, 1, 1, 4, 0)

    def test_parse_timestamp_3(self):
        assert self.parser.parse_timestamp('4PM') == datetime(
            1900, 1, 1, 16, 0)

    def test_parse_timestamp_4(self):
        assert self.parser.parse_timestamp('14.45') == datetime(
            1900, 1, 1, 14, 45)

    def test_parse_timestamp_5(self):
        assert self.parser.parse_timestamp('17 ') == datetime(
            1900, 1, 1, 17, 0)

    def test_parse_timestamp_6(self):
        assert self.parser.parse_timestamp(' 15') == datetime(
            1900, 1, 1, 15, 0)
Beispiel #7
0
class TestAligningBreaks:
    parser = ShiftParser()

    def test_aling_breaks_1(self):
        assert self.parser.align_breaks_with_shift(example_1) == {
            "break_start": datetime(1900, 1, 1, 15, 0),
            "break_end": datetime(1900, 1, 1, 18, 0),
            "shift_start": datetime(1900, 1, 1, 10, 0),
            "shift_end": datetime(1900, 1, 1, 23, 0)
        }

    def test_aling_breaks_2(self):
        assert self.parser.align_breaks_with_shift(example_2) == {
            "break_start": datetime(1900, 1, 1, 18, 30),
            "break_end": datetime(1900, 1, 1, 19, 0),
            "shift_start": datetime(1900, 1, 1, 18, 0),
            "shift_end": datetime(1900, 1, 1, 23, 0)
        }

    def test_aling_breaks_3(self):
        assert self.parser.align_breaks_with_shift(example_3) == {
            "break_start": datetime(1900, 1, 1, 16, 0),
            "break_end": datetime(1900, 1, 1, 17, 0),
            "shift_start": datetime(1900, 1, 1, 12, 0),
            "shift_end": datetime(1900, 1, 1, 22, 30)
        }

    def test_aling_breaks_4(self):
        assert self.parser.align_breaks_with_shift(example_4) == {
            "break_start": datetime(1900, 1, 1, 15, 0),
            "break_end": datetime(1900, 1, 1, 16, 0),
            "shift_start": datetime(1900, 1, 1, 9, 0),
            "shift_end": datetime(1900, 1, 1, 18, 0)
        }

    def test_aling_breaks_5(self):
        assert self.parser.align_breaks_with_shift(example_5) == {
            "break_start": datetime(1900, 1, 1, 16, 0),
            "break_end": datetime(1900, 1, 1, 16, 10),
            "shift_start": datetime(1900, 1, 1, 9, 0),
            "shift_end": datetime(1900, 1, 1, 23, 0)
        }

    def test_aling_breaks_6(self):
        assert self.parser.align_breaks_with_shift(example_6) == {
            "break_start": datetime(1900, 1, 1, 15, 0),
            "break_end": datetime(1900, 1, 1, 17, 0),
            "shift_start": datetime(1900, 1, 1, 11, 0),
            "shift_end": datetime(1900, 1, 1, 23, 0)
        }

    def test_aling_breaks_7(self):
        assert self.parser.align_breaks_with_shift(example_7) == {
            "break_start": datetime(1900, 1, 1, 11, 0),
            "break_end": datetime(1900, 1, 1, 13, 0),
            "shift_start": datetime(1900, 1, 1, 10, 0),
            "shift_end": datetime(1900, 1, 1, 16, 0)
        }
Beispiel #8
0
 def test_total_labour_cost(self):
     parser = ShiftParser()
     assert parser.total_labour_cost(full_string) == {
         '09:00': 30.0,
         '10:00': 50.0,
         '11:00': 50.0,
         '12:00': 64.0,
         '13:00': 74.0,
         '14:00': 74.0,
         '15:00': 44.0,
         '16:00': 26.67,
         '17:00': 54.0,
         '18:00': 60.0,
         '19:00': 66.0,
         '20:00': 66.0,
         '21:00': 66.0,
         '22:00': 59.0,
     }
Beispiel #9
0
 def test_calculate_single_labour_costs_5(self):
     parser = ShiftParser()
     assert parser.calculate_single_labour_costs(example_5) == {
         '09:00': 19.999999999999996,
         '10:00': 19.999999999999996,
         '11:00': 19.999999999999996,
         '12:00': 19.999999999999996,
         '13:00': 19.999999999999996,
         '14:00': 19.999999999999996,
         '15:00': 19.999999999999996,
         '16:00': 16.666666666666675,
         '17:00': 19.999999999999996,
         '18:00': 19.999999999999996,
         '19:00': 19.999999999999996,
         '20:00': 19.999999999999996,
         '21:00': 19.999999999999996,
         '22:00': 19.999999999999996,
     }
Beispiel #10
0
class TestSeparatingBreaks:
    parser = ShiftParser()

    def test_separate_breaks_1(self):
        assert self.parser.separate_breaks(example_1) == ['15', '18']

    def test_separate_breaks_2(self):
        assert self.parser.separate_breaks(example_2) == ['18.30', '19.00']

    def test_separate_breaks_2(self):
        assert self.parser.separate_breaks(example_5) == ['4PM', '4.10PM']
Beispiel #11
0
class TestParsingShiftStartEnd:
    parser = ShiftParser()

    def test_shift_start_end_1(self):
        assert self.parser.shift_start_end(example_1) == {
            "shift_start": datetime(1900, 1, 1, 10, 0),
            "shift_end": datetime(1900, 1, 1, 23, 0),
        }

    def test_shift_start_end_2(self):
        assert self.parser.shift_start_end(example_2) == {
            "shift_start": datetime(1900, 1, 1, 18, 0),
            "shift_end": datetime(1900, 1, 1, 23, 0),
        }
Beispiel #12
0
class TestExtractingPayRate:
    parser = ShiftParser()

    def test_extract_pay_rate_1(self):
        assert self.parser.extract_pay_rate(example_1) == 10.0

    def test_extract_pay_rate_2(self):
        assert self.parser.extract_pay_rate(example_2) == 12.0

    def test_extract_pay_rate_3(self):
        assert self.parser.extract_pay_rate(example_3) == 14.0

    def test_extract_pay_rate_4(self):
        assert self.parser.extract_pay_rate(example_4) == 10.0

    def test_extract_pay_rate_5(self):
        assert self.parser.extract_pay_rate(example_5) == 20.0
Beispiel #13
0
class TestParsingBreaks:
    parser = ShiftParser()

    def test_break_start_end_1(self):
        assert self.parser.break_start_end(example_1) == {
            "break_start": datetime(1900, 1, 1, 15, 0),
            "break_end": datetime(1900, 1, 1, 18, 0),
        }

    def test_break_start_end_2(self):
        assert self.parser.break_start_end(example_2) == {
            "break_start": datetime(1900, 1, 1, 18, 30),
            "break_end": datetime(1900, 1, 1, 19, 0),
        }

    def test_break_start_end_3(self):
        assert self.parser.break_start_end(example_3) == {
            "break_start": datetime(1900, 1, 1, 16, 0),
            "break_end": datetime(1900, 1, 1, 17, 0),
        }

    def test_break_start_end_4(self):
        assert self.parser.break_start_end(example_4) == {
            "break_start": datetime(1900, 1, 1, 3, 0),
            "break_end": datetime(1900, 1, 1, 4, 0),
        }

    def test_break_start_end_5(self):
        assert self.parser.break_start_end(example_5) == {
            "break_start": datetime(1900, 1, 1, 16, 0),
            "break_end": datetime(1900, 1, 1, 16, 10),
        }

    def test_break_start_end_6(self):
        assert self.parser.break_start_end(example_6) == {
            "break_start": datetime(1900, 1, 1, 15, 0),
            "break_end": datetime(1900, 1, 1, 17, 0),
        }

    def test_break_start_end_7(self):
        assert self.parser.break_start_end(example_7) == {
            "break_start": datetime(1900, 1, 1, 11, 0),
            "break_end": datetime(1900, 1, 1, 13, 0),
        }
Beispiel #14
0
class TestExtractingShiftData:
    parser = ShiftParser()

    def test_extract_shift_data_1(self):
        assert self.parser.extract_shift_data(example_1) == {
            "break_start": datetime(1900, 1, 1, 15, 0),
            "break_end": datetime(1900, 1, 1, 18, 0),
            "shift_start": datetime(1900, 1, 1, 10, 0),
            "shift_end": datetime(1900, 1, 1, 23, 0),
            "pay_rate": 10.0
        }

    def test_extract_shift_data_2(self):
        assert self.parser.extract_shift_data(example_2) == {
            "break_start": datetime(1900, 1, 1, 18, 30),
            "break_end": datetime(1900, 1, 1, 19, 0),
            "shift_start": datetime(1900, 1, 1, 18, 0),
            "shift_end": datetime(1900, 1, 1, 23, 0),
            "pay_rate": 12.0
        }
Beispiel #15
0
def process_shifts(path_to_csv='work_shifts.csv'):
    string = open(path_to_csv).read()
    parser = ShiftParser()
    return parser.total_labour_cost(string)