using PrivaPub.Federation.Inbox; using PrivaPub.Federation.Objects; using PrivaPub.Models.Post; namespace PrivaPub.Tests.Federation { public class RemoteEditsTests { static readonly DateTime Published = new(2026, 10, 3, 10, 40, 1, DateTimeKind.Utc); static Post Stored(DateTime? editedAt = default) => new() { CreationDate = Published, EditedAt = editedAt, ContentHtml = "

before

" }; [Fact] public void A_newer_update_is_an_edit_and_an_update_without_a_date_is_a_refresh() { Assert.True(RemoteEdits.IsEdit(new NoteDocument { Updated = Published.AddSeconds(1), ContentHtml = "

before

" }, Stored())); Assert.False(RemoteEdits.IsEdit(new NoteDocument { ContentHtml = "

after

" }, Stored())); Assert.False(RemoteEdits.IsEdit(new NoteDocument { Updated = Published.AddSeconds(-1), ContentHtml = "

after

" }, Stored())); } [Fact] public void An_edit_in_the_second_the_post_was_published_counts_when_the_text_changed() { Assert.True(RemoteEdits.IsEdit(new NoteDocument { Updated = Published, ContentHtml = "

after

" }, Stored())); Assert.True(RemoteEdits.IsEdit(new NoteDocument { Updated = Published, ContentHtml = "

before

", SpoilerText = "now with a warning" }, Stored())); Assert.False(RemoteEdits.IsEdit(new NoteDocument { Updated = Published, ContentHtml = "

before

" }, Stored())); } [Fact] public void After_a_first_edit_only_a_newer_one_counts() { var edited = Published.AddMinutes(1); Assert.False(RemoteEdits.IsEdit(new NoteDocument { Updated = edited, ContentHtml = "

again

" }, Stored(edited))); Assert.True(RemoteEdits.IsEdit(new NoteDocument { Updated = edited.AddSeconds(1), ContentHtml = "

again

" }, Stored(edited))); } } }