new vertex2 content sensor
This commit is contained in:
1 parent
914d48ae55
commit
d6d470903c
3 files changed
+345
No files matched your search
@@ -0,0 +1,116 @@
|
||||
from pathlib import Path
|
||||
import sys
|
||||
import unittest
|
||||
from unittest.mock import Mock
|
||||
|
||||
|
||||
APPS = Path(__file__).resolve().parents[1] / "apps"
|
||||
sys.path[:0] = [str(APPS), str(APPS / "ad_toolbox")]
|
||||
from vertexcontent import VertexContent
|
||||
|
||||
|
||||
class Harness(VertexContent):
|
||||
def __init__(self, states, sources):
|
||||
self.states = states
|
||||
self.sources = sources
|
||||
self.input_selected = "sensor.vertex2_input_selected"
|
||||
self.has_signal = "binary_sensor.vertex2_has_input_signal"
|
||||
self.output = "sensor.vertex2_current_content"
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return "vertex_content"
|
||||
|
||||
def get_state(self, entity, attribute=None):
|
||||
data = self.states.get(entity)
|
||||
if attribute == "all":
|
||||
return data
|
||||
return data.get("state") if data else None
|
||||
|
||||
|
||||
APPLE = {
|
||||
"AppleTV": {
|
||||
"label": "Apple TV",
|
||||
"platform": "Apple TV",
|
||||
"entity": "media_player.apple_tv",
|
||||
"pause_states": ["paused"],
|
||||
"pause_supported_apps": ["Netflix"],
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class VertexContentTests(unittest.TestCase):
|
||||
def states(self, player_state="playing", attributes=None, signal="on"):
|
||||
return {
|
||||
"sensor.vertex2_input_selected": {"state": "AppleTV", "attributes": {}},
|
||||
"binary_sensor.vertex2_has_input_signal": {"state": signal, "attributes": {}},
|
||||
"media_player.apple_tv": {
|
||||
"state": player_state,
|
||||
"attributes": attributes or {},
|
||||
},
|
||||
}
|
||||
|
||||
def test_uses_title_before_application(self):
|
||||
app = Harness(self.states(attributes={
|
||||
"media_title": "Dune",
|
||||
"app_name": "Netflix",
|
||||
"media_content_type": "movie",
|
||||
}), APPLE)
|
||||
state, attributes = app.build_content()
|
||||
self.assertEqual(state, "Dune")
|
||||
self.assertEqual(attributes["application"], "Netflix")
|
||||
self.assertEqual(attributes["content_type"], "movie")
|
||||
self.assertFalse(attributes["is_paused"])
|
||||
self.assertTrue(attributes["is_pause_supported"])
|
||||
|
||||
def test_falls_back_to_application(self):
|
||||
app = Harness(self.states(attributes={"app_name": "Netflix"}), APPLE)
|
||||
state, attributes = app.build_content()
|
||||
self.assertEqual(state, "Netflix")
|
||||
self.assertIsNone(attributes["title"])
|
||||
|
||||
def test_pause_requires_paused_state_and_supported_app(self):
|
||||
supported = Harness(self.states("paused", {"app_name": "Netflix"}), APPLE)
|
||||
unsupported = Harness(self.states("paused", {"app_name": "Photos"}), APPLE)
|
||||
self.assertTrue(supported.build_content()[1]["is_paused"])
|
||||
self.assertFalse(unsupported.build_content()[1]["is_paused"])
|
||||
self.assertFalse(unsupported.build_content()[1]["is_pause_supported"])
|
||||
|
||||
def test_no_signal_is_idle(self):
|
||||
app = Harness(self.states(signal="off"), APPLE)
|
||||
state, attributes = app.build_content()
|
||||
self.assertEqual(state, "idle")
|
||||
self.assertFalse(attributes["available"])
|
||||
self.assertFalse(attributes["is_paused"])
|
||||
|
||||
def test_console_uses_activity_state(self):
|
||||
states = {
|
||||
"sensor.vertex2_input_selected": {"state": "Playstation", "attributes": {}},
|
||||
"binary_sensor.vertex2_has_input_signal": {"state": "on", "attributes": {}},
|
||||
"sensor.ps5_136_activity": {"state": "Astro Bot", "attributes": {}},
|
||||
}
|
||||
sources = {"Playstation": {
|
||||
"label": "PlayStation 5",
|
||||
"platform": "PlayStation 5",
|
||||
"entity": "sensor.ps5_136_activity",
|
||||
"state_as_title": True,
|
||||
"content_type": "game",
|
||||
}}
|
||||
state, attributes = Harness(states, sources).build_content()
|
||||
self.assertEqual(state, "Astro Bot")
|
||||
self.assertEqual(attributes["content_type"], "game")
|
||||
self.assertFalse(attributes["is_pause_supported"])
|
||||
|
||||
def test_updates_through_created_entity_handle(self):
|
||||
app = Harness(self.states(attributes={"app_name": "Netflix"}), APPLE)
|
||||
app.output_entity = Mock()
|
||||
app.output_entity.get_state.side_effect = ["old", {"attributes": {}}]
|
||||
app.update_content()
|
||||
app.output_entity.set_state.assert_called_once()
|
||||
update = app.output_entity.set_state.call_args.kwargs
|
||||
self.assertEqual(update["state"], "Netflix")
|
||||
self.assertEqual(update["attributes"]["ad_app"], "vertex_content")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in new issue
Block a user