def test_grant_all():
    scopes = ['alpha', 'beta', 'gamma']
    items = [
        dict(topic='with_list', personas=['a', 'b', 'c']),
        dict(topic='with_item', persona='a'),
    ]

    permissions = Permissions(authorized_scopes=scopes)

    for scope in scopes:  # nothing is authorized
        assert permissions.authorize(scope, 'a', 'with_list') is False
        assert permissions.authorize(scope, 'b', 'with_list') is False
        assert permissions.authorize(scope, 'c', 'with_list') is False
        assert permissions.authorize(scope, 'x', 'with_list') is False
        assert permissions.authorize(scope, 'a', 'with_item') is False
        assert permissions.authorize(scope, 'x', 'with_item') is False

    for scope in scopes:  # set permissions
        permissions.grant_all(scope, items)

    for scope in scopes:  # some actions are authorized
        assert permissions.authorize(scope, 'a', 'with_list') is True
        assert permissions.authorize(scope, 'b', 'with_list') is True
        assert permissions.authorize(scope, 'c', 'with_list') is True
        assert permissions.authorize(scope, 'x', 'with_list') is False
        assert permissions.authorize(scope, 'a', 'with_item') is True
        assert permissions.authorize(scope, 'x', 'with_item') is False

    with py_raises(ValueError) as error:
        permissions.grant_all(scope='*alien*', items=items)