def test_if_fires_on_hass_shutdown(hass): """Test the firing when HASS starts.""" calls = mock_service(hass, 'test', 'automation') hass.state = CoreState.not_running res = yield from async_setup_component(hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'trigger': { 'platform': 'homeassistant', 'event': 'shutdown', }, 'action': { 'service': 'test.automation', } } }) assert res assert not automation.is_on(hass, 'automation.hello') assert len(calls) == 0 yield from hass.async_start() assert automation.is_on(hass, 'automation.hello') assert len(calls) == 0 with patch.object(hass.loop, 'stop'): yield from hass.async_stop() assert len(calls) == 1
def test_automation_not_trigger_on_bootstrap(hass): """Test if automation is not trigger on bootstrap.""" hass.state = CoreState.not_running calls = async_mock_service(hass, 'test', 'automation') res = yield from async_setup_component( hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'trigger': { 'platform': 'event', 'event_type': 'test_event', }, 'action': { 'service': 'test.automation', 'entity_id': 'hello.world' } } }) assert res assert not automation.is_on(hass, 'automation.hello') hass.bus.async_fire('test_event') yield from hass.async_block_till_done() assert len(calls) == 0 hass.bus.async_fire(EVENT_HOMEASSISTANT_START) yield from hass.async_block_till_done() assert automation.is_on(hass, 'automation.hello') hass.bus.async_fire('test_event') yield from hass.async_block_till_done() assert len(calls) == 1 assert ['hello.world'] == calls[0].data.get(ATTR_ENTITY_ID)
async def test_if_fires_on_hass_shutdown(hass): """Test the firing when HASS starts.""" calls = async_mock_service(hass, "test", "automation") hass.state = CoreState.not_running assert await async_setup_component( hass, automation.DOMAIN, { automation.DOMAIN: { "alias": "hello", "trigger": { "platform": "homeassistant", "event": "shutdown" }, "action": { "service": "test.automation" }, } }, ) assert automation.is_on(hass, "automation.hello") assert len(calls) == 0 await hass.async_start() assert automation.is_on(hass, "automation.hello") assert len(calls) == 0 with patch.object(hass.loop, "stop"): await hass.async_stop() assert len(calls) == 1
async def test_automation_not_trigger_on_bootstrap(hass): """Test if automation is not trigger on bootstrap.""" hass.state = CoreState.not_running calls = async_mock_service(hass, "test", "automation") assert await async_setup_component( hass, automation.DOMAIN, { automation.DOMAIN: { "alias": "hello", "trigger": {"platform": "event", "event_type": "test_event"}, "action": {"service": "test.automation", "entity_id": "hello.world"}, } }, ) assert automation.is_on(hass, "automation.hello") hass.bus.async_fire("test_event") await hass.async_block_till_done() assert len(calls) == 0 hass.bus.async_fire(EVENT_HOMEASSISTANT_STARTED) await hass.async_block_till_done() assert automation.is_on(hass, "automation.hello") hass.bus.async_fire("test_event") await hass.async_block_till_done() assert len(calls) == 1 assert ["hello.world"] == calls[0].data.get(ATTR_ENTITY_ID)
def test_automation_not_trigger_on_bootstrap(hass): """Test if automation is not trigger on bootstrap.""" hass.state = CoreState.not_running calls = async_mock_service(hass, 'test', 'automation') res = yield from async_setup_component(hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'trigger': { 'platform': 'event', 'event_type': 'test_event', }, 'action': { 'service': 'test.automation', 'entity_id': 'hello.world' } } }) assert res assert not automation.is_on(hass, 'automation.hello') hass.bus.async_fire('test_event') yield from hass.async_block_till_done() assert len(calls) == 0 hass.bus.async_fire(EVENT_HOMEASSISTANT_START) yield from hass.async_block_till_done() assert automation.is_on(hass, 'automation.hello') hass.bus.async_fire('test_event') yield from hass.async_block_till_done() assert len(calls) == 1 assert ['hello.world'] == calls[0].data.get(ATTR_ENTITY_ID)
def test_if_fires_on_hass_shutdown(hass): """Test the firing when HASS starts.""" calls = async_mock_service(hass, 'test', 'automation') hass.state = CoreState.not_running res = yield from async_setup_component(hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'trigger': { 'platform': 'homeassistant', 'event': 'shutdown', }, 'action': { 'service': 'test.automation', } } }) assert res assert not automation.is_on(hass, 'automation.hello') assert len(calls) == 0 yield from hass.async_start() assert automation.is_on(hass, 'automation.hello') assert len(calls) == 0 with patch.object(hass.loop, 'stop'): yield from hass.async_stop() assert len(calls) == 1
def test_if_fires_on_hass_start(hass): """Test the firing when HASS starts.""" calls = async_mock_service(hass, 'test', 'automation') hass.state = CoreState.not_running config = { automation.DOMAIN: { 'alias': 'hello', 'trigger': { 'platform': 'homeassistant', 'event': 'start', }, 'action': { 'service': 'test.automation', } } } res = yield from async_setup_component(hass, automation.DOMAIN, config) assert res assert not automation.is_on(hass, 'automation.hello') assert len(calls) == 0 yield from hass.async_start() assert automation.is_on(hass, 'automation.hello') assert len(calls) == 1 with patch('homeassistant.config.async_hass_config_yaml', Mock(return_value=mock_coro(config))): yield from hass.services.async_call( automation.DOMAIN, automation.SERVICE_RELOAD, blocking=True) assert automation.is_on(hass, 'automation.hello') assert len(calls) == 1
async def test_services(hass, calls): """Test the automation services for turning entities on/off.""" entity_id = "automation.hello" assert hass.states.get(entity_id) is None assert not automation.is_on(hass, entity_id) assert await async_setup_component( hass, automation.DOMAIN, { automation.DOMAIN: { "alias": "hello", "trigger": { "platform": "event", "event_type": "test_event" }, "action": { "service": "test.automation" }, } }, ) assert hass.states.get(entity_id) is not None assert automation.is_on(hass, entity_id) hass.bus.async_fire("test_event") await hass.async_block_till_done() assert len(calls) == 1 await common.async_turn_off(hass, entity_id) await hass.async_block_till_done() assert not automation.is_on(hass, entity_id) hass.bus.async_fire("test_event") await hass.async_block_till_done() assert len(calls) == 1 await common.async_toggle(hass, entity_id) await hass.async_block_till_done() assert automation.is_on(hass, entity_id) hass.bus.async_fire("test_event") await hass.async_block_till_done() assert len(calls) == 2 await common.async_trigger(hass, entity_id) await hass.async_block_till_done() assert len(calls) == 3 await common.async_turn_off(hass, entity_id) await hass.async_block_till_done() await common.async_trigger(hass, entity_id) await hass.async_block_till_done() assert len(calls) == 4 await common.async_turn_on(hass, entity_id) await hass.async_block_till_done() assert automation.is_on(hass, entity_id)
async def test_if_fires_on_hass_start(hass): """Test the firing when HASS starts.""" calls = async_mock_service(hass, "test", "automation") hass.state = CoreState.not_running config = { automation.DOMAIN: { "alias": "hello", "trigger": { "platform": "homeassistant", "event": "start" }, "action": { "service": "test.automation" }, } } assert await async_setup_component(hass, automation.DOMAIN, config) assert automation.is_on(hass, "automation.hello") assert len(calls) == 0 await hass.async_start() assert automation.is_on(hass, "automation.hello") assert len(calls) == 1 with patch( "homeassistant.config.async_hass_config_yaml", Mock(return_value=mock_coro(config)), ): await hass.services.async_call(automation.DOMAIN, automation.SERVICE_RELOAD, blocking=True) assert automation.is_on(hass, "automation.hello") assert len(calls) == 1
def test_if_fires_on_hass_start(hass): """Test the firing when HASS starts.""" calls = mock_service(hass, 'test', 'automation') hass.state = CoreState.not_running config = { automation.DOMAIN: { 'alias': 'hello', 'trigger': { 'platform': 'homeassistant', 'event': 'start', }, 'action': { 'service': 'test.automation', } } } res = yield from async_setup_component(hass, automation.DOMAIN, config) assert res assert not automation.is_on(hass, 'automation.hello') assert len(calls) == 0 yield from hass.async_start() assert automation.is_on(hass, 'automation.hello') assert len(calls) == 1 with patch('homeassistant.config.async_hass_config_yaml', Mock(return_value=mock_coro(config))): yield from hass.services.async_call( automation.DOMAIN, automation.SERVICE_RELOAD, blocking=True) assert automation.is_on(hass, 'automation.hello') assert len(calls) == 1
def test_services(self): """Test the automation services for turning entities on/off.""" entity_id = 'automation.hello' assert self.hass.states.get(entity_id) is None assert not automation.is_on(self.hass, entity_id) assert _setup_component( self.hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'trigger': { 'platform': 'event', 'event_type': 'test_event', }, 'action': { 'service': 'test.automation', } } }) assert self.hass.states.get(entity_id) is not None assert automation.is_on(self.hass, entity_id) self.hass.bus.fire('test_event') self.hass.pool.block_till_done() assert len(self.calls) == 1 automation.turn_off(self.hass, entity_id) self.hass.pool.block_till_done() assert not automation.is_on(self.hass, entity_id) self.hass.bus.fire('test_event') self.hass.pool.block_till_done() assert len(self.calls) == 1 automation.toggle(self.hass, entity_id) self.hass.pool.block_till_done() assert automation.is_on(self.hass, entity_id) self.hass.bus.fire('test_event') self.hass.pool.block_till_done() assert len(self.calls) == 2 automation.trigger(self.hass, entity_id) self.hass.pool.block_till_done() assert len(self.calls) == 3 automation.turn_off(self.hass, entity_id) self.hass.pool.block_till_done() automation.trigger(self.hass, entity_id) self.hass.pool.block_till_done() assert len(self.calls) == 4 automation.turn_on(self.hass, entity_id) self.hass.pool.block_till_done() assert automation.is_on(self.hass, entity_id)
async def test_services(hass, calls): """Test the automation services for turning entities on/off.""" entity_id = 'automation.hello' assert hass.states.get(entity_id) is None assert not automation.is_on(hass, entity_id) assert await async_setup_component( hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'trigger': { 'platform': 'event', 'event_type': 'test_event', }, 'action': { 'service': 'test.automation', } } }) assert hass.states.get(entity_id) is not None assert automation.is_on(hass, entity_id) hass.bus.async_fire('test_event') await hass.async_block_till_done() assert len(calls) == 1 await common.async_turn_off(hass, entity_id) await hass.async_block_till_done() assert not automation.is_on(hass, entity_id) hass.bus.async_fire('test_event') await hass.async_block_till_done() assert len(calls) == 1 await common.async_toggle(hass, entity_id) await hass.async_block_till_done() assert automation.is_on(hass, entity_id) hass.bus.async_fire('test_event') await hass.async_block_till_done() assert len(calls) == 2 await common.async_trigger(hass, entity_id) await hass.async_block_till_done() assert len(calls) == 3 await common.async_turn_off(hass, entity_id) await hass.async_block_till_done() await common.async_trigger(hass, entity_id) await hass.async_block_till_done() assert len(calls) == 4 await common.async_turn_on(hass, entity_id) await hass.async_block_till_done() assert automation.is_on(hass, entity_id)
def test_automation_restore_state(hass): """Ensure states are restored on startup.""" time = dt_util.utcnow() mock_restore_cache(hass, ( State('automation.hello', STATE_ON), State('automation.bye', STATE_OFF, {'last_triggered': time}), )) config = { automation.DOMAIN: [{ 'alias': 'hello', 'trigger': { 'platform': 'event', 'event_type': 'test_event_hello', }, 'action': { 'service': 'test.automation' } }, { 'alias': 'bye', 'trigger': { 'platform': 'event', 'event_type': 'test_event_bye', }, 'action': { 'service': 'test.automation' } }] } assert (yield from async_setup_component(hass, automation.DOMAIN, config)) state = hass.states.get('automation.hello') assert state assert state.state == STATE_ON state = hass.states.get('automation.bye') assert state assert state.state == STATE_OFF assert state.attributes.get('last_triggered') == time calls = async_mock_service(hass, 'test', 'automation') assert automation.is_on(hass, 'automation.bye') is False hass.bus.async_fire('test_event_bye') yield from hass.async_block_till_done() assert len(calls) == 0 assert automation.is_on(hass, 'automation.hello') hass.bus.async_fire('test_event_hello') yield from hass.async_block_till_done() assert len(calls) == 1
def test_services(self): """Test the automation services for turning entities on/off.""" entity_id = 'automation.hello' assert self.hass.states.get(entity_id) is None assert not automation.is_on(self.hass, entity_id) assert setup_component(self.hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'trigger': { 'platform': 'event', 'event_type': 'test_event', }, 'action': { 'service': 'test.automation', } } }) assert self.hass.states.get(entity_id) is not None assert automation.is_on(self.hass, entity_id) self.hass.bus.fire('test_event') self.hass.block_till_done() assert len(self.calls) == 1 automation.turn_off(self.hass, entity_id) self.hass.block_till_done() assert not automation.is_on(self.hass, entity_id) self.hass.bus.fire('test_event') self.hass.block_till_done() assert len(self.calls) == 1 automation.toggle(self.hass, entity_id) self.hass.block_till_done() assert automation.is_on(self.hass, entity_id) self.hass.bus.fire('test_event') self.hass.block_till_done() assert len(self.calls) == 2 automation.trigger(self.hass, entity_id) self.hass.block_till_done() assert len(self.calls) == 3 automation.turn_off(self.hass, entity_id) self.hass.block_till_done() automation.trigger(self.hass, entity_id) self.hass.block_till_done() assert len(self.calls) == 4 automation.turn_on(self.hass, entity_id) self.hass.block_till_done() assert automation.is_on(self.hass, entity_id)
async def test_services(hass, calls): """Test the automation services for turning entities on/off.""" entity_id = 'automation.hello' assert hass.states.get(entity_id) is None assert not automation.is_on(hass, entity_id) assert await async_setup_component(hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'trigger': { 'platform': 'event', 'event_type': 'test_event', }, 'action': { 'service': 'test.automation', } } }) assert hass.states.get(entity_id) is not None assert automation.is_on(hass, entity_id) hass.bus.async_fire('test_event') await hass.async_block_till_done() assert len(calls) == 1 await common.async_turn_off(hass, entity_id) await hass.async_block_till_done() assert not automation.is_on(hass, entity_id) hass.bus.async_fire('test_event') await hass.async_block_till_done() assert len(calls) == 1 await common.async_toggle(hass, entity_id) await hass.async_block_till_done() assert automation.is_on(hass, entity_id) hass.bus.async_fire('test_event') await hass.async_block_till_done() assert len(calls) == 2 await common.async_trigger(hass, entity_id) await hass.async_block_till_done() assert len(calls) == 3 await common.async_turn_off(hass, entity_id) await hass.async_block_till_done() await common.async_trigger(hass, entity_id) await hass.async_block_till_done() assert len(calls) == 4 await common.async_turn_on(hass, entity_id) await hass.async_block_till_done() assert automation.is_on(hass, entity_id)
async def test_automation_restore_state(hass): """Ensure states are restored on startup.""" time = dt_util.utcnow() mock_restore_cache( hass, ( State("automation.hello", STATE_ON), State("automation.bye", STATE_OFF, {"last_triggered": time}), ), ) config = { automation.DOMAIN: [ { "alias": "hello", "trigger": {"platform": "event", "event_type": "test_event_hello"}, "action": {"service": "test.automation"}, }, { "alias": "bye", "trigger": {"platform": "event", "event_type": "test_event_bye"}, "action": {"service": "test.automation"}, }, ] } assert await async_setup_component(hass, automation.DOMAIN, config) state = hass.states.get("automation.hello") assert state assert state.state == STATE_ON assert state.attributes["last_triggered"] is None state = hass.states.get("automation.bye") assert state assert state.state == STATE_OFF assert state.attributes["last_triggered"] == time calls = async_mock_service(hass, "test", "automation") assert automation.is_on(hass, "automation.bye") is False hass.bus.async_fire("test_event_bye") await hass.async_block_till_done() assert len(calls) == 0 assert automation.is_on(hass, "automation.hello") hass.bus.async_fire("test_event_hello") await hass.async_block_till_done() assert len(calls) == 1
def test_automation_restore_state(hass): """Ensure states are restored on startup.""" time = dt_util.utcnow() mock_restore_cache(hass, ( State('automation.hello', STATE_ON), State('automation.bye', STATE_OFF, {'last_triggered': time}), )) config = {automation.DOMAIN: [{ 'alias': 'hello', 'trigger': { 'platform': 'event', 'event_type': 'test_event_hello', }, 'action': {'service': 'test.automation'} }, { 'alias': 'bye', 'trigger': { 'platform': 'event', 'event_type': 'test_event_bye', }, 'action': {'service': 'test.automation'} }]} assert (yield from async_setup_component(hass, automation.DOMAIN, config)) state = hass.states.get('automation.hello') assert state assert state.state == STATE_ON state = hass.states.get('automation.bye') assert state assert state.state == STATE_OFF assert state.attributes.get('last_triggered') == time calls = async_mock_service(hass, 'test', 'automation') assert automation.is_on(hass, 'automation.bye') is False hass.bus.async_fire('test_event_bye') yield from hass.async_block_till_done() assert len(calls) == 0 assert automation.is_on(hass, 'automation.hello') hass.bus.async_fire('test_event_hello') yield from hass.async_block_till_done() assert len(calls) == 1
async def test_automation_is_on_if_no_initial_state_or_restore(hass): """Test initial value is on when no initial state or restored state.""" calls = async_mock_service(hass, "test", "automation") assert await async_setup_component( hass, automation.DOMAIN, { automation.DOMAIN: { "alias": "hello", "trigger": { "platform": "event", "event_type": "test_event" }, "action": { "service": "test.automation", "entity_id": "hello.world" }, } }, ) assert automation.is_on(hass, "automation.hello") hass.bus.async_fire("test_event") await hass.async_block_till_done() assert len(calls) == 1
async def test_no_initial_value_and_restore_off(hass): """Test initial value off and restored state is turned on.""" calls = async_mock_service(hass, "test", "automation") mock_restore_cache(hass, (State("automation.hello", STATE_OFF), )) assert await async_setup_component( hass, automation.DOMAIN, { automation.DOMAIN: { "alias": "hello", "trigger": { "platform": "event", "event_type": "test_event" }, "action": { "service": "test.automation", "entity_id": "hello.world" }, } }, ) assert not automation.is_on(hass, "automation.hello") hass.bus.async_fire("test_event") await hass.async_block_till_done() assert len(calls) == 0
def test_no_initial_value_and_restore_off(hass): """Test initial value off and restored state is turned on.""" calls = async_mock_service(hass, 'test', 'automation') mock_restore_cache(hass, ( State('automation.hello', STATE_OFF), )) res = yield from async_setup_component(hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'trigger': { 'platform': 'event', 'event_type': 'test_event', }, 'action': { 'service': 'test.automation', 'entity_id': 'hello.world' } } }) assert res assert not automation.is_on(hass, 'automation.hello') hass.bus.async_fire('test_event') yield from hass.async_block_till_done() assert len(calls) == 0
def test_initial_value_on(hass): """Test initial value on.""" calls = async_mock_service(hass, 'test', 'automation') res = yield from async_setup_component( hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'initial_state': 'on', 'trigger': { 'platform': 'event', 'event_type': 'test_event', }, 'action': { 'service': 'test.automation', 'entity_id': ['hello.world', 'hello.world2'] } } }) assert res assert automation.is_on(hass, 'automation.hello') hass.bus.async_fire('test_event') yield from hass.async_block_till_done() assert len(calls) == 1
async def test_initial_value_on(hass): """Test initial value on.""" hass.state = CoreState.not_running calls = async_mock_service(hass, "test", "automation") assert await async_setup_component( hass, automation.DOMAIN, { automation.DOMAIN: { "alias": "hello", "initial_state": "on", "trigger": {"platform": "event", "event_type": "test_event"}, "action": { "service": "test.automation", "entity_id": ["hello.world", "hello.world2"], }, } }, ) assert automation.is_on(hass, "automation.hello") await hass.async_start() await hass.async_block_till_done() hass.bus.async_fire("test_event") await hass.async_block_till_done() assert len(calls) == 1
async def test_initial_value_off_but_restore_on(hass): """Test initial value off and restored state is turned on.""" hass.state = CoreState.not_running calls = async_mock_service(hass, 'test', 'automation') mock_restore_cache(hass, ( State('automation.hello', STATE_ON), )) await async_setup_component(hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'initial_state': 'off', 'trigger': { 'platform': 'event', 'event_type': 'test_event', }, 'action': { 'service': 'test.automation', 'entity_id': 'hello.world' } } }) assert not automation.is_on(hass, 'automation.hello') await hass.async_start() hass.bus.async_fire('test_event') await hass.async_block_till_done() assert len(calls) == 0
def test_no_initial_value_and_restore_off(hass): """Test initial value off and restored state is turned on.""" calls = async_mock_service(hass, 'test', 'automation') mock_restore_cache(hass, (State('automation.hello', STATE_OFF), )) res = yield from async_setup_component( hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'trigger': { 'platform': 'event', 'event_type': 'test_event', }, 'action': { 'service': 'test.automation', 'entity_id': 'hello.world' } } }) assert res assert not automation.is_on(hass, 'automation.hello') hass.bus.async_fire('test_event') yield from hass.async_block_till_done() assert len(calls) == 0
async def test_if_fires_on_hass_start(hass): """Test the firing when Safegate Pro starts.""" calls = async_mock_service(hass, "test", "automation") hass.state = CoreState.not_running config = { automation.DOMAIN: { "alias": "hello", "trigger": { "platform": "homeassistant", "event": "start" }, "action": { "service": "test.automation", "data_template": { "id": "{{ trigger.id}}" }, }, } } assert await async_setup_component(hass, automation.DOMAIN, config) assert automation.is_on(hass, "automation.hello") assert len(calls) == 0 await hass.async_start() await hass.async_block_till_done() assert automation.is_on(hass, "automation.hello") assert len(calls) == 1 with patch( "homeassistant.config.async_hass_config_yaml", AsyncMock(return_value=config), ): await hass.services.async_call(automation.DOMAIN, automation.SERVICE_RELOAD, blocking=True) assert automation.is_on(hass, "automation.hello") assert len(calls) == 1 assert calls[0].data["id"] == 0
def test_if_fires_on_event_with_data(hass): """Test the firing of events with data.""" calls = mock_service(hass, 'test', 'automation') hass.state = CoreState.not_running res = yield from async_setup_component(hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'trigger': { 'platform': 'event', 'event_type': EVENT_HOMEASSISTANT_START, }, 'action': { 'service': 'test.automation', } } }) assert res assert not automation.is_on(hass, 'automation.hello') assert len(calls) == 0 yield from hass.async_start() assert automation.is_on(hass, 'automation.hello') assert len(calls) == 1
async def test_if_fires_on_hass_shutdown(hass): """Test the firing when Home Assistant shuts down.""" calls = async_mock_service(hass, "test", "automation") hass.state = CoreState.not_running assert await async_setup_component( hass, automation.DOMAIN, { automation.DOMAIN: { "alias": "hello", "trigger": { "platform": "homeassistant", "event": "shutdown" }, "action": { "service": "test.automation", "data_template": { "id": "{{ trigger.id}}" }, }, } }, ) assert automation.is_on(hass, "automation.hello") assert len(calls) == 0 await hass.async_start() assert automation.is_on(hass, "automation.hello") await hass.async_block_till_done() assert len(calls) == 0 with patch.object(hass.loop, "stop"): await hass.async_stop() assert len(calls) == 1 assert calls[0].data["id"] == 0
def test_service_initial_value_on(self): """Test initial value on.""" entity_id = 'automation.hello' assert setup_component(self.hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'initial_state': 'on', 'trigger': { 'platform': 'event', 'event_type': 'test_event', }, 'action': { 'service': 'test.automation', 'entity_id': ['hello.world', 'hello.world2'] } } }) assert automation.is_on(self.hass, entity_id)
def test_automation_is_on_if_no_initial_state_or_restore(hass): """Test initial value is on when no initial state or restored state.""" calls = async_mock_service(hass, 'test', 'automation') res = yield from async_setup_component(hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'trigger': { 'platform': 'event', 'event_type': 'test_event', }, 'action': { 'service': 'test.automation', 'entity_id': 'hello.world' } } }) assert res assert automation.is_on(hass, 'automation.hello') hass.bus.async_fire('test_event') yield from hass.async_block_till_done() assert len(calls) == 1
def test_initial_value_on(hass): """Test initial value on.""" calls = mock_service(hass, 'test', 'automation') res = yield from async_setup_component(hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'initial_state': 'on', 'trigger': { 'platform': 'event', 'event_type': 'test_event', }, 'action': { 'service': 'test.automation', 'entity_id': ['hello.world', 'hello.world2'] } } }) assert res assert automation.is_on(hass, 'automation.hello') hass.bus.async_fire('test_event') yield from hass.async_block_till_done() assert len(calls) == 1
def test_automation_is_on_if_no_initial_state_or_restore(hass): """Test initial value is on when no initial state or restored state.""" calls = mock_service(hass, 'test', 'automation') res = yield from async_setup_component( hass, automation.DOMAIN, { automation.DOMAIN: { 'alias': 'hello', 'trigger': { 'platform': 'event', 'event_type': 'test_event', }, 'action': { 'service': 'test.automation', 'entity_id': 'hello.world' } } }) assert res assert automation.is_on(hass, 'automation.hello') hass.bus.async_fire('test_event') yield from hass.async_block_till_done() assert len(calls) == 1
async def test_services(hass, calls): """Test the automation services for turning entities on/off.""" entity_id = "automation.hello" assert hass.states.get(entity_id) is None assert not automation.is_on(hass, entity_id) assert await async_setup_component( hass, automation.DOMAIN, { automation.DOMAIN: { "alias": "hello", "trigger": {"platform": "event", "event_type": "test_event"}, "action": {"service": "test.automation"}, } }, ) assert hass.states.get(entity_id) is not None assert automation.is_on(hass, entity_id) hass.bus.async_fire("test_event") await hass.async_block_till_done() assert len(calls) == 1 await hass.services.async_call( automation.DOMAIN, SERVICE_TURN_OFF, { ATTR_ENTITY_ID: entity_id, }, blocking=True, ) assert not automation.is_on(hass, entity_id) hass.bus.async_fire("test_event") await hass.async_block_till_done() assert len(calls) == 1 await hass.services.async_call( automation.DOMAIN, SERVICE_TOGGLE, {ATTR_ENTITY_ID: entity_id}, blocking=True ) assert automation.is_on(hass, entity_id) hass.bus.async_fire("test_event") await hass.async_block_till_done() assert len(calls) == 2 await hass.services.async_call( automation.DOMAIN, SERVICE_TOGGLE, {ATTR_ENTITY_ID: entity_id}, blocking=True, ) assert not automation.is_on(hass, entity_id) hass.bus.async_fire("test_event") await hass.async_block_till_done() assert len(calls) == 2 await hass.services.async_call( automation.DOMAIN, SERVICE_TOGGLE, {ATTR_ENTITY_ID: entity_id}, blocking=True ) await hass.services.async_call( automation.DOMAIN, SERVICE_TRIGGER, {ATTR_ENTITY_ID: entity_id}, blocking=True ) assert len(calls) == 3 await hass.services.async_call( automation.DOMAIN, SERVICE_TURN_OFF, {ATTR_ENTITY_ID: entity_id}, blocking=True ) await hass.services.async_call( automation.DOMAIN, SERVICE_TRIGGER, {ATTR_ENTITY_ID: entity_id}, blocking=True ) assert len(calls) == 4 await hass.services.async_call( automation.DOMAIN, SERVICE_TURN_ON, {ATTR_ENTITY_ID: entity_id}, blocking=True ) assert automation.is_on(hass, entity_id)