diff --git a/src/SIL.XForge.Scripture/Services/IParatextDataHelper.cs b/src/SIL.XForge.Scripture/Services/IParatextDataHelper.cs index ec740aad89..1833b49a42 100644 --- a/src/SIL.XForge.Scripture/Services/IParatextDataHelper.cs +++ b/src/SIL.XForge.Scripture/Services/IParatextDataHelper.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -12,11 +11,6 @@ namespace SIL.XForge.Scripture.Services; public interface IParatextDataHelper { void CommitVersionedText(ScrText scrText, string comment); - IReadOnlyList GetNotes( - CommentManager? commentManager, - CommentTags? commentTags, - Func? predicate = null, - bool includeInactiveThreads = true - ); + IReadOnlyList GetNotes(CommentManager commentManager, CommentTags commentTags); Task MigrateResourceIfRequiredAsync(ScrText scrText, LanguageId? overrideLanguage, CancellationToken token); } diff --git a/src/SIL.XForge.Scripture/Services/ParatextDataHelper.cs b/src/SIL.XForge.Scripture/Services/ParatextDataHelper.cs index 06c803bf8b..f73f20f0cd 100644 --- a/src/SIL.XForge.Scripture/Services/ParatextDataHelper.cs +++ b/src/SIL.XForge.Scripture/Services/ParatextDataHelper.cs @@ -38,18 +38,13 @@ public void CommitVersionedText(ScrText scrText, string comment) vText.Commit(comment, null, false); } - public IReadOnlyList GetNotes( - CommentManager? commentManager, - CommentTags? commentTags, - Func? predicate = null, - bool includeInactiveThreads = true - ) + public IReadOnlyList GetNotes(CommentManager commentManager, CommentTags commentTags) { - if (commentManager == null) - return Array.Empty(); - - Func filter = predicate ?? (_ => true); - IEnumerable threads = commentManager.FindThreads(filter, includeInactiveThreads); + // Only return note threads that are not resolved and active + IEnumerable threads = commentManager.FindThreads( + t => t.Status != NoteStatus.Resolved, + activeOnly: true + ); var notes = new List(); foreach (CommentThread thread in threads) @@ -156,7 +151,7 @@ CancellationToken token } } - private static ParatextNoteComment CreateNoteComment(ParatextComment comment, CommentTags? commentTags) + private static ParatextNoteComment CreateNoteComment(ParatextComment comment, CommentTags commentTags) { ParatextNoteTag? tag = null; if (comment.TagsAdded is { Length: > 0 }) @@ -181,24 +176,14 @@ private static ParatextNoteComment CreateNoteComment(ParatextComment comment, Co }; } - private static ParatextNoteTag CreateNoteTag(int tagId, CommentTags? commentTags) + private static ParatextNoteTag CreateNoteTag(int tagId, CommentTags commentTags) { - if (commentTags != null) - { - CommentTag commentTag = commentTags.Get(tagId); - return new ParatextNoteTag - { - Id = commentTag.Id, - Name = commentTag.Name ?? string.Empty, - Icon = commentTag.Icon ?? string.Empty, - }; - } - + CommentTag commentTag = commentTags.Get(tagId); return new ParatextNoteTag { - Id = tagId, - Name = string.Empty, - Icon = string.Empty, + Id = commentTag.Id, + Name = commentTag.Name ?? string.Empty, + Icon = commentTag.Icon ?? string.Empty, }; } diff --git a/src/SIL.XForge.Scripture/Services/ParatextService.cs b/src/SIL.XForge.Scripture/Services/ParatextService.cs index 2679635e60..0aea1ae527 100644 --- a/src/SIL.XForge.Scripture/Services/ParatextService.cs +++ b/src/SIL.XForge.Scripture/Services/ParatextService.cs @@ -1276,7 +1276,7 @@ public async Task PutBookText( return null; CommentManager manager = CommentManager.Get(scrText); - CommentTags? commentTags = CommentTags.Get(scrText); + CommentTags commentTags = CommentTags.Get(scrText); return _paratextDataHelper.GetNotes(manager, commentTags); } diff --git a/test/SIL.XForge.Scripture.Tests/Services/ParatextDataHelperTests.cs b/test/SIL.XForge.Scripture.Tests/Services/ParatextDataHelperTests.cs index 6c0913b4c3..553519c845 100644 --- a/test/SIL.XForge.Scripture.Tests/Services/ParatextDataHelperTests.cs +++ b/test/SIL.XForge.Scripture.Tests/Services/ParatextDataHelperTests.cs @@ -13,6 +13,7 @@ using Paratext.Data.ProjectFileAccess; using Paratext.Data.ProjectSettingsAccess; using Paratext.Data.Repository; +using PtxUtils; using SIL.WritingSystems; using SIL.XForge.Scripture.Models; using SIL.XForge.Services; @@ -126,25 +127,20 @@ public void GetNotes_IncludesThreadsWithDeletedComments() } [Test] - public void GetNotes_FiltersThreadsWithPredicate() + public void GetNotes_ExcludeResolvedThreads() { var env = new TestEnvironment(); using MockScrText scrText = env.GetScrText(HexId.CreateNew().ToString()); var commentManager = CommentManager.Get(scrText); var commentTags = new MockCommentTags(scrText); - commentTags.InitializeTagList([2]); - TestEnvironment.AddComment(scrText, "thread-05", "RUT 1:5", "First", "2"); - TestEnvironment.AddComment(scrText, "thread-06", "RUT 1:6", "Second", "2"); + commentTags.InitializeTagList([5]); + TestEnvironment.AddComment(scrText, "thread-04", "RUT 1:4", "Note to resolve", "5"); + TestEnvironment.AddComment(scrText, "thread-04", "RUT 1:4", "This is resolved", "5", resolved: true); // SUT - IReadOnlyList notes = env.Service.GetNotes( - commentManager, - commentTags, - thread => string.Equals(thread.Id, "thread-06", StringComparison.Ordinal) - ); + IReadOnlyList notes = env.Service.GetNotes(commentManager, commentTags); - Assert.AreEqual(1, notes.Count); - Assert.AreEqual("thread-06", notes[0].Id); + Assert.AreEqual(0, notes.Count); } [Test] @@ -345,7 +341,8 @@ public static void AddComment( string verseRef, string content, string? tagValue, - bool deleted = false + bool deleted = false, + bool resolved = false ) { XmlDocument doc = new XmlDocument(); @@ -362,6 +359,7 @@ public static void AddComment( Contents = root, DateTime = DateTimeOffset.UtcNow, Deleted = deleted, + Status = resolved ? NoteStatus.Resolved : NoteStatus.Todo, SelectedText = string.Empty, StartPosition = 0, }; diff --git a/test/SIL.XForge.Scripture.Tests/Services/ParatextServiceTests.cs b/test/SIL.XForge.Scripture.Tests/Services/ParatextServiceTests.cs index 54efbac3a6..5a5e3c77d9 100644 --- a/test/SIL.XForge.Scripture.Tests/Services/ParatextServiceTests.cs +++ b/test/SIL.XForge.Scripture.Tests/Services/ParatextServiceTests.cs @@ -867,24 +867,13 @@ public void GetNoteThreads_ReturnsNotesFromDataHelper() Comments = Array.Empty(), }, }; - env.MockParatextDataHelper.GetNotes( - Arg.Any(), - Arg.Any(), - Arg.Any>(), - Arg.Any() - ) - .Returns(expectedNotes); + env.MockParatextDataHelper.GetNotes(Arg.Any(), Arg.Any()).Returns(expectedNotes); IReadOnlyList actual = env.Service.GetNoteThreads(userSecret, paratextId); Assert.AreSame(expectedNotes, actual); env.MockParatextDataHelper.Received(1) - .GetNotes( - env.ProjectCommentManager, - Arg.Is(tags => tags != null), - Arg.Any>(), - true - ); + .GetNotes(env.ProjectCommentManager, Arg.Is(tags => tags != null)); } [Test]