gito/services/core/internal/gitengine/command_test.go
toki e2bc7aa8b6 feat(scaffold): 초기 프로젝트 골격을 구성한다
Gito를 platformless Git control plane으로 시작할 수 있도록 Go core, Flutter control surface, contracts, ops 규칙, 검증 헬퍼를 함께 구성한다.
2026-06-13 08:55:46 +09:00

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