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); }
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); }
public Task <CommentsResult> GetCommentsAsync(long version = EtagVersion.Any) { return(Task.FromResult(CommentsResult.FromEvents(events, Version, (int)version))); }