public void Test(CommentSet set) { var trackedLine = CommentTracker.Track(set.CommentVersion, set.Right, set.CommentLine); Assert.That(trackedLine, Is.EqualTo(set.ExpectedCommentLineOnRight), "Comment should be tracked to correct line"); }
public async Task <Result> Execute(GetDiffDiscussions query) { if (query.FileId.IsProvisional) { return(new Result { Remapped = new List <RemappedDiscussion>() }); } var headRevision = _session.Query <ReviewRevision>().Where(x => x.ReviewId == query.ReviewId && x.HeadCommit == query.Commits.CurrentHead).FirstOrDefault(); var q = from discussion in _session.Query <FileDiscussion>() join revision in _session.Query <ReviewRevision>() on discussion.RevisionId equals revision.Id where revision.ReviewId == query.ReviewId where discussion.FileId == query.FileId.PersistentId select new { DiscussionId = discussion.Id, RevisionId = revision.Id, RevisionNo = revision.RevisionNumber, RevisionHead = revision.HeadCommit, RevisionBase = revision.BaseCommit, Line = discussion.LineNumber, Comment = discussion.RootComment.Content }; if (headRevision != null) { q = q.Where(x => x.RevisionNo <= headRevision.RevisionNumber); } var discussions = q.ToList(); var remapped = new List <RemappedDiscussion>(); foreach (var discussion in discussions) { // is left? if (discussion.RevisionBase == query.Commits.PreviousBase && discussion.RevisionHead == query.Commits.PreviousHead) { remapped.Add(RemappedDiscussion.ForSide("left", discussion.DiscussionId, discussion.Line, discussion.Comment)); continue; } // is right? if (discussion.RevisionBase == query.Commits.CurrentBase && discussion.RevisionHead == query.Commits.CurrentHead) { remapped.Add(RemappedDiscussion.ForSide("right", discussion.DiscussionId, discussion.Line, discussion.Comment)); continue; } // remap var commentFileName = FindFileNameForRevision(query.FileId.PersistentId, discussion.RevisionId); string rightFileName; if (headRevision != null) { rightFileName = FindFileNameForCommit(query.FileId.PersistentId, query.Commits.CurrentHead); } else { rightFileName = query.RightFileName; } var commentContent = await _api.GetFileContent(query.ReviewId.ProjectId, discussion.RevisionHead, commentFileName).Then(x => x.DecodeString()); var rightContent = await _api.GetFileContent(query.ReviewId.ProjectId, query.Commits.CurrentHead, rightFileName).Then(x => x.DecodeString()); var trackedLine = CommentTracker.Track(commentContent, rightContent, discussion.Line); remapped.Add(new RemappedDiscussion { DiscussionId = discussion.DiscussionId, LineNumber = trackedLine, OldLineNumber = discussion.Line, Side = "right", Comment = discussion.Comment }); } return(new Result { Remapped = remapped, }); }