Ejemplo n.º 1
0
        public async Task <ReactionsCountServiceModel> ReactAsync(ReactionType reactionType, int replyId, string authorId)
        {
            var replyReaction = await this.db.ReplyReactions
                                .FirstOrDefaultAsync(rr => rr.ReplyId == replyId && rr.AuthorId == authorId);

            if (replyReaction == null)
            {
                replyReaction = new ReplyReaction
                {
                    ReactionType = reactionType,
                    ReplyId      = replyId,
                    AuthorId     = authorId,
                    CreatedOn    = this.dateTimeProvider.Now()
                };

                await this.db.ReplyReactions.AddAsync(replyReaction);
            }
            else
            {
                replyReaction.ModifiedOn   = this.dateTimeProvider.Now();
                replyReaction.ReactionType = replyReaction.ReactionType == reactionType
                    ? ReactionType.Neutral
                    : reactionType;
            }

            await this.db.SaveChangesAsync();

            return(await this.GetCountByReplyIdAsync(replyId));
        }
Ejemplo n.º 2
0
 public IHttpActionResult PostAReplyReaction(ReplyReaction replyReaction)
 {
     if (!ModelState.IsValid)
     {
         return(BadRequest());
     }
     db.ReplyReactions.Add(replyReaction);
     db.SaveChanges();
     return(Created(new Uri(Request.RequestUri + "/" + replyReaction.Id), replyReaction));
 }
Ejemplo n.º 3
0
      public IHttpActionResult UpdateAReplyReaction(long id, ReplyReaction replyReaction)
      {
          if (!ModelState.IsValid)
          {
              return(BadRequest());
          }

          var replayReactionInDb = db.ReplyReactions.Where(i => i.Id == id).FirstOrDefault();

          if (replayReactionInDb == null)
          {
              return(NotFound());
          }
          replayReactionInDb.IsHelpfull = replyReaction.IsHelpfull;
          replayReactionInDb.IsLiked    = replyReaction.IsLiked;
          db.SaveChanges();
          return(Ok());
      }
Ejemplo n.º 4
0
        public async Task ReactMethodShouldChangeReactionIfAlreadyExistsAndChangeModifiedOn(ReactionType type)
        {
            var guid = Guid.NewGuid().ToString();

            var options = new DbContextOptionsBuilder <ForumDbContext>()
                          .UseInMemoryDatabase(guid)
                          .Options;

            var db = new ForumDbContext(options);
            var dateTimeProvider = new Mock <IDateTimeProvider>();

            dateTimeProvider.Setup(dtp => dtp.Now()).Returns(new DateTime(2020, 3, 27));

            var postReaction = new ReplyReaction
            {
                Id           = 1,
                ReplyId      = 1,
                AuthorId     = guid,
                ReactionType = ReactionType.Like,
                CreatedOn    = dateTimeProvider.Object.Now()
            };

            await db.ReplyReactions.AddAsync(postReaction);

            await db.SaveChangesAsync();

            var replyReactionsService = new ReplyReactionsService(db, dateTimeProvider.Object);
            var result = await replyReactionsService.ReactAsync(type, 1, guid);

            var actual = await db.ReplyReactions.FirstOrDefaultAsync();

            var expected = new ReplyReaction
            {
                Id           = 1,
                ReplyId      = 1,
                AuthorId     = guid,
                ReactionType = type,
                CreatedOn    = dateTimeProvider.Object.Now(),
                ModifiedOn   = dateTimeProvider.Object.Now()
            };

            actual.Should().BeEquivalentTo(expected);
            result.Should().BeOfType <ReactionsCountServiceModel>();
        }
Ejemplo n.º 5
0
        public async Task GetTotalCountMethodShouldReturnAllPostReactionsCount()
        {
            var guid = Guid.NewGuid().ToString();

            var options = new DbContextOptionsBuilder <ForumDbContext>()
                          .UseInMemoryDatabase(guid)
                          .Options;

            var db = new ForumDbContext(options);
            var dateTimeProvider = new Mock <IDateTimeProvider>();

            dateTimeProvider.Setup(dtp => dtp.Now()).Returns(new DateTime(2020, 3, 27));

            var reply = new Reply
            {
                Id          = 1,
                Description = "Test description",
                AuthorId    = guid,
                CreatedOn   = dateTimeProvider.Object.Now()
            };

            var replyReaction = new ReplyReaction
            {
                Id           = 1,
                ReplyId      = 1,
                AuthorId     = guid,
                ReactionType = ReactionType.Like,
                CreatedOn    = dateTimeProvider.Object.Now()
            };

            await db.Replies.AddAsync(reply);

            await db.ReplyReactions.AddAsync(replyReaction);

            await db.SaveChangesAsync();

            var replyReactionsService = new ReplyReactionsService(db, dateTimeProvider.Object);
            var count = await replyReactionsService.GetTotalCountAsync();

            count.Should().Be(1);
        }