Add detailed comparison assertions
This commit is contained in:
@@ -78,6 +78,52 @@ type diffReport struct {
|
||||
Deletions []string `json:"deletions"`
|
||||
}
|
||||
|
||||
type detailedDiffReport struct {
|
||||
Scope string `json:"scope"`
|
||||
Differences []detailedDifference `json:"differences"`
|
||||
}
|
||||
|
||||
type detailedDifference struct {
|
||||
Path string `json:"path"`
|
||||
Before detailedDiffSnapshot `json:"before"`
|
||||
After detailedDiffSnapshot `json:"after"`
|
||||
HiddenChanged bool `json:"hidden_changed"`
|
||||
}
|
||||
|
||||
type detailedDiffSnapshot struct {
|
||||
Present bool `json:"present"`
|
||||
Redacted bool `json:"redacted"`
|
||||
Value any `json:"value"`
|
||||
}
|
||||
|
||||
func renderDetailedDiff(scope string, differences []configkit.Difference) (any, error) {
|
||||
report := detailedDiffReport{Scope: scope, Differences: make([]detailedDifference, 0, len(differences))}
|
||||
for _, difference := range differences {
|
||||
before, err := detailedSnapshot(difference.Left)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("difference at %q before: %w", difference.Path.String(), err)
|
||||
}
|
||||
after, err := detailedSnapshot(difference.Right)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("difference at %q after: %w", difference.Path.String(), err)
|
||||
}
|
||||
report.Differences = append(report.Differences, detailedDifference{Path: difference.Path.String(), Before: before, After: after, HiddenChanged: difference.HiddenChanged})
|
||||
}
|
||||
return report, nil
|
||||
}
|
||||
|
||||
func detailedSnapshot(snapshot configkit.ValueSnapshot) (detailedDiffSnapshot, error) {
|
||||
report := detailedDiffSnapshot{Present: snapshot.Present, Redacted: snapshot.Redacted}
|
||||
if snapshot.Present {
|
||||
value, err := commandkit.DecodeYAMLReport(strings.NewReader(snapshot.YAML))
|
||||
if err != nil {
|
||||
return report, err
|
||||
}
|
||||
report.Value = value
|
||||
}
|
||||
return report, nil
|
||||
}
|
||||
|
||||
func renderDiffReport(differences []configkit.Difference) (any, error) {
|
||||
report := diffReport{Additions: map[string]any{}, Changes: map[string]any{}, Deletions: []string{}}
|
||||
for _, difference := range differences {
|
||||
|
||||
Reference in New Issue
Block a user