in tf/utils.go [209:262]
func NewCoverageReport(plan *tfjson.Plan, swaggerPath string) (coverage.CoverageReport, error) {
defer func() {
if r := recover(); r != nil {
logrus.Errorf("panic when producing coverage report: %+v", r)
}
}()
out := coverage.CoverageReport{
Coverages: make(map[string]*coverage.CoverageItem, 0),
}
if plan == nil {
return out, nil
}
for _, resourceChange := range plan.ResourceChanges {
if resourceChange.Type != "azapi_resource" {
continue
}
if resourceChange == nil || resourceChange.Change == nil {
continue
}
if actions := resourceChange.Change.Actions; len(actions) == 1 && (actions[0] == tfjson.ActionNoop || actions[0] == tfjson.ActionUpdate) {
outMap, beforeMapOk := resourceChange.Change.Before.(map[string]interface{})
if !beforeMapOk {
continue
}
beforeMap := DeepCopy(outMap).(map[string]interface{})
id := ""
if v, ok := beforeMap["id"]; ok {
id = v.(string)
}
resourceType := ""
if v, ok := beforeMap["type"]; ok {
resourceType = v.(string)
}
body, err := getBody(beforeMap)
if err != nil {
return out, err
}
err = out.AddCoverageFromState(id, resourceType, body, swaggerPath)
if err != nil {
return out, err
}
}
}
return out, nil
}