private async Task <List <ActivityView> > GetActivityForContentAsync(long id)
    {
        //Go get all activity for content 1
        var search = new SearchRequests();

        search.values.Add("id", id);
        search.requests.Add(new SearchRequest()
        {
            type   = "activity",
            fields = "*",
            query  = "contentId = @id"
        });
        var baseResult = await searcher.SearchUnrestricted(search);

        var activities = searcher.ToStronglyTyped <ActivityView>(baseResult.objects["activity"]);

        return(activities);
    }
    /// <summary>
    /// A shortcut for searching for a list of a single type WITH casting.
    /// </summary>
    /// <param name="search"></param>
    /// <param name="request"></param>
    /// <param name="values"></param>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    public static async Task <List <T> > SearchSingleTypeUnrestricted <T>(this IGenericSearch search, SearchRequest request, Dictionary <string, object>?values = null)
    {
        //Now go get some random-ass module message
        var searchResult = await search.SearchUnrestricted(new SearchRequests()
        {
            values   = values ?? new Dictionary <string, object>(),
            requests = new List <SearchRequest> {
                request
            }
        });

        return(search.ToStronglyTyped <T>(searchResult.objects.First().Value));
    }
    public async Task Regression_SearchValuesForPinned()
    {
        //Write a comment to a known content
        var comment        = GetNewCommentView(AllAccessContentId);
        var writtenComment = await writer.WriteAsync(comment, NormalUserId);

        //Now update said content to have more values
        var content = await searcher.GetById <ContentView>(AllAccessContentId);

        content.values.Add("pinned", new List <long> {
            writtenComment.id
        });
        var writtenContent = await writer.WriteAsync(content, NormalUserId);

        //Then construct a search for content and comments such that the comments are in the values
        var search = new SearchRequests()
        {
            values   = new Dictionary <string, object> {
            },
            requests = new List <SearchRequest>()
            {
                //This searches ALL content, many of which will NOT have the pinned
                new SearchRequest()
                {
                    type   = nameof(RequestType.content),
                    fields = "*"
                },
                new SearchRequest()
                {
                    type   = nameof(RequestType.message),
                    fields = "*",
                    query  = "id in @content.values.pinned"
                }
            }
        };

        var searchResult = await searcher.SearchUnrestricted(search);

        var searchMessages = searcher.ToStronglyTyped <MessageView>(searchResult.objects[nameof(RequestType.message)]);
        var searchContent  = searcher.ToStronglyTyped <MessageView>(searchResult.objects[nameof(RequestType.content)]);

        Assert.Contains(writtenComment.id, searchMessages.Select(x => x.id));
        Assert.Contains(AllAccessContentId, searchContent.Select(x => x.id));
    }