/// <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); }); } }