namespace ItWorx.KnowledgeHub.Domain.Tests; using ItWorx.KnowledgeHub.Domain.Knowledge; /// V2-R1 (audit finding M3): a draft must capture every field the editor /// actually lets a user change, not just title/Markdown, so a metadata-only edit is /// recoverable exactly like a content edit is. public sealed class DraftTests { private static readonly DateTimeOffset Now = new(2026, 8, 3, 12, 0, 0, TimeSpan.Zero); [Fact] public void Create_captures_tags_document_type_status_and_change_summary() { var draft = Draft.Create( Guid.NewGuid(), Guid.NewGuid(), "draft-key", null, null, "Titel", "Markdown", ["netwerk", "referentie"], "Runbook", "Active", "Kleine wijziging", Now, TimeSpan.FromDays(14)); Assert.Equal(["netwerk", "referentie"], draft.Tags); Assert.Equal("Runbook", draft.DocumentType); Assert.Equal("Active", draft.DocumentStatus); Assert.Equal("Kleine wijziging", draft.ChangeSummary); } [Fact] public void Create_with_no_metadata_defaults_to_an_empty_tag_list_and_null_metadata_never_null_reference() { var draft = Draft.Create( Guid.NewGuid(), Guid.NewGuid(), "draft-key", null, null, "Titel", "Markdown", null, null, null, null, Now, TimeSpan.FromDays(14)); Assert.Empty(draft.Tags); Assert.Null(draft.DocumentType); Assert.Null(draft.DocumentStatus); Assert.Null(draft.ChangeSummary); } [Fact] public void Update_replaces_every_field_including_a_metadata_only_change() { var draft = Draft.Create( Guid.NewGuid(), Guid.NewGuid(), "draft-key", null, null, "Titel", "Markdown", ["oud"], "WikiPage", "Draft", null, Now, TimeSpan.FromDays(14)); draft.Update("Titel", "Markdown", ["nieuw"], "Runbook", "Active", "Bijgewerkt", Now.AddMinutes(1), TimeSpan.FromDays(14)); Assert.Equal(["nieuw"], draft.Tags); Assert.Equal("Runbook", draft.DocumentType); Assert.Equal("Active", draft.DocumentStatus); Assert.Equal("Bijgewerkt", draft.ChangeSummary); Assert.Equal(Now.AddMinutes(1), draft.UpdatedAt); Assert.Equal(Now.AddMinutes(1).AddDays(14), draft.ExpiresAt); } }