(t *testing.T)
| 637 | } |
| 638 | |
| 639 | func TestAuditDiffJSONSerialization(t *testing.T) { |
| 640 | summary1 := &RunSummary{ |
| 641 | FirewallAnalysis: &FirewallAnalysis{ |
| 642 | RequestsByDomain: map[string]DomainRequestStats{ |
| 643 | "api.github.com:443": {Allowed: 5}, |
| 644 | }, |
| 645 | }, |
| 646 | MCPToolUsage: &MCPToolUsageData{ |
| 647 | Summary: []MCPToolSummary{ |
| 648 | {ServerName: "github", ToolName: "issue_read", CallCount: 3}, |
| 649 | }, |
| 650 | }, |
| 651 | Run: WorkflowRun{TokenUsage: 1000, Turns: 4}, |
| 652 | } |
| 653 | summary2 := &RunSummary{ |
| 654 | FirewallAnalysis: &FirewallAnalysis{ |
| 655 | RequestsByDomain: map[string]DomainRequestStats{ |
| 656 | "api.github.com:443": {Allowed: 5}, |
| 657 | "new.example.com:443": {Allowed: 2}, |
| 658 | }, |
| 659 | }, |
| 660 | MCPToolUsage: &MCPToolUsageData{ |
| 661 | Summary: []MCPToolSummary{ |
| 662 | {ServerName: "github", ToolName: "issue_read", CallCount: 5}, |
| 663 | }, |
| 664 | }, |
| 665 | Run: WorkflowRun{TokenUsage: 1500, Turns: 6}, |
| 666 | } |
| 667 | |
| 668 | diff := computeAuditDiff(100, 200, summary1, summary2) |
| 669 | |
| 670 | data, err := json.MarshalIndent(diff, "", " ") |
| 671 | require.NoError(t, err, "Should serialize AuditDiff to JSON") |
| 672 | |
| 673 | var parsed AuditDiff |
| 674 | err = json.Unmarshal(data, &parsed) |
| 675 | require.NoError(t, err, "Should deserialize AuditDiff from JSON") |
| 676 | |
| 677 | assert.Equal(t, int64(100), parsed.Run1ID, "Run1ID should survive serialization") |
| 678 | assert.Equal(t, int64(200), parsed.Run2ID, "Run2ID should survive serialization") |
| 679 | require.NotNil(t, parsed.FirewallDiff, "FirewallDiff should survive serialization") |
| 680 | assert.Len(t, parsed.FirewallDiff.NewDomains, 1, "New domains should survive serialization") |
| 681 | require.NotNil(t, parsed.MCPToolsDiff, "MCPToolsDiff should survive serialization") |
| 682 | require.NotNil(t, parsed.RunMetricsDiff, "RunMetricsDiff should survive serialization") |
| 683 | assert.Equal(t, 1000, parsed.RunMetricsDiff.Run1TokenUsage, "Token usage should survive serialization") |
| 684 | } |
| 685 | |
| 686 | func TestFormatCountChange(t *testing.T) { |
| 687 | tests := []struct { |
nothing calls this directly
no test coverage detected