[Theory] [InlineData("../Kunde2/secret.pdf")] [InlineData("sub/../../Kunde2/secret.pdf")] public void DocumentIdTryParseRejectsPathTraversal(string relativePath) { Assert.False(new DocumentId(UnsafeDocumentIdValue(relativePath)).TryDecode(out _)); } // Test-Hilfsfunktion: erzeugt bewusst eine ID, die die Validierung umgeht. private static string UnsafeDocumentIdValue(string relativePath) => WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(relativePath));