using Xunit; using NozCli.Core.Client; namespace NozCli.Tests; public class NoteLinkHelperTests { // ── AddLink — neue Sektion ──────────────────────────────────────────────── [Fact] public void AddLink_NoSection_AppendsSieheAuch() { var md = "# Notiz\n\nEtwas Text."; var result = NoteLinkHelper.AddLink(md, "psychologie/flow"); Assert.Contains("## Siehe auch", result); Assert.Contains("- [[psychologie/flow]]", result); } [Fact] public void AddLink_NoSection_BodyUntouched() { var md = "# Notiz\n\nEtwas Text."; var result = NoteLinkHelper.AddLink(md, "psychologie/flow"); Assert.StartsWith("# Notiz\n\nEtwas Text.", result); } // ── AddLink — existierende Sektion ──────────────────────────────────────── [Fact] public void AddLink_ExistingSection_AppendsToSection() { var md = "# Notiz\n\nText.\n\n## Siehe auch\n\n- [[anderes/link]]\n"; var result = NoteLinkHelper.AddLink(md, "psychologie/flow"); Assert.Contains("- [[anderes/link]]", result); Assert.Contains("- [[psychologie/flow]]", result); } [Fact] public void AddLink_AlreadyLinked_NoChange() { var md = "# Notiz\n\n## Siehe auch\n\n- [[psychologie/flow]]\n"; var result = NoteLinkHelper.AddLink(md, "psychologie/flow"); Assert.Equal(md, result); } [Fact] public void AddLink_ExistingSection_DoesNotBleedIntoNextSection() { var md = "# Notiz\n\n## Siehe auch\n\n- [[a]]\n\n## Weiteres\n\nAnderer Inhalt.\n"; var result = NoteLinkHelper.AddLink(md, "b/new-note"); Assert.Contains("- [[b/new-note]]", result); // The new link should appear before "## Weiteres" var linkIdx = result.IndexOf("- [[b/new-note]]", StringComparison.Ordinal); var weitersIdx = result.IndexOf("## Weiteres", StringComparison.Ordinal); Assert.True(linkIdx < weitersIdx); } // ── ApplyPlaceholders ───────────────────────────────────────────────────── [Fact] public void ApplyPlaceholders_ReplacesAllTokens() { var body = "# {{title}}\n\ntopic: {{topic}}\nlang: {{lang}}\nstatus: {{status}}"; var result = NoteLinkHelper.ApplyPlaceholders(body, "Mein Rezept", "kochen", "de", "seed"); Assert.Contains("# Mein Rezept", result); Assert.Contains("topic: kochen", result); Assert.Contains("lang: de", result); Assert.Contains("status: seed", result); Assert.DoesNotContain("{{", result); } [Fact] public void ApplyPlaceholders_DateIsCurrentDay() { var body = "Datum: {{date}}"; var result = NoteLinkHelper.ApplyPlaceholders(body, "", "", "", ""); var today = DateTime.UtcNow.ToString("yyyy-MM-dd"); Assert.Contains(today, result); } }