about summary refs log blame commit diff
path: root/main/civisibility/utils/git_test.go
blob: fd91ebee11bd3389d5cb9f0e43dad18d2debbbbc (plain) (tree)





























































                                                                                                                                      
// Unless explicitly stated otherwise all files in this repository are licensed
// under the Apache License Version 2.0.
// This product includes software developed at Datadog (https://www.datadoghq.com/).
// Copyright 2024 Datadog, Inc.

package utils

import (
	"testing"

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

func TestFilterSensitiveInfo(t *testing.T) {
	tests := []struct {
		input    string
		expected string
	}{
		// Basic cases
		{"https://user:pass@github.com/repo.git", "https://github.com/repo.git"},
		{"ssh://user@github.com/repo.git", "ssh://github.com/repo.git"},
		{"https://github.com/repo.git", "https://github.com/repo.git"},
		{"http://user:pass@github.com/repo.git", "http://github.com/repo.git"},

		// Edge cases
		{"", ""},
		{"https://@github.com/repo.git", "https://github.com/repo.git"},
		{"ftp://user@github.com/repo.git", "ftp://user@github.com/repo.git"}, // Unsupported protocol, should remain unchanged
		{"user@github.com/repo.git", "user@github.com/repo.git"},             // No protocol, should remain unchanged

		// Complex cases
		{"https://user:pass@github.com:8080/repo.git", "https://github.com:8080/repo.git"},
		{"ssh://user:auth@github.com/repo.git", "ssh://github.com/repo.git"},
		{"https://user:password@bitbucket.org/repo.git", "https://bitbucket.org/repo.git"},

		// Cases with special characters
		{"https://user:pa$$word@github.com/repo.git", "https://github.com/repo.git"},
		{"ssh://user!@github.com/repo.git", "ssh://github.com/repo.git"},
		{"https://user%40example.com@github.com/repo.git", "https://github.com/repo.git"}, // Encoded @ in username
	}

	for _, test := range tests {
		result := filterSensitiveInfo(test.input)
		assert.Equal(t, test.expected, result, "Failed for input: %s", test.input)
	}
}

func TestGetLocalGitData(t *testing.T) {
	data, err := getLocalGitData()

	assert.NoError(t, err)
	assert.NotEmpty(t, data.SourceRoot)
	assert.NotEmpty(t, data.RepositoryURL)
	assert.NotEmpty(t, data.CommitSha)
	assert.NotEmpty(t, data.AuthorName)
	assert.NotEmpty(t, data.AuthorEmail)
	assert.NotEmpty(t, data.AuthorDate)
	assert.NotEmpty(t, data.CommitterName)
	assert.NotEmpty(t, data.CommitterEmail)
	assert.NotEmpty(t, data.CommitterDate)
	assert.NotEmpty(t, data.CommitMessage)
}