93 lines
2.3 KiB
Python
93 lines
2.3 KiB
Python
"""Tests for the lastfm sensor."""
|
|
from unittest.mock import patch
|
|
|
|
from pylast import Track
|
|
import pytest
|
|
|
|
from homeassistant.components import sensor
|
|
from homeassistant.components.lastfm.sensor import STATE_NOT_SCROBBLING
|
|
from homeassistant.setup import async_setup_component
|
|
|
|
|
|
class MockNetwork:
|
|
"""Mock _Network object for pylast."""
|
|
|
|
def __init__(self, username: str):
|
|
"""Initialize the mock."""
|
|
self.username = username
|
|
|
|
|
|
class MockUser:
|
|
"""Mock User object for pylast."""
|
|
|
|
def __init__(self, now_playing_result):
|
|
"""Initialize the mock."""
|
|
self._now_playing_result = now_playing_result
|
|
|
|
def get_playcount(self):
|
|
"""Get mock play count."""
|
|
return 1
|
|
|
|
def get_image(self):
|
|
"""Get mock image."""
|
|
pass
|
|
|
|
def get_recent_tracks(self, limit):
|
|
"""Get mock recent tracks."""
|
|
return []
|
|
|
|
def get_top_tracks(self, limit):
|
|
"""Get mock top tracks."""
|
|
return []
|
|
|
|
def get_now_playing(self):
|
|
"""Get mock now playing."""
|
|
return self._now_playing_result
|
|
|
|
|
|
@pytest.fixture(name="lastfm_network")
|
|
def lastfm_network_fixture():
|
|
"""Create fixture for LastFMNetwork."""
|
|
with patch("pylast.LastFMNetwork") as lastfm_network:
|
|
yield lastfm_network
|
|
|
|
|
|
async def test_update_not_playing(hass, lastfm_network):
|
|
"""Test update when no playing song."""
|
|
|
|
lastfm_network.return_value.get_user.return_value = MockUser(None)
|
|
|
|
assert await async_setup_component(
|
|
hass,
|
|
sensor.DOMAIN,
|
|
{"sensor": {"platform": "lastfm", "api_key": "secret-key", "users": ["test"]}},
|
|
)
|
|
await hass.async_block_till_done()
|
|
|
|
entity_id = "sensor.test"
|
|
|
|
state = hass.states.get(entity_id)
|
|
|
|
assert state.state == STATE_NOT_SCROBBLING
|
|
|
|
|
|
async def test_update_playing(hass, lastfm_network):
|
|
"""Test update when song playing."""
|
|
|
|
lastfm_network.return_value.get_user.return_value = MockUser(
|
|
Track("artist", "title", MockNetwork("test"))
|
|
)
|
|
|
|
assert await async_setup_component(
|
|
hass,
|
|
sensor.DOMAIN,
|
|
{"sensor": {"platform": "lastfm", "api_key": "secret-key", "users": ["test"]}},
|
|
)
|
|
await hass.async_block_till_done()
|
|
|
|
entity_id = "sensor.test"
|
|
|
|
state = hass.states.get(entity_id)
|
|
|
|
assert state.state == "artist - title"
|