File: test_desk_functions.py

package info (click to toggle)
python-idasen-ha 2.6.3-2
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 188 kB
  • sloc: python: 571; sh: 5; makefile: 4
file content (104 lines) | stat: -rw-r--r-- 2,991 bytes parent folder | download | duplicates (2)
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
"""Tests for idasen_ha."""

from unittest import mock
from unittest.mock import MagicMock, Mock

import pytest

from idasen_ha import Desk

from . import FAKE_BLE_DEVICE, height_percent_to_meters


async def test_monitor_height(mock_idasen_desk: MagicMock):
    """Test height monitoring."""
    update_callback = Mock()
    desk = Desk(update_callback, True)

    HEIGHT_PCT_1 = 50
    HEIGHT_MTS_1 = height_percent_to_meters(HEIGHT_PCT_1)
    mock_idasen_desk.get_height.return_value = HEIGHT_MTS_1

    await desk.connect(FAKE_BLE_DEVICE)
    mock_idasen_desk.connect.assert_called()
    mock_idasen_desk.pair.assert_called()
    mock_idasen_desk.get_height.assert_called()
    update_callback.assert_called_with(HEIGHT_PCT_1)
    assert desk.height == HEIGHT_MTS_1
    assert desk.height_percent == HEIGHT_PCT_1

    HEIGHT_PCT_2 = 80
    HEIGHT_MTS_2 = height_percent_to_meters(HEIGHT_PCT_2)
    await mock_idasen_desk.trigger_monitor_callback(HEIGHT_MTS_2)
    update_callback.assert_called_with(HEIGHT_PCT_2)
    assert desk.height == HEIGHT_MTS_2
    assert desk.height_percent == HEIGHT_PCT_2


async def test_moves(mock_idasen_desk: MagicMock):
    """Test movement calls."""
    desk = Desk(None, True)
    await desk.connect(FAKE_BLE_DEVICE)

    mock_idasen_desk.is_moving = False

    HEIGHT_1 = 50
    await desk.move_to(HEIGHT_1)
    mock_idasen_desk.move_to_target.assert_called_with(
        height_percent_to_meters(HEIGHT_1)
    )

    HEIGHT_MAX = 100
    await desk.move_up()
    mock_idasen_desk.move_to_target.assert_called_with(
        height_percent_to_meters(HEIGHT_MAX)
    )

    HEIGHT_MIN = 0
    await desk.move_down()
    mock_idasen_desk.move_to_target.assert_called_with(
        height_percent_to_meters(HEIGHT_MIN)
    )


async def test_stop_before_move(mock_idasen_desk: MagicMock):
    """Test that movement is stoped before new movement starts."""
    desk = Desk(None, True)
    await desk.connect(FAKE_BLE_DEVICE)

    mock_idasen_desk.is_moving = True

    HEIGHT_1 = 50
    await desk.move_to(HEIGHT_1)
    # ensure stop() is called before move_to_target()
    mock_idasen_desk.assert_has_calls(
        [mock.call.stop(), mock.call.move_to_target(height_percent_to_meters(HEIGHT_1))]
    )


async def test_stop(mock_idasen_desk: MagicMock):
    """Test stop call."""
    desk = Desk(None, False)
    await desk.connect(FAKE_BLE_DEVICE)

    await desk.stop()
    mock_idasen_desk.stop.assert_called()


@pytest.mark.parametrize("connect_first", [True, False])
async def test_no_ops_if_not_connected(
    mock_idasen_desk: MagicMock, connect_first: bool
):
    """Test that disconnect is called if pair fails."""
    desk = Desk(Mock(), False)

    if connect_first:
        await desk.connect(FAKE_BLE_DEVICE)
        mock_idasen_desk.is_connected = False

    assert not desk.is_connected
    await desk.move_to(100)
    await desk.stop()

    mock_idasen_desk.move_to_target.assert_not_called()
    mock_idasen_desk.stop.assert_not_called()