Gito를 platformless Git control plane으로 시작할 수 있도록 Go core, Flutter control surface, contracts, ops 규칙, 검증 헬퍼를 함께 구성한다.
51 lines
1.2 KiB
Go
51 lines
1.2 KiB
Go
package gitengine
|
|
|
|
import (
|
|
"errors"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
type fakeRunner struct {
|
|
output string
|
|
err error
|
|
args []string
|
|
}
|
|
|
|
func (f *fakeRunner) Run(_ string, args ...string) (string, error) {
|
|
f.args = append([]string(nil), args...)
|
|
return f.output, f.err
|
|
}
|
|
|
|
func TestStatusClean(t *testing.T) {
|
|
runner := &fakeRunner{output: "\n"}
|
|
result, err := Status(runner, "/repo")
|
|
if err != nil {
|
|
t.Fatalf("Status: %v", err)
|
|
}
|
|
if !result.Clean {
|
|
t.Fatal("expected clean status")
|
|
}
|
|
if !reflect.DeepEqual(runner.args, []string{"status", "--porcelain"}) {
|
|
t.Fatalf("args: %#v", runner.args)
|
|
}
|
|
}
|
|
|
|
func TestChangedFiles(t *testing.T) {
|
|
runner := &fakeRunner{output: "README.md\nservices/core/main.go\n\n"}
|
|
files, err := ChangedFiles(runner, "/repo", "abc", "def")
|
|
if err != nil {
|
|
t.Fatalf("ChangedFiles: %v", err)
|
|
}
|
|
want := []string{"README.md", "services/core/main.go"}
|
|
if !reflect.DeepEqual(files, want) {
|
|
t.Fatalf("files: got %#v want %#v", files, want)
|
|
}
|
|
}
|
|
|
|
func TestChangedFilesRequiresRevisions(t *testing.T) {
|
|
_, err := ChangedFiles(&fakeRunner{}, "/repo", "", "def")
|
|
if !errors.Is(err, ErrInvalidGitInput) {
|
|
t.Fatalf("expected ErrInvalidGitInput, got %v", err)
|
|
}
|
|
}
|