async def METHOD_NAME(repeat: int, mock_task_id: TaskId) -> None:
    counter = 0
    received = ()
    async def progress_update(
        message: ProgressMessage, percent: ProgressPercent, task_id: TaskId
    ) -> None:
        nonlocal counter
        nonlocal received
        counter += 1
        received = (message, percent)
        assert task_id == mock_task_id
    progress_updater = _ProgressManager(progress_update)
    # different from None and the last value only
    # triggers once
    for _ in range(repeat):
        await progress_updater.update(mock_task_id, message="")
        assert counter == 1
        assert received == ("", None)
    for _ in range(repeat):
        await progress_updater.update(mock_task_id, percent=0.0)
        assert counter == 2
        assert received == ("", 0.0)
    for _ in range(repeat):
        await progress_updater.update(mock_task_id, percent=1.0, message="done")
        assert counter == 3
        assert received == ("done", 1.0)
    # setting percent or message to None
    # will not trigger an event
    for _ in range(repeat):
        await progress_updater.update(mock_task_id, message=None)
        assert counter == 3
        assert received == ("done", 1.0)
    for _ in range(repeat):
        await progress_updater.update(mock_task_id, percent=None)
        assert counter == 3
        assert received == ("done", 1.0)
    for _ in range(repeat):
        await progress_updater.update(mock_task_id, percent=None, message=None)
        assert counter == 3
        assert received == ("done", 1.0)
    for _ in range(repeat):
        await progress_updater.update(mock_task_id)
        assert counter == 3
        assert received == ("done", 1.0)