aboutsummaryrefslogtreecommitdiff
package name_test

import (
	"testing"

	"lindenii.org/go/furgit/ref/name"
)

func TestValidateUpdateName(t *testing.T) {
	t.Parallel()

	tests := []struct {
		name        string
		hasNewValue bool
		wantErr     bool
	}{
		{name: "refs/heads/main", hasNewValue: true, wantErr: false},
		{name: "HEAD", hasNewValue: true, wantErr: false},
		{name: "PSEUDOREF", hasNewValue: true, wantErr: false},
		{name: "FETCH_HEAD", hasNewValue: true, wantErr: true},
		{name: "MERGE_HEAD", hasNewValue: true, wantErr: true},
		{name: "refs/heads/.bad", hasNewValue: true, wantErr: true},
		{name: "foo/bar", hasNewValue: true, wantErr: false},
		{name: "foo/bar", hasNewValue: false, wantErr: true},
		{name: "PSEUDOREF", hasNewValue: false, wantErr: false},
		{name: "HEAD", hasNewValue: false, wantErr: false},
	}

	for _, tt := range tests {
		err := name.ValidateUpdateName(tt.name, tt.hasNewValue)
		if (err != nil) != tt.wantErr {
			t.Fatalf("ValidateUpdateName(%q, %v) err=%v, wantErr=%v", tt.name, tt.hasNewValue, err, tt.wantErr)
		}
	}
}

func TestValidateSymbolicTarget(t *testing.T) {
	t.Parallel()

	tests := []struct {
		ref     string
		target  string
		wantErr bool
	}{
		{ref: "HEAD", target: "refs/heads/main", wantErr: false},
		{ref: "HEAD", target: "foo", wantErr: true},
		{ref: "HEAD", target: "ORIG_HEAD", wantErr: true},
		{ref: "refs/heads/top", target: "ORIG_HEAD", wantErr: false},
		{ref: "refs/heads/top", target: "refs/heads/main", wantErr: false},
		{ref: "refs/heads/top", target: "worktrees/wt1/HEAD", wantErr: false},
		{ref: "refs/heads/top", target: "foo", wantErr: true},
		{ref: "refs/heads/top", target: "foo..bar", wantErr: true},
		{ref: "main-worktree/HEAD", target: "refs/heads/main", wantErr: false},
		{ref: "main-worktree/HEAD", target: "refs/tags/v1", wantErr: true},
	}

	for _, tt := range tests {
		err := name.ValidateSymbolicTarget(tt.ref, tt.target)
		if (err != nil) != tt.wantErr {
			t.Fatalf("ValidateSymbolicTarget(%q, %q) err=%v, wantErr=%v", tt.ref, tt.target, err, tt.wantErr)
		}
	}
}