72 lines
1.6 KiB
Python
72 lines
1.6 KiB
Python
from datetime import time
|
|
|
|
from pytest import fixture
|
|
|
|
from app.add import (
|
|
split_time_range_string,
|
|
add_up_timesheet,
|
|
find_time_ranges,
|
|
parse_time,
|
|
subtract_times,
|
|
)
|
|
from app.config import SAMPLE_TIMESHEET_PATH
|
|
|
|
|
|
@fixture
|
|
def timesheet() -> str:
|
|
with open(SAMPLE_TIMESHEET_PATH) as fin:
|
|
return fin.read()
|
|
|
|
|
|
@fixture
|
|
def string_with_no_times():
|
|
return "## no times here 123"
|
|
|
|
|
|
@fixture
|
|
def time_range_strings():
|
|
return ["9:30-12:30", "8:30-7:30"]
|
|
|
|
|
|
@fixture
|
|
def time_ranges():
|
|
return [["9:30", "12:30"], ["8:30", "7:30"]]
|
|
|
|
|
|
@fixture
|
|
def times():
|
|
return [(time(9, 30), time(12, 30)), (time(8, 30), time(7, 30))]
|
|
|
|
|
|
@fixture
|
|
def string_with_times():
|
|
return "## 9:30-12:30, 8:30-7:30 "
|
|
|
|
|
|
def test_add_up_timesheet(timesheet):
|
|
assert add_up_timesheet(timesheet) == 430
|
|
|
|
|
|
def test_find_time_ranges_none(string_with_no_times):
|
|
assert find_time_ranges(string_with_no_times) == []
|
|
|
|
|
|
def test_find_time_ranges(string_with_times, time_range_strings):
|
|
assert find_time_ranges(string_with_times) == time_range_strings
|
|
|
|
|
|
def test_split_time_range_string(time_range_strings, time_ranges):
|
|
for time_range_string, time_range_tuple in zip(time_range_strings, time_ranges):
|
|
assert split_time_range_string(time_range_string) == time_range_tuple
|
|
|
|
|
|
def test_parse_time(time_ranges, times):
|
|
for time_range_tuple, time_tuple in zip(time_ranges, times):
|
|
for time_string, time_ in zip(time_range_tuple, time_tuple):
|
|
assert parse_time(time_string) == time_
|
|
|
|
|
|
def test_subtract_times(times):
|
|
assert subtract_times(*times[0]) == 180
|
|
assert subtract_times(*times[1]) == 1380
|