barakplasma's picture
idk
d484982
from app import parse_requirements, parse_tasks, solve_all_tasks, generate_mermaid_gantt
from datetime import datetime
def test_parse_requirements_with_spaces() -> None:
reqs = [
"take out trash requires bag",
"Dinner requires Shopping",
"Make sandwich requires bread",
]
dependencies, all_tasks, original_names = parse_requirements(reqs)
assert set(all_tasks) == {
"take_out_trash",
"bag",
"dinner",
"shopping",
"make_sandwich",
"bread",
}
assert dependencies["take_out_trash"] == ["bag"]
assert dependencies["dinner"] == ["shopping"]
assert dependencies["make_sandwich"] == ["bread"]
assert original_names["take_out_trash"] == "take out trash"
def test_parse_tasks_and_original_names() -> None:
txt = "Wash dishes\nTake out trash, Make sandwich "
tasks, originals = parse_tasks(txt)
assert set(tasks) == {"wash_dishes", "take_out_trash", "make_sandwich"}
assert originals["take_out_trash"] == "Take out trash"
assert originals["make_sandwich"] == "Make sandwich"
assert originals["wash_dishes"] == "Wash dishes"
def test_solve_all_tasks_simple() -> None:
reqs = ["a requires b", "b requires c"]
dependencies, all_tasks, _ = parse_requirements(reqs)
result = solve_all_tasks(dependencies, all_tasks)
assert result == ["c", "b", "a"]
def test_solve_all_tasks_with_spaces() -> None:
reqs = ["Do homework requires eat dinner", "eat dinner requires cook"]
dependencies, all_tasks, _ = parse_requirements(reqs)
result = solve_all_tasks(dependencies, all_tasks)
assert result == ["cook", "eat_dinner", "do_homework"]
# def test_solve_maximum_subset_cycle():
# reqs = ["a requires b", "b requires c", "c requires a", "d requires c"]
# dependencies, all_tasks, _ = parse_requirements(reqs)
# result = solve_maximum_subset(dependencies, all_tasks)
# # Only d can run because a<->b<->c form a cycle
# assert result == ["d"]
def test_generate_mermaid_gantt_minutes() -> None:
order = ["a", "b", "c"]
names = {"a": "Alpha", "b": "Beta", "c": "Gamma"}
durations = {"a": 15, "b": 30, "c": 45}
base = datetime(2024, 1, 1, 8, 0)
gantt = generate_mermaid_gantt(order, names, durations=durations, start_time=base)
assert "dateFormat YYYY-MM-DD HH:mm" in gantt
assert "A : a, 2024-01-01 08:00, 15m" in gantt
assert "B : b, after a, 30m" in gantt
assert "C : c, after b, 45m" in gantt