41 lines
1.4 KiB
C#
41 lines
1.4 KiB
C#
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");
|
|
}
|
|
}
|