Exemplo n.º 1
0
    /// <summary>
    /// Get a single module by name with only the fields required for system blah blah blah
    /// </summary>
    /// <param name="search"></param>
    /// <param name="name"></param>
    /// <param name="userId"></param>
    /// <returns></returns>
    public static async Task <ContentView?> GetModuleForSystemByNameAsync(this IGenericSearch search, string name, long userId = -1)
    {
        var request = new SearchRequest()
        {
            type   = "content",
            fields = "~votes,permissions,keywords,values",
            query  = "name = @name and contentType = @type and !notdeleted()"
        };
        var values = new Dictionary <string, object> {
            { "name", name },
            { "type", InternalContentType.module }
        };

        List <ContentView> modules = new List <ContentView>();

        if (userId < 0)
        {
            modules = await search.SearchSingleTypeUnrestricted <ContentView>(request, values);
        }
        else
        {
            modules = await search.SearchSingleType <ContentView>(userId, request, values);
        }

        return(modules.FirstOrDefault(x => x.name == name && x.contentType == InternalContentType.module));
    }
    public async Task RethreadMissing(long content1, long content2, long write1, long write2, long rethreadUser, long rethreadPlace, bool allowed)
    {
        const int commentsCount = 5;

        var writtenMessages = new List <MessageView>();

        //Add a bunch of comments to the two contents (might be the same)
        for (var i = 0; i < commentsCount; i++)
        {
            var ncomment = GetNewCommentView(content1);
            writtenMessages.Add(await writer.WriteAsync(ncomment, write1));
            var scomment = GetNewCommentView(content2);
            writtenMessages.Add(await writer.WriteAsync(scomment, write2));
        }

        Assert.Equal(commentsCount * 2, writtenMessages.Count);

        var work = new Func <Task <List <MessageView> > >(() => service.RethreadMessagesAsync(writtenMessages.Select(x => x.id).ToList(), rethreadPlace, rethreadUser));

        //Now, try to rethread
        if (allowed)
        {
            var result = await work();

            Assert.All(result, x =>
            {
                AssertDateClose(x.editDate ?? throw new InvalidOperationException("NO EDIT DATE SET"));
                Assert.Equal(rethreadPlace, x.contentId);
                Assert.Contains(writtenMessages, y => y.id == x.id);
                Assert.Equal(rethreadUser, x.editUserId);
            });
        }
        else
        {
            //This could be permissions or it could be request or anything... this is kind of dangerous but whatever
            await Assert.ThrowsAnyAsync <Exception>(work);

            //Go search these messages
            var currentMessages = await search.SearchSingleTypeUnrestricted <MessageView>(new SearchRequest()
            {
                type   = "message",
                fields = "*",
                query  = "id in @ids"
            }, new Dictionary <string, object>()
            {
                { "ids", writtenMessages.Select(x => x.id) }
            });

            Assert.All(currentMessages, x =>
            {
                Assert.Null(x.editDate);
                Assert.NotEqual(rethreadPlace, x.contentId);
                Assert.NotEqual(rethreadUser, x.editUserId);
            });
        }
    }