NoteLinkHelper inserts wikilinks into an existing 'Siehe auch' section
or appends one. ApplyPlaceholders fills {{title}}/{{date}}/{{topic}} in
template bodies. new --template <name> fetches a server-side template
before opening the editor. SlugGuard moved to NozCli.Core in a previous
session — remove stale copy from NozCli.
86 lines
3.1 KiB
C#
86 lines
3.1 KiB
C#
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);
|
|
}
|
|
}
|