Ejemplo n.º 1
0
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")
Ejemplo n.º 2
0
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')
Ejemplo n.º 5
0
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')
Ejemplo n.º 6
0
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')
Ejemplo n.º 7
0
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')
Ejemplo n.º 8
0
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"]]
Ejemplo n.º 9
0
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"
Ejemplo n.º 10
0
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'
Ejemplo n.º 11
0
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']]
Ejemplo n.º 12
0
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"