Exemplo n.º 1
0
def test_check_for_overlap_positive():
    """
    Test for task overlap when overlap is present.
    """

    schedule = Schedule("test", [])
    task1 = Task(
        "task1",
        priority=1.0,
        start_time=datetime(2020, 5, 1, hour=12),
        end_time=datetime(2020, 5, 1, hour=13, minute=30),
    )
    task2 = Task(
        "task2",
        priority=1.0,
        start_time=datetime(2020, 5, 1, hour=13),
        end_time=datetime(2020, 5, 1, hour=14),
    )

    schedule.tasks = [task1, task2]

    try:
        schedule.check_for_overlap()
        # If we made it here, no error was thrown.
        assert False
    except ValueError:
        # We're good in this case!
        pass
    except:
        # Something else went wrong.
        assert False
Exemplo n.º 2
0
def test_points_empty():
    """
    Test Schedule.points() for an empty schedule.
    """

    schedule = Schedule("test", [])
    assert schedule.points() == 0.0
Exemplo n.º 3
0
def test_interval_points_small():
    """
    Test Schedule.interval_points() for a small example.
    """

    task1 = Task(
        "task1",
        priority=1.5,
        start_time=datetime(2020, 5, 1, hour=12),
        end_time=datetime(2020, 5, 1, hour=13, minute=30),
    )
    task2 = Task(
        "task2",
        priority=2.0,
        start_time=datetime(2020, 5, 1, hour=13, minute=30),
        end_time=datetime(2020, 5, 1, hour=14, minute=30),
    )
    task3 = Task(
        "task3",
        priority=2.0,
        start_time=datetime(2020, 5, 8, hour=13, minute=30),
        end_time=datetime(2020, 5, 8, hour=14, minute=30),
    )
    schedule = Schedule("test", [task1, task2, task3])

    start_time = datetime(2020, 5, 1)
    end_time = datetime(2020, 5, 8)
    assert schedule.interval_points(start_time, end_time) == 4.25
Exemplo n.º 4
0
def test_add_task_incompatible():
    """
    Test adding an incompatible task.
    """

    task1 = Task(
        "task1",
        priority=1.0,
        start_time=datetime(2020, 5, 1, hour=12),
        end_time=datetime(2020, 5, 1, hour=13, minute=30),
    )
    schedule = Schedule("test", [task1])
    task2 = Task(
        "task2",
        priority=1.0,
        start_time=datetime(2020, 5, 1, hour=13),
        end_time=datetime(2020, 5, 1, hour=14),
    )

    # Check that add_task throws ValueError.
    try:
        schedule.add_task(task2)
        # If we made it here, no error was thrown.
        assert False
    except ValueError:
        # We're good in this case!
        pass
    except:
        # Something else went wrong.
        assert False
Exemplo n.º 5
0
def test_tasks_in_interval_empty():
    """
    Test Schedule.tasks_in_interval() for an empty example.
    """

    task1 = Task(
        "task1",
        priority=1.5,
        start_time=datetime(2020, 5, 1, hour=12),
        end_time=datetime(2020, 5, 1, hour=13, minute=30),
    )
    task2 = Task(
        "task2",
        priority=2.0,
        start_time=datetime(2020, 5, 1, hour=13, minute=30),
        end_time=datetime(2020, 5, 1, hour=14, minute=30),
    )
    task3 = Task(
        "task3",
        priority=2.0,
        start_time=datetime(2020, 5, 8, hour=13, minute=30),
        end_time=datetime(2020, 5, 8, hour=14, minute=30),
    )
    schedule = Schedule("test", [task1, task2, task3])

    start_time = datetime(2020, 4, 1)
    end_time = datetime(2020, 4, 8)
    assert schedule.tasks_in_interval(start_time, end_time) == []
Exemplo n.º 6
0
def test_get_task_index_valid():
    """
    Test getting task index with valid queries.
    """

    # Construct schedule.
    tasks = [
        Task(
            "task1",
            priority=1.0,
            start_time=datetime(2020, 5, 1, hour=12),
            end_time=datetime(2020, 5, 1, hour=13, minute=30),
        ),
        Task(
            "task2",
            priority=1.0,
            start_time=datetime(2020, 5, 1, hour=13, minute=30),
            end_time=datetime(2020, 5, 1, hour=14, minute=30),
        ),
        Task(
            "task3",
            priority=2.0,
            start_time=datetime(2020, 5, 2, hour=12),
            end_time=datetime(2020, 5, 2, hour=13, minute=30),
        ),
        Task(
            "task4",
            priority=2.0,
            start_time=datetime(2020, 5, 2, hour=23),
            end_time=datetime(2020, 5, 2, hour=23, minute=30),
        ),
        Task(
            "task5",
            priority=1.0,
            start_time=datetime(2020, 5, 3, hour=1, minute=30),
            end_time=datetime(2020, 5, 3, hour=1, minute=59),
        ),
        Task(
            "task6",
            priority=1.0,
            start_time=datetime(2020, 6, 3, hour=1, minute=30),
            end_time=datetime(2020, 6, 3, hour=1, minute=59),
        ),
    ]
    schedule = Schedule("test", tasks)

    # Get task indices for each task.
    task_indices = [
        schedule.get_task_index(date(2020, 5, 1), 0),
        schedule.get_task_index(date(2020, 5, 1), 1),
        schedule.get_task_index(date(2020, 5, 2), 0),
        schedule.get_task_index(date(2020, 5, 2), 1),
        schedule.get_task_index(date(2020, 5, 3), 0),
        schedule.get_task_index(date(2020, 6, 3), 0),
    ]

    # Test task indices.
    assert task_indices == list(range(len(tasks)))
Exemplo n.º 7
0
def test_add_task_empty():
    """
    Test add task which to empty schedule.
    """

    schedule = Schedule("test", [])
    task1 = Task(
        "task1",
        priority=1.0,
        start_time=datetime(2020, 5, 1, hour=12),
        end_time=datetime(2020, 5, 1, hour=13, minute=30),
    )

    schedule.add_task(task1)
    assert schedule.tasks == [task1]
Exemplo n.º 8
0
def test_check_for_overlap_negative():
    """
    Test for task overlap when overlap is not present.
    """

    task1 = Task(
        "task1",
        priority=1.0,
        start_time=datetime(2020, 5, 1, hour=12),
        end_time=datetime(2020, 5, 1, hour=13, minute=30),
    )
    task2 = Task(
        "task2",
        priority=1.0,
        start_time=datetime(2020, 5, 1, hour=13, minute=30),
        end_time=datetime(2020, 5, 1, hour=14, minute=30),
    )
    schedule = Schedule("test", [task1, task2])

    schedule.check_for_overlap()
Exemplo n.º 9
0
def test_add_task_one():
    """
    Test add task which to schedule with one task.
    """

    task1 = Task(
        "task1",
        priority=1.0,
        start_time=datetime(2020, 5, 1, hour=12),
        end_time=datetime(2020, 5, 1, hour=13, minute=30),
    )
    schedule = Schedule("test", [task1])
    task2 = Task(
        "task2",
        priority=1.0,
        start_time=datetime(2020, 5, 1, hour=13, minute=30),
        end_time=datetime(2020, 5, 1, hour=14, minute=30),
    )

    schedule.add_task(task2)
    assert schedule.tasks == [task1, task2]
Exemplo n.º 10
0
def test_remove_task():
    """
    Test Schedule.remove_task() for a small case.
    """
    task1 = Task(
        "task1",
        priority=1.0,
        start_time=datetime(2020, 5, 1, hour=12),
        end_time=datetime(2020, 5, 1, hour=13, minute=30),
    )
    task2 = Task(
        "task2",
        priority=1.0,
        start_time=datetime(2020, 5, 1, hour=13, minute=30),
        end_time=datetime(2020, 5, 1, hour=14, minute=30),
    )
    schedule = Schedule("test", [task1, task2])

    removed_task = schedule.remove_task(1)

    assert removed_task == task2
    assert schedule.tasks == [task1]
Exemplo n.º 11
0
def test_tasks_in_interval_surround():
    """
    Test Schedule.tasks_in_interval() when a target task is surrounding the interval.
    """

    task1 = Task(
        "task1",
        priority=1.5,
        start_time=datetime(2020, 5, 1, hour=12),
        end_time=datetime(2020, 5, 1, hour=13, minute=30),
    )
    task2 = Task(
        "task2",
        priority=2.0,
        start_time=datetime(2020, 5, 1, hour=13, minute=30),
        end_time=datetime(2020, 5, 1, hour=14, minute=30),
    )
    schedule = Schedule("test", [task1, task2])

    start_time = datetime(2020, 5, 1, hour=12)
    end_time = datetime(2020, 5, 1, hour=14)
    assert schedule.tasks_in_interval(start_time, end_time) == [task1, task2]
Exemplo n.º 12
0
def test_set_new_schedules_1():
    """
    Call `set_new_schedules()` in the first case of edit history (cases listed in
    docstring of `set_new_schedules()`).
    """

    # Construct session.
    session = Session("test")

    # Construct planned and new schedules.
    planned_task = Task(
        "planned_task",
        priority=1.0,
        start_time=datetime(2020, 5, 1, hour=12),
        end_time=datetime(2020, 5, 1, hour=13, minute=30),
    )
    actual_task = Task(
        "actual_task",
        priority=1.0,
        start_time=datetime(2020, 5, 1, hour=13),
        end_time=datetime(2020, 5, 1, hour=14, minute=30),
    )
    planned = Schedule("planned", [planned_task])
    actual = Schedule("actual", [actual_task])

    # Set new schedules in session.
    session.set_new_schedules(planned, actual)

    # Test session values.
    assert session.history_pos == 1
    assert len(session.edit_history) == 2
    assert len(session.edit_history[0][0].tasks) == 0
    assert len(session.edit_history[0][1].tasks) == 0
    assert len(session.edit_history[1][0].tasks) == 1
    assert len(session.edit_history[1][1].tasks) == 1
    assert session.edit_history[1][0].tasks[0] == planned_task
    assert session.edit_history[1][1].tasks[0] == actual_task
Exemplo n.º 13
0
def test_sort_tasks():
    """
    Test for correct task sorting.
    """

    tasks = [
        Task(
            "task_%d" % i,
            start_time=datetime(2020, 5, 1, hour=i),
            end_time=datetime(2020, 5, 1, hour=i + 1),
        ) for i in range(10)
    ]
    schedule = Schedule("test", tasks)

    for i in range(len(schedule.tasks) - 1):
        assert schedule.tasks[i].start_time < schedule.tasks[i + 1].start_time
Exemplo n.º 14
0
def test_get_task_index_invalid():
    """
    Test getting task index with invalid queries.
    """

    # Construct schedule.
    tasks = [
        Task(
            "task1",
            priority=1.0,
            start_time=datetime(2020, 5, 1, hour=12),
            end_time=datetime(2020, 5, 1, hour=13, minute=30),
        ),
        Task(
            "task2",
            priority=1.0,
            start_time=datetime(2020, 5, 1, hour=13, minute=30),
            end_time=datetime(2020, 5, 1, hour=14, minute=30),
        ),
        Task(
            "task3",
            priority=2.0,
            start_time=datetime(2020, 5, 2, hour=12),
            end_time=datetime(2020, 5, 2, hour=13, minute=30),
        ),
        Task(
            "task4",
            priority=2.0,
            start_time=datetime(2020, 5, 2, hour=23),
            end_time=datetime(2020, 5, 2, hour=23, minute=30),
        ),
        Task(
            "task5",
            priority=1.0,
            start_time=datetime(2020, 5, 3, hour=1, minute=30),
            end_time=datetime(2020, 5, 3, hour=1, minute=59),
        ),
        Task(
            "task6",
            priority=1.0,
            start_time=datetime(2020, 6, 3, hour=1, minute=30),
            end_time=datetime(2020, 6, 3, hour=1, minute=59),
        ),
    ]
    schedule = Schedule("test", tasks)

    # Execute queries and check for errors.
    queries = [
        (date(2020, 5, 1), 2),
        (date(2020, 5, 2), 2),
        (date(2020, 5, 3), 1),
        (date(2020, 6, 3), 1),
        (date(2020, 5, 4), 0),
    ]
    for query in queries:
        failed = False
        try:
            task_index = schedule.get_task_index(query[0], query[1])
        except:
            failed = True

        assert failed
Exemplo n.º 15
0
def test_set_new_schedules_2():
    """
    Call `set_new_schedules()` in the second case of edit history (cases listed in
    docstring of `set_new_schedules()`).
    """

    # Construct session.
    session = Session("test")

    # Construct planned and new schedules.
    planned_tasks = [
        Task(
            "planned_task_1",
            priority=1.0,
            start_time=datetime(2020, 5, 1, hour=12),
            end_time=datetime(2020, 5, 1, hour=13, minute=30),
        ),
        Task(
            "planned_task_2",
            priority=1.0,
            start_time=datetime(2020, 5, 1, hour=12, minute=30),
            end_time=datetime(2020, 5, 1, hour=14),
        ),
    ]
    actual_tasks = [
        Task(
            "actual_task_1",
            priority=1.0,
            start_time=datetime(2020, 5, 1, hour=13),
            end_time=datetime(2020, 5, 1, hour=14, minute=30),
        ),
        Task(
            "actual_task_2",
            priority=1.0,
            start_time=datetime(2020, 5, 1, hour=13, minute=30),
            end_time=datetime(2020, 5, 1, hour=15),
        ),
    ]

    planned = [
        Schedule("planned_1", [planned_tasks[0]]),
        Schedule("planned_2", [planned_tasks[1]]),
    ]
    actual = [
        Schedule("actual_1", [actual_tasks[0]]),
        Schedule("actual_2", [actual_tasks[1]]),
    ]

    # Set new schedules in session, undo, then redo with new versions.
    session.set_new_schedules(planned[0], actual[0])
    session.undo()
    session.set_new_schedules(planned[1], actual[1])

    # Test session values.
    assert session.history_pos == 1
    assert len(session.edit_history) == 2
    assert len(session.edit_history[0][0].tasks) == 0
    assert len(session.edit_history[0][1].tasks) == 0
    assert len(session.edit_history[1][0].tasks) == 1
    assert len(session.edit_history[1][1].tasks) == 1
    assert session.edit_history[1][0].tasks[0] == planned_tasks[1]
    assert session.edit_history[1][1].tasks[0] == actual_tasks[1]