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" }