Пример #1
0
        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);
            }));
Пример #2
0
        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"]);
        }
Пример #3
0
        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]);
        }
Пример #4
0
 public async Task <ActionResult <IDictionary <string, IDictionary <string, int> > > > GetGroupedReactionsAsync([FromBody] ReactionsQuery model)
 {
     return(Ok(await reactionStorage.GetGroupedReactionsAsync(model.Keys)));
 }
Пример #5
0
 public async Task <ActionResult <IEnumerable <Reaction> > > SearchAsync(
     [Required, FromQuery] string author,
     [FromBody] ReactionsQuery model)
 {
     return(Ok(await reactionStorage.GetReactionsByAuthorAsync(author, model.Keys)));
 }