Esempio n. 1
0
        public async Task Should_get_comments_from_grain()
        {
            var commentsId = DomainId.NewGuid();
            var comments   = new CommentsResult();

            var grain = A.Fake <ICommentsGrain>();

            A.CallTo(() => grain.GetCommentsAsync(11))
            .Returns(comments);

            A.CallTo(() => grainFactory.GetGrain <ICommentsGrain>(commentsId.ToString(), null))
            .Returns(grain);

            var result = await sut.GetCommentsAsync(commentsId, 11);

            Assert.Same(comments, result);
        }
Esempio n. 2
0
        public static CommentsResult FromEvents(IEnumerable <Envelope <CommentsEvent> > events, long currentVersion, int lastVersion)
        {
            var result = new CommentsResult {
                Version = currentVersion
            };

            foreach (var @event in events.Skip(lastVersion < 0 ? 0 : lastVersion + 1))
            {
                switch (@event.Payload)
                {
                case CommentDeleted deleted:
                {
                    var id = deleted.CommentId;

                    if (result.CreatedComments.Any(x => x.Id == id))
                    {
                        result.CreatedComments.RemoveAll(x => x.Id == id);
                    }
                    else if (result.UpdatedComments.Any(x => x.Id == id))
                    {
                        result.UpdatedComments.RemoveAll(x => x.Id == id);
                        result.DeletedComments.Add(id);
                    }
                    else
                    {
                        result.DeletedComments.Add(id);
                    }

                    break;
                }

                case CommentCreated created:
                {
                    var comment = new Comment(
                        created.CommentId,
                        @event.Headers.Timestamp(),
                        @event.Payload.Actor,
                        created.Text,
                        created.Url);

                    result.CreatedComments.Add(comment);
                    break;
                }

                case CommentUpdated updated:
                {
                    var id = updated.CommentId;

                    var comment = new Comment(
                        id,
                        @event.Headers.Timestamp(),
                        @event.Payload.Actor,
                        updated.Text,
                        null);

                    if (result.CreatedComments.Any(x => x.Id == id))
                    {
                        result.CreatedComments.RemoveAll(x => x.Id == id);
                        result.CreatedComments.Add(comment);
                    }
                    else
                    {
                        result.UpdatedComments.Add(comment);
                    }

                    break;
                }
                }
            }

            return(result);
        }
Esempio n. 3
0
 public Task <CommentsResult> GetCommentsAsync(long version = EtagVersion.Any)
 {
     return(Task.FromResult(CommentsResult.FromEvents(events, Version, (int)version)));
 }