mirror of https://github.com/databricks/cli.git
101 lines
2.6 KiB
Go
101 lines
2.6 KiB
Go
package git
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestReferenceReferencePathForObjectID(t *testing.T) {
|
|
ref := &Reference{
|
|
Type: ReferenceTypeSHA1,
|
|
Content: strings.Repeat("a", 40),
|
|
}
|
|
_, err := ref.ResolvePath()
|
|
assert.ErrorIs(t, err, ErrNotAReferencePointer)
|
|
}
|
|
|
|
func TestReferenceCurrentBranchForObjectID(t *testing.T) {
|
|
ref := &Reference{
|
|
Type: ReferenceTypeSHA1,
|
|
Content: strings.Repeat("a", 40),
|
|
}
|
|
_, err := ref.CurrentBranch()
|
|
assert.ErrorIs(t, err, ErrNotABranch)
|
|
}
|
|
|
|
func TestReferenceCurrentBranchForReference(t *testing.T) {
|
|
ref := &Reference{
|
|
Type: ReferenceTypePointer,
|
|
Content: `ref: refs/heads/my-branch`,
|
|
}
|
|
branch, err := ref.CurrentBranch()
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "my-branch", branch)
|
|
}
|
|
|
|
func TestReferenceReferencePathForReference(t *testing.T) {
|
|
ref := &Reference{
|
|
Type: ReferenceTypePointer,
|
|
Content: `ref: refs/heads/my-branch`,
|
|
}
|
|
path, err := ref.ResolvePath()
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, filepath.FromSlash("refs/heads/my-branch"), path)
|
|
}
|
|
|
|
func TestReferenceLoadingForObjectID(t *testing.T) {
|
|
tmp := t.TempDir()
|
|
f, err := os.Create(filepath.Join(tmp, "HEAD"))
|
|
require.NoError(t, err)
|
|
defer f.Close()
|
|
f.WriteString(strings.Repeat("e", 40) + "\r\n")
|
|
|
|
ref, err := LoadReferenceFile(filepath.Join(tmp, "HEAD"))
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, ReferenceTypeSHA1, ref.Type)
|
|
assert.Equal(t, strings.Repeat("e", 40), ref.Content)
|
|
}
|
|
|
|
func TestReferenceLoadingForReference(t *testing.T) {
|
|
tmp := t.TempDir()
|
|
f, err := os.OpenFile(filepath.Join(tmp, "HEAD"), os.O_CREATE|os.O_WRONLY, os.ModePerm)
|
|
require.NoError(t, err)
|
|
defer f.Close()
|
|
f.WriteString("ref: refs/heads/foo\n")
|
|
|
|
ref, err := LoadReferenceFile(filepath.Join(tmp, "HEAD"))
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, ReferenceTypePointer, ref.Type)
|
|
assert.Equal(t, "ref: refs/heads/foo", ref.Content)
|
|
}
|
|
|
|
func TestReferenceLoadingFailsForInvalidContent(t *testing.T) {
|
|
tmp := t.TempDir()
|
|
f, err := os.OpenFile(filepath.Join(tmp, "HEAD"), os.O_CREATE|os.O_WRONLY, os.ModePerm)
|
|
require.NoError(t, err)
|
|
defer f.Close()
|
|
f.WriteString("abc")
|
|
|
|
_, err = LoadReferenceFile(filepath.Join(tmp, "HEAD"))
|
|
assert.ErrorContains(t, err, "unknown format for git HEAD")
|
|
}
|
|
|
|
func TestReferenceIsSha1(t *testing.T) {
|
|
a := strings.Repeat("0", 40)
|
|
b := strings.Repeat("f", 40)
|
|
c := strings.Repeat("0", 39)
|
|
d := strings.Repeat("F", 40)
|
|
e := strings.Repeat("0", 41)
|
|
|
|
assert.True(t, isSHA1(a))
|
|
assert.True(t, isSHA1(b))
|
|
assert.False(t, isSHA1(c))
|
|
assert.False(t, isSHA1(d))
|
|
assert.False(t, isSHA1(e))
|
|
}
|