func NewCoverageReport()

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
}