File: test_painter.py

package info (click to toggle)
python-aiolifx-themes 0.5.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 448 kB
  • sloc: python: 1,131; makefile: 13
file content (37 lines) | stat: -rw-r--r-- 1,357 bytes parent folder | download
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
# type: ignore

import pytest

from aiolifx_themes.themes import ThemeLibrary, ThemePainter

from . import _mocked_beam, _mocked_light, _mocked_tile, _mocked_z_strip


@pytest.mark.asyncio
async def test_theme_painter() -> None:
    """Test the theme painter."""
    lights = [_mocked_light(), _mocked_z_strip(), _mocked_beam(), _mocked_tile()]
    library = ThemeLibrary()
    theme = library.get_theme("dream")

    await ThemePainter().paint(theme, lights, duration=0.25)

    for light in lights:
        if light.product == 38:
            # only send a single set_extended_color_zone packet
            assert len(light.set_extended_color_zones.calls) == 1
        elif light.product == 31:
            # send a packet for each zone
            assert len(light.set_color_zones.calls) == light.zones_count
            # packets in the sequence accumulate
            assert (
                light.set_color_zones.calls[round(light.zones_count / 2)][1]["apply"]
                == 0
            )
            # the last packet triggers the change
            assert light.set_color_zones.calls[light.zones_count - 1][1]["apply"] == 1
        elif light.product == 22:
            # single zone bulbs get one packet too
            assert len(light.set_color.calls) == 1
        elif light.product == 55:
            assert len(light.set64.calls) == 5