Forge
csharpdeeb25a2
1using CascadeIDE.Features.Agent.Environment;
2using CascadeIDE.Services;
3using Xunit;
4
5namespace CascadeIDE.Tests;
6
7public sealed class ShellEscapePolicyTests
8{
9 [Fact]
10 public void Deny_Allows_OpenFile()
11 {
12 Assert.Null(ShellEscapePolicy.TryBlockJson(IdeCommands.OpenFile, "deny"));
13 }
14
15 [Fact]
16 public void Deny_Block_Build_ReturnsJson()
17 {
18 var json = ShellEscapePolicy.TryBlockJson(IdeCommands.Build, "deny");
19 Assert.NotNull(json);
20 Assert.Contains("shell_escape_blocked", json, StringComparison.Ordinal);
21 Assert.Contains(IdeCommands.Build, json, StringComparison.Ordinal);
22 Assert.Contains("ide_agent_verify", json, StringComparison.Ordinal);
23 }
24
25 [Fact]
26 public void TestsOnly_Allows_RunTests()
27 {
28 Assert.Null(ShellEscapePolicy.TryBlockJson(IdeCommands.RunTests, ShellEscapeTier.TestsOnly));
29 }
30
31 [Fact]
32 public void TestsOnly_Block_Build()
33 {
34 var json = ShellEscapePolicy.TryBlockJson(IdeCommands.BuildStructured, ShellEscapeTier.TestsOnly);
35 Assert.NotNull(json);
36 Assert.Contains("shell_escape_blocked", json, StringComparison.Ordinal);
37 }
38
39 [Fact]
40 public void AllowWithAudit_Build_NotBlocked()
41 {
42 Assert.Null(ShellEscapePolicy.TryBlockJson(IdeCommands.RunCodeCleanup, "allow_with_audit"));
43 }
44}
45
View only · write via MCP/CIDE