async def METHOD_NAME(widget, probe, on_change):
    "The on_change handler is triggered on user input"
    widget.min = date(2023, 5, 17)
    widget.value = date(2023, 5, 20)
    widget.max = date(2023, 5, 23)
    on_change.reset_mock()
    for i in range(1, 4):
        await probe.change(1)
        expected = date(2023, 5, 20 + i)
        assert widget.value == expected
        assert probe.value == expected
        assert on_change.mock_calls == [call(widget)] * i
    # Can't go past the maximum
    assert widget.value == widget.max
    await probe.change(1)
    assert widget.value == widget.max
    widget.value = date(2023, 5, 20)
    on_change.reset_mock()
    for i in range(1, 4):
        await probe.change(-1)
        expected = date(2023, 5, 20 - i)
        assert widget.value == expected
        assert probe.value == expected
        assert on_change.mock_calls == [call(widget)] * i
    # Can't go past the minimum
    assert widget.value == widget.min
    await probe.change(-1)
    assert widget.value == widget.min