using FluentAssertions; namespace StellaOps.Audit.ReplayToken.Tests; public sealed class ReplayCliSnippetGeneratorTests { [Fact] public void GenerateDecisionReplay_QuotesValuesAndOmitsPlus() { var generator = new ReplayCliSnippetGenerator(); var token = new ReplayToken("abc123", DateTimeOffset.UnixEpoch); var output = generator.GenerateDecisionReplay( token, "alert 1", "file:///tmp/with space", "policy v1"); // Multiline output with backslash continuation, check each part separately output.Should().Contain("'abc123'"); output.Should().Contain("'alert 1'"); output.Should().Contain("'file:///tmp/with space'"); output.Should().Contain("'policy v1'"); output.Should().NotContain("\n+"); } [Fact] public void GenerateScoringReplay_EscapesSingleQuotes() { var generator = new ReplayCliSnippetGenerator(); var token = new ReplayToken("abc123", DateTimeOffset.UnixEpoch); var output = generator.GenerateScoringReplay(token, "subject'key", "config'v1"); // Check for the escaped single quotes (bash-style escaping: '...'\"'\"'...') // The single quote inside is escaped as '"'"' (end quote, double-quote single-quote, start quote) output.Should().Contain("subject'\"'\"'key"); output.Should().Contain("config'\"'\"'v1"); } }