Skip to content
6 changes: 3 additions & 3 deletions lib/reporting/report_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ var (
// sarif results
result1Sarif = Results{
Message: Message{
Text: messageText(result1.RuleID, result1.Source),
Text: createMessageText(result1.RuleID, result1.Source),
},
RuleId: ruleID1,
Locations: []Locations{
Expand Down Expand Up @@ -115,7 +115,7 @@ var (
}
result2Sarif = Results{
Message: Message{
Text: messageText(result2.RuleID, result2.Source),
Text: createMessageText(result2.RuleID, result2.Source),
},
RuleId: ruleID2,
Locations: []Locations{
Expand Down Expand Up @@ -146,7 +146,7 @@ var (
}
result3Sarif = Results{
Message: Message{
Text: messageText(result3.RuleID, result3.Source),
Text: createMessageText(result3.RuleID, result3.Source),
},
RuleId: ruleID1,
Locations: []Locations{
Expand Down
12 changes: 10 additions & 2 deletions lib/reporting/sarif.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,15 @@ func hasNoResults(report *Report) bool {
return len(report.Results) == 0
}

func messageText(ruleName string, filePath string) string {
func createMessageText(ruleName string, filePath string) string {
// maintain only the filename if the scan target is git
if strings.HasPrefix(filePath, "git show ") {
filePathParts := strings.SplitN(filePath, ":", 2)
if len(filePathParts) == 2 {
filePath = filePathParts[1]
}
}

return fmt.Sprintf("%s has detected secret for file %s.", ruleName, filePath)
}

Expand All @@ -85,7 +93,7 @@ func getResults(report *Report) []Results {
for _, secret := range secrets {
r := Results{
Message: Message{
Text: messageText(secret.RuleID, secret.Source),
Text: createMessageText(secret.RuleID, secret.Source),
},
RuleId: secret.RuleID,
Locations: getLocation(secret),
Expand Down
53 changes: 53 additions & 0 deletions lib/reporting/sarif_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package reporting

import (
"fmt"
"testing"

"github.com/stretchr/testify/assert"
)

func TestCreateMessageText(t *testing.T) {
ruleName := "Test Rule"
messagePrefix := ruleName + " has detected secret for file %s."

tests := []struct {
Name string
FilePath string
ExpectedMessage string
}{
{
Name: "Filesystem file name",
FilePath: "folder/filename.txt",
ExpectedMessage: fmt.Sprintf(messagePrefix, "folder/filename.txt"),
},
{
Name: "Simple git filename",
FilePath: "git show 1a9f3c87b4d029f54e8c72d8b11a78f6a3c29d2e:folder/filename.txt",
ExpectedMessage: fmt.Sprintf(messagePrefix, "folder/filename.txt"),
},
{
Name: "Broken git file name with no commit hash",
FilePath: "git show folder/filename.txt",
ExpectedMessage: fmt.Sprintf(messagePrefix, "git show folder/filename.txt"),
},
{
Name: "Git file name with one colon character",
FilePath: "git show d8e914f06d8d4494bd4f9ab2a2c9c88f78ef25ad:folder/filename:secondpart.txt",
ExpectedMessage: fmt.Sprintf(messagePrefix, "folder/filename:secondpart.txt"),
},
{
Name: "Git file name with multiple colon character",
FilePath: "git show a73b5cf94f0b29e1cc6e71a092f6b8ebc1d0e002:folder:secondfolderpart/filename:secondpart.txt",
ExpectedMessage: fmt.Sprintf(messagePrefix, "folder:secondfolderpart/filename:secondpart.txt"),
},
}

for _, tt := range tests {
t.Run(tt.Name, func(t *testing.T) {
message := createMessageText(ruleName, tt.FilePath)
fmt.Printf("%v", message)
assert.Equal(t, tt.ExpectedMessage, message)
})
}
}
Loading