private async Task <Dictionary <string, Dictionary <ReactionType, int> > > LoadReactionsAsync(IEnumerable <string> publicationIds) { var keys = publicationIds.Select(KeysBuilder.PublicationReactionsKey).ToList(); var query = new ReactionsQuery(keys); var reactions = await reactionsApi.GetGroupedReactionsAsync(query); return(publicationIds .ToDictionary(id => id, id => { var r = reactions.ContainsKey(KeysBuilder.PublicationReactionsKey(id)) ? reactions[KeysBuilder.PublicationReactionsKey(id)] : new Dictionary <string, int>(); return r.Keys .Select(k => (Enum.Parse <ReactionType>(k), r[k])) .ToDictionary(o => o.Item1, o => o.Item2); }));
public async Task GetGroupedReactions_Ok() { // Setup var data = new Dictionary <string, Dictionary <string, int> > { { "Post_Test1", new Dictionary <string, int> { ["like"] = 1, ["wow"] = 2 } }, { "Post_Test2", new Dictionary <string, int> { ["like"] = 1 } } }; var keys = data.Select(d => d.Key); var storageMock = new Mock <IReactionStorage>(); storageMock .Setup(s => s.GetGroupedReactionsAsync(keys)) .ReturnsAsync(data); var client = TestServerHelper.New(collection => { collection.AddScoped(_ => storageMock.Object); }); var input = new ReactionsQuery { Keys = keys }; // Act var response = await client.PostAsync("reactions/grouped", input.AsJsonContent()); var result = await response.Content.DeserializeContent <Dictionary <string, Dictionary <string, int> > >(); // Assert Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); Assert.AreEqual(2, result["Post_Test1"]["wow"]); Assert.AreEqual(1, result["Post_Test1"]["like"]); Assert.AreEqual(1, result["Post_Test2"]["like"]); }
public async Task SearchTest_Ok() { var author = "some_author"; var reactions = new[] { new Reaction("key1", "like"), new Reaction("key2", "wow") }; var keys = reactions.Select(r => r.Key).ToList(); var storageMock = new Mock <IReactionStorage>(); storageMock .Setup(s => s.GetReactionsByAuthorAsync(author, keys)) .ReturnsAsync(reactions); var client = TestServerHelper.New(collection => { collection.AddScoped(_ => storageMock.Object); }); var input = new ReactionsQuery { Keys = keys }; // Act var response = await client.PostAsync($"reactions/search?author={author}", input.AsJsonContent()); var result = await response.Content.DeserializeContent <ReactionDto[]>(); // Assert Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); Assert.AreEqual(2, result.Length); Assert.AreEqual(new ReactionDto(reactions[0].Key, reactions[0].Type), result[0]); Assert.AreEqual(new ReactionDto(reactions[1].Key, reactions[1].Type), result[1]); }
public async Task <ActionResult <IDictionary <string, IDictionary <string, int> > > > GetGroupedReactionsAsync([FromBody] ReactionsQuery model) { return(Ok(await reactionStorage.GetGroupedReactionsAsync(model.Keys))); }
public async Task <ActionResult <IEnumerable <Reaction> > > SearchAsync( [Required, FromQuery] string author, [FromBody] ReactionsQuery model) { return(Ok(await reactionStorage.GetReactionsByAuthorAsync(author, model.Keys))); }