File size: 2,499 Bytes
dc7b320
 
 
7725750
f572466
7725750
 
 
 
 
 
 
d484982
7725750
 
 
d484982
7725750
 
d484982
7725750
d484982
 
7725750
dc7b320
f572466
7725750
 
d484982
 
 
 
7725750
dc7b320
f572466
7725750
 
 
 
 
dc7b320
f572466
7725750
 
 
d484982
7725750
dc7b320
 
 
 
 
 
 
 
2c888f0
f572466
2c888f0
 
 
 
 
 
d484982
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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