func testResultLink()

in pkg/summarizer/summary.go [914:957]


func testResultLink(template *configpb.LinkTemplate, properties map[string]string, testID, target, buildID, gcsPrefix string, propertyToColumnHeader map[string]string, customColumnHeaders map[string]string) string {
	// Return the result of open_test_template for the tab.
	// This assumes that open_test_template uses a limited set of tokens (since it's not in the context of a browser).
	// Assume that the following are valid: <gcs_prefix>, <test-name>, <workflow-id>, <workflow-name>, <test-id>, <build ID>
	// TODO: Ensure workflow-id, workflow-name are added in alerts.
	tokens := util.Tokens(template)
	parameters := map[string]string{}
	for _, token := range tokens {
		switch token {
		case util.GcsPrefix:
			parameters[util.GcsPrefix] = gcsPrefix
		case util.TestName:
			parameters[util.TestName] = target
		case util.WorkflowID:
			if workflowID, ok := properties["workflow-id"]; ok {
				parameters[util.WorkflowID] = workflowID
			}
		case util.WorkflowName:
			if WorkflowName, ok := properties["workflow-name"]; ok {
				parameters[util.WorkflowName] = WorkflowName
			}
		case util.TestID:
			parameters[util.TestID] = testID
		case util.BuildID:
			parameters[util.BuildID] = buildID
		case util.CustomColumnRe.FindString(token):
			if v, ok := customColumnHeaders[propertyToColumnHeader[token]]; ok {
				parameters[token] = v
			}
		default:
			// Didn't match any simple tokens, check if it's a property.
			trimmedToken := strings.NewReplacer("<", "", ">", "").Replace(token)
			if v, ok := properties[trimmedToken]; ok {
				parameters[token] = v
			}
		}
	}
	link, err := util.ExpandTemplate(template, parameters)
	if err != nil {
		logrus.WithError(err).WithField("template", template).WithField("parameters", parameters).Error("Error expanding link template.")
		return ""
	}
	return link
}