Forge
csharpdeeb25a2
1using CascadeIDE.Cockpit.DataBus;
2using CascadeIDE.Features.Agent.Environment;
3using Xunit;
4
5namespace CascadeIDE.Tests;
6
7public sealed class AgentVerifyEpochFormatterTests
8{
9 [Fact]
10 public void FormatCompletedChatTrace_UsesSemanticRungs()
11 {
12 var evt = new AgentRunCompleted(
13 "deadbeef-cafe-babe-0000-000000000001",
14 Green: true,
15 MaxRungReached: VerifyRung.BuildAffected,
16 TimeSlices:
17 [
18 new(AgentRunPhaseKind.Environment, 0.8, $"{VerifyRung.DiagnoseFiles} ok"),
19 new(AgentRunPhaseKind.Environment, 9.1, $"{VerifyRung.BuildAffected} ok"),
20 new(AgentRunPhaseKind.Reasoning, 4.2, null),
21 ]);
22
23 var text = AgentVerifyEpochFormatter.FormatCompletedChatTrace(evt);
24
25 Assert.Contains("✓ diagnose.files", text);
26 Assert.Contains("✓ build.affected", text);
27 Assert.Contains("Status: green · max rung: build.affected", text);
28 }
29
30 [Fact]
31 public void ShouldDisplayGreen_RequiresNotStale()
32 {
33 Assert.True(AgentVerifyEpochFormatter.ShouldDisplayGreen(true, isStale: false, VerifyRung.BuildAffected));
34 Assert.False(AgentVerifyEpochFormatter.ShouldDisplayGreen(true, isStale: true, VerifyRung.BuildAffected));
35 Assert.False(AgentVerifyEpochFormatter.ShouldDisplayGreen(false, isStale: false, VerifyRung.BuildAffected));
36 }
37
38 [Fact]
39 public void Instrument_OnRunCompleted_FreezesRungList()
40 {
41 var instrument = new AgentVerifyEpochInstrument();
42 instrument.OnRunStarted(new AgentRunStarted(
43 "run-001",
44 "snap-abc",
45 "standard",
46 "C:\\repo\\App.sln"));
47
48 instrument.OnRunCompleted(new AgentRunCompleted(
49 "run-001",
50 Green: true,
51 MaxRungReached: VerifyRung.BuildAffected,
52 TimeSlices:
53 [
54 new(AgentRunPhaseKind.Environment, 0.5, $"{VerifyRung.DiagnoseFiles} ok"),
55 new(AgentRunPhaseKind.Environment, 2.0, $"{VerifyRung.BuildAffected} ok"),
56 ]));
57
58 var snap = instrument.Snapshot();
59 Assert.Contains("✓ build.affected", snap.ExpandedText);
60 Assert.Contains("green (standard)", snap.ExpandedText);
61 Assert.True(snap.DisplayGreen);
62 Assert.Contains("✓ build.affected · green (standard)", snap.CompactLine);
63 }
64
65 [Fact]
66 public void Instrument_OnEpochStale_SuppressesGreen()
67 {
68 var instrument = new AgentVerifyEpochInstrument();
69 instrument.OnRunStarted(new AgentRunStarted("run-002", "snap", "standard", null));
70 instrument.OnRunCompleted(new AgentRunCompleted(
71 "run-002",
72 Green: true,
73 MaxRungReached: VerifyRung.BuildAffected,
74 TimeSlices:
75 [
76 new(AgentRunPhaseKind.Environment, 1.0, $"{VerifyRung.BuildAffected} ok"),
77 ]));
78 instrument.OnEpochStale(new AgentVerifyEpochStale("run-002", "snap", "write_in_epoch"));
79
80 var snap = instrument.Snapshot();
81 Assert.False(snap.DisplayGreen);
82 Assert.Contains("⚠ verify устарел", snap.CompactLine);
83 Assert.True(snap.ShowRetry);
84 }
85}
86
View only · write via MCP/CIDE