sqlinsight-pro/tests/SQLInsight.Community.Tests/DocsTests.cs
Claude be35e50335
Some checks are pending
CI / Integration (mcr.microsoft.com/mssql/server:2025-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2019-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2022-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2017-latest) (push) Blocked by required conditions
CI / Build og unit tests (push) Successful in 1m1s
deploy hub / deploy (push) Successful in 19s
CI / MSI-installer (push) Successful in 36s
Community-websted og Discourse-forum
- src/SQLInsight.Community: offentligt websted med forside, funktioner, download
  af signerede udgivelser (med SHA-256), dokumentation fra docs/, SQL Server-
  versioner fra den nyeste signerede regelpakke, regler og supportaftaler.
  Viser de seneste forumemner. Streng CSP, ingen login, ingen database.
- deploy/forum: Discourse-opsætning (app.yml til discourse_docker, dansk
  sprog og søgning), install.sh og configure.py, der idempotent opsætter
  kategorier, løste svar, velkomstemne og indstillinger via API'et.
- deploy/community: Dockerfile og docker compose med Caddy til TLS.
- Webbrugerfladen linker til forum, dokumentation og support på webstedet
  (SQLInsight:Web:ForumUrl og CommunityUrl).
- Udgivelsesfiler hedder sqlinsight-<version>-<platform>.<ext>.
- Tests: sider, 404, signerede og manipulerede feeds, forum (også nede),
  dokumentationslinks og regler.
- docs/community.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3EExwndy8Z22EK2Qpt6BK
2026-09-29 13:45:06 +00:00

30 lines
1.5 KiB
C#

using SQLInsight.Community.Services;
namespace SQLInsight.Community.Tests;
public sealed class DocsTests
{
private const string Source = "https://git.example/seo/sqlinsight-pro";
[Theory]
[InlineData("opdatering.md", "/dokumentation/opdatering")]
[InlineData("installation.md#msi", "/dokumentation/installation#msi")]
[InlineData("#afsnit", "#afsnit")]
[InlineData("https://learn.microsoft.com/sql", "https://learn.microsoft.com/sql")]
[InlineData("../db/permissions/grant-least-privilege.sql", Source + "/src/branch/main/db/permissions/grant-least-privilege.sql")]
[InlineData("images/x.png", Source + "/src/branch/main/docs/images/x.png")]
[InlineData("../README.md#status", Source + "/src/branch/main/README.md#status")]
public void Links_are_rewritten(string url, string expected) => Assert.Equal(expected, DocsService.Rewrite(url, Source));
[Fact]
public void Markdown_html_is_not_rendered_and_title_is_taken_from_h1()
{
var page = DocsService.Render("x", "resumé", "# Titel\n\nTekst <script>alert(1)</script> [link](regler.md)\n\n## Afsnit A\n", Source);
Assert.Equal("Titel", page.Title);
Assert.DoesNotContain("<script>", page.Html, StringComparison.Ordinal);
Assert.DoesNotContain("<h1", page.Html, StringComparison.Ordinal);
Assert.Contains("href=\"/dokumentation/regler\"", page.Html, StringComparison.Ordinal);
Assert.Contains("id=\"afsnit-a\"", page.Html, StringComparison.Ordinal);
}
}