def test_read_only_policy(): """Test read only policy works.""" # Make sure it's valid POLICY_SCHEMA(system_policies.READ_ONLY_POLICY) perms = PolicyPermissions(system_policies.READ_ONLY_POLICY, None) assert perms.check_entity("light.kitchen", "read") assert not perms.check_entity("light.kitchen", "control") assert not perms.check_entity("light.kitchen", "edit")
def test_admin_policy(): """Test admin policy works.""" # Make sure it's valid POLICY_SCHEMA(system_policies.ADMIN_POLICY) perms = PolicyPermissions(system_policies.ADMIN_POLICY, None) assert perms.check_entity("light.kitchen", "read") assert perms.check_entity("light.kitchen", "control") assert perms.check_entity("light.kitchen", "edit")
def test_read_only_policy(): """Test read only policy works.""" # Make sure it's valid POLICY_SCHEMA(system_policies.READ_ONLY_POLICY) perms = PolicyPermissions(system_policies.READ_ONLY_POLICY, None) assert perms.check_entity('light.kitchen', 'read') assert not perms.check_entity('light.kitchen', 'control') assert not perms.check_entity('light.kitchen', 'edit')
def test_admin_policy(): """Test admin policy works.""" # Make sure it's valid POLICY_SCHEMA(system_policies.ADMIN_POLICY) perms = PolicyPermissions(system_policies.ADMIN_POLICY, None) assert perms.check_entity('light.kitchen', 'read') assert perms.check_entity('light.kitchen', 'control') assert perms.check_entity('light.kitchen', 'edit')
def test_user_policy(): """Test user policy works.""" # Make sure it's valid POLICY_SCHEMA(system_policies.USER_POLICY) perms = PolicyPermissions(system_policies.USER_POLICY, None) assert perms.check_entity('light.kitchen', 'read') assert perms.check_entity('light.kitchen', 'control') assert perms.check_entity('light.kitchen', 'edit')
def test_admin_policy(): """Test admin policy works.""" # Make sure it's valid POLICY_SCHEMA(system_policies.ADMIN_POLICY) perms = PolicyPermissions(system_policies.ADMIN_POLICY) assert perms.check_entity('light.kitchen', 'read') assert perms.check_entity('light.kitchen', 'control') assert perms.check_entity('light.kitchen', 'edit')
def test_read_only_policy(): """Test read only policy works.""" # Make sure it's valid POLICY_SCHEMA(system_policies.READ_ONLY_POLICY) perms = PolicyPermissions(system_policies.READ_ONLY_POLICY) assert perms.check_entity('light.kitchen', 'read') assert not perms.check_entity('light.kitchen', 'control') assert not perms.check_entity('light.kitchen', 'edit')
async def test_call_context_target_specific( hass, mock_service_platform_call, mock_entities ): """Check targeting specific entities.""" with patch( "homeassistant.auth.AuthManager.async_get_user", return_value=mock_coro( Mock( permissions=PolicyPermissions( {"entities": {"entity_ids": {"light.kitchen": True}}}, None ) ) ), ): await service.entity_service_call( hass, [Mock(entities=mock_entities)], Mock(), ha.ServiceCall( "test_domain", "test_service", {"entity_id": "light.kitchen"}, context=ha.Context(user_id="mock-id"), ), ) assert len(mock_service_platform_call.mock_calls) == 1 entities = mock_service_platform_call.mock_calls[0][1][2] assert entities == [mock_entities["light.kitchen"]]
async def test_call_context_target_all(hass, mock_handle_entity_call, mock_entities): """Check we only target allowed entities if targeting all.""" with patch( "homeassistant.auth.AuthManager.async_get_user", return_value=Mock(permissions=PolicyPermissions( {"entities": { "entity_ids": { "light.kitchen": True } }}, None)), ): await service.entity_service_call( hass, [Mock(entities=mock_entities)], Mock(), ha.ServiceCall( "test_domain", "test_service", data={"entity_id": ENTITY_MATCH_ALL}, context=ha.Context(user_id="mock-id"), ), ) assert len(mock_handle_entity_call.mock_calls) == 1 assert mock_handle_entity_call.mock_calls[0][1][ 1].entity_id == "light.kitchen"
async def test_call_context_target_specific_no_auth( hass, mock_service_platform_call, mock_entities): """Check targeting specific entities without auth.""" with pytest.raises(exceptions.Unauthorized) as err: with patch('homeassistant.auth.AuthManager.async_get_user', return_value=mock_coro(Mock( permissions=PolicyPermissions({})))): await service.entity_service_call(hass, [ Mock(entities=mock_entities) ], Mock(), ha.ServiceCall('test_domain', 'test_service', { 'entity_id': 'light.kitchen' }, context=ha.Context(user_id='mock-id'))) assert err.value.context.user_id == 'mock-id' assert err.value.entity_id == 'light.kitchen'
async def test_call_context_target_all(hass, mock_service_platform_call, mock_entities): """Check we only target allowed entities if targetting all.""" with patch('homeassistant.auth.AuthManager.async_get_user', return_value=mock_coro(Mock(permissions=PolicyPermissions({ 'entities': { 'entity_ids': { 'light.kitchen': True } } })))): await service.entity_service_call(hass, [ Mock(entities=mock_entities) ], Mock(), ha.ServiceCall('test_domain', 'test_service', context=ha.Context(user_id='mock-id'))) assert len(mock_service_platform_call.mock_calls) == 1 entities = mock_service_platform_call.mock_calls[0][1][2] assert entities == [mock_entities['light.kitchen']]
async def test_call_context_target_specific_no_auth(hass, mock_handle_entity_call, mock_entities): """Check targeting specific entities without auth.""" with pytest.raises(exceptions.Unauthorized) as err, patch( "homeassistant.auth.AuthManager.async_get_user", return_value=Mock(permissions=PolicyPermissions({}, None)), ): await service.entity_service_call( hass, [Mock(entities=mock_entities)], Mock(), ha.ServiceCall( "test_domain", "test_service", {"entity_id": "light.kitchen"}, context=ha.Context(user_id="mock-id"), ), ) assert err.value.context.user_id == "mock-id" assert err.value.entity_id == "light.kitchen"