gitinfo/gitinfo_test.go

80 lines
1.7 KiB
Go

package gitinfo
import (
"errors"
"runtime/debug"
"testing"
"time"
"github.com/matryer/is"
)
func TestReadGitInfo(t *testing.T) {
assert := is.New(t)
readBuildInfo = func() (*debug.BuildInfo, bool) {
return &debug.BuildInfo{
Settings: []debug.BuildSetting{
{Key: "vcs", Value: "git"},
{Key: "vcs.revision", Value: "ad1aef070cf1fd5f2f16701f84703ff1e1dd6738"},
{Key: "vcs.time", Value: "2022-03-22T19:56:47Z"},
{Key: "vcs.modified", Value: "true"},
},
}, true
}
expected := &GitInfo{
Revision: "ad1aef070cf1fd5f2f16701f84703ff1e1dd6738",
Time: time.Date(2022, 3, 22, 19, 56, 47, 0, time.UTC),
Modified: true,
}
info, err := ReadGitInfo()
assert.NoErr(err) // Should read build info
assert.Equal(info, expected) // GitInfo should match expected
}
func TestNoBuildInfo(t *testing.T) {
assert := is.New(t)
readBuildInfo = func() (*debug.BuildInfo, bool) {
return nil, false
}
_, err := ReadGitInfo()
assert.True(errors.Is(err, ErrNoBuildInfo)) // Should not read build info
}
func TestNoGit(t *testing.T) {
assert := is.New(t)
readBuildInfo = func() (*debug.BuildInfo, bool) {
return &debug.BuildInfo{
Settings: []debug.BuildSetting{
{Key: "vcs", Value: "svn"},
},
}, true
}
_, err := ReadGitInfo()
assert.True(errors.Is(err, ErrNoGit)) // Should not have git info
readBuildInfo = func() (*debug.BuildInfo, bool) {
return &debug.BuildInfo{}, true
}
_, err = ReadGitInfo()
assert.True(errors.Is(err, ErrNoGit)) // Should not have git info
}
func TestMustReadGitInfo(t *testing.T) {
assert := is.New(t)
readBuildInfo = func() (*debug.BuildInfo, bool) {
return nil, false
}
info := MustReadGitInfo()
assert.Equal(info.Revision, "develop") // revision should be "develop"
}