async def async_say_handle(service: ServiceCall) -> None: """Service handle for say.""" entity_ids = service.data[ATTR_ENTITY_ID] message = service.data[ATTR_MESSAGE] cache = service.data.get(ATTR_CACHE) language = service.data.get(ATTR_LANGUAGE) options = service.data.get(ATTR_OPTIONS) tts.process_options(p_type, language, options) params = { "message": message, } if cache is not None: params["cache"] = "true" if cache else "false" if language is not None: params["language"] = language if options is not None: params.update(options) await hass.services.async_call( DOMAIN_MP, SERVICE_PLAY_MEDIA, { ATTR_ENTITY_ID: entity_ids, ATTR_MEDIA_CONTENT_ID: generate_media_source_id( DOMAIN, str(yarl.URL.build(path=p_type, query=params)), ), ATTR_MEDIA_CONTENT_TYPE: MEDIA_TYPE_MUSIC, }, blocking=True, context=service.context, )
async def test_async_resolve_media(hass): """Test browse media.""" assert await async_setup_component(hass, const.DOMAIN, {}) await hass.async_block_till_done() media = await media_source.async_resolve_media( hass, media_source.generate_media_source_id(const.DOMAIN, "local/test.mp3"), ) assert isinstance(media, media_source.models.PlayMedia)
def test_media_source(): query1 = {"template": "{{message}}"} id1 = utils.encode_media_source(query1) assert id1 == "74656d706c6174653d7b7b6d6573736167657d7d" query2 = {"message": "Привет?!"} id2 = utils.encode_media_source({**query2}) assert id2 == "?message=Привет?!" id3 = utils.encode_media_source({**query1, **query2}) assert id3 == id1 + id2 media_id = media_source.generate_media_source_id("tts", id1) assert utils.decode_media_source(media_id) == query1 media_id = media_source.generate_media_source_id("tts", id2) assert utils.decode_media_source(media_id) == query2 media_id = media_source.generate_media_source_id("tts", id1 + id2) assert utils.decode_media_source(media_id) == {**query1, **query2}
async def test_async_resolve_media(hass): """Test browse media.""" assert await async_setup_component(hass, media_source.DOMAIN, {}) await hass.async_block_till_done() media = await media_source.async_resolve_media( hass, media_source.generate_media_source_id(media_source.DOMAIN, "local/test.mp3"), None, ) assert isinstance(media, media_source.models.PlayMedia) assert media.url == "/media/local/test.mp3" assert media.mime_type == "audio/mpeg"
async def test_generate_media_source_id(): """Test identifier generation.""" tests = [ (None, None), (None, ""), ("", ""), ("domain", None), ("domain", ""), ("domain", "identifier"), ] for domain, identifier in tests: assert media_source.is_media_source_id( media_source.generate_media_source_id(domain, identifier))
async def test_async_resolve_media_no_entity(hass, caplog): """Test browse media.""" assert await async_setup_component(hass, media_source.DOMAIN, {}) await hass.async_block_till_done() media = await media_source.async_resolve_media( hass, media_source.generate_media_source_id(media_source.DOMAIN, "local/test.mp3"), ) assert isinstance(media, media_source.models.PlayMedia) assert media.url == "/media/local/test.mp3" assert media.mime_type == "audio/mpeg" assert ( "calls media_source.async_resolve_media without passing an entity_id" in caplog.text )