test(cli): cover emitPublishWarnings across all three warning paths
Proves the publish command's warning surface end-to-end: tracked-yet- gitignored files, declared submodules, untracked files on --allow-dirty, and that the dirty-tree abort suppresses the untracked warning.
This commit is contained in:
parent
824d55a1fa
commit
46e3389045
@ -299,6 +299,108 @@ func TestSubmoduleWarning_NoopWithoutGitmodules(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestEmitPublishWarnings_WarnsAboutGitignoreTracked(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
runGit(t, dir, "init", "-q")
|
||||
if err := os.WriteFile(filepath.Join(dir, "secret.env"), []byte("token=abc"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
runGit(t, dir, "add", "secret.env")
|
||||
runGit(t, dir, "commit", "-qm", "init")
|
||||
if err := os.WriteFile(filepath.Join(dir, ".gitignore"), []byte("*.env\n"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
runGit(t, dir, "add", ".gitignore")
|
||||
runGit(t, dir, "commit", "-qm", "ignore")
|
||||
|
||||
var buf bytes.Buffer
|
||||
if err := emitPublishWarnings(dir, false, &buf); err != nil {
|
||||
t.Fatalf("emitPublishWarnings: %v", err)
|
||||
}
|
||||
|
||||
out := buf.String()
|
||||
if !strings.Contains(out, "secret.env") {
|
||||
t.Errorf("expected gitignored-tracked warning to mention secret.env, got: %q", out)
|
||||
}
|
||||
if !strings.Contains(out, "match .gitignore") {
|
||||
t.Errorf("expected gitignored-tracked warning fragment, got: %q", out)
|
||||
}
|
||||
}
|
||||
|
||||
func TestEmitPublishWarnings_WarnsAboutSubmodules(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
runGit(t, dir, "init", "-q")
|
||||
if err := os.WriteFile(filepath.Join(dir, "README.md"), []byte("hi"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
runGit(t, dir, "add", "README.md")
|
||||
runGit(t, dir, "commit", "-qm", "init")
|
||||
|
||||
gitmodules := `[submodule "vendor/foo"]
|
||||
path = vendor/foo
|
||||
url = https://example.com/foo.git
|
||||
`
|
||||
if err := os.WriteFile(filepath.Join(dir, ".gitmodules"), []byte(gitmodules), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
runGit(t, dir, "add", ".gitmodules")
|
||||
runGit(t, dir, "commit", "-qm", "add submodule decl")
|
||||
|
||||
var buf bytes.Buffer
|
||||
if err := emitPublishWarnings(dir, false, &buf); err != nil {
|
||||
t.Fatalf("emitPublishWarnings: %v", err)
|
||||
}
|
||||
|
||||
out := buf.String()
|
||||
if !strings.Contains(out, "vendor/foo") {
|
||||
t.Errorf("expected submodule warning to mention vendor/foo, got: %q", out)
|
||||
}
|
||||
if !strings.Contains(out, "submodules") {
|
||||
t.Errorf("expected submodule warning fragment, got: %q", out)
|
||||
}
|
||||
}
|
||||
|
||||
func TestEmitPublishWarnings_WarnsAboutUntrackedWithAllowDirty(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
runGit(t, dir, "init", "-q")
|
||||
if err := os.WriteFile(filepath.Join(dir, "README.md"), []byte("hi"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
runGit(t, dir, "add", "README.md")
|
||||
runGit(t, dir, "commit", "-qm", "init")
|
||||
if err := os.WriteFile(filepath.Join(dir, "scratch.txt"), []byte("notes"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
t.Run("allowDirty=true surfaces untracked warning", func(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
if err := emitPublishWarnings(dir, true, &buf); err != nil {
|
||||
t.Fatalf("emitPublishWarnings: %v", err)
|
||||
}
|
||||
out := buf.String()
|
||||
if !strings.Contains(out, "scratch.txt") {
|
||||
t.Errorf("expected untracked-files warning to mention scratch.txt, got: %q", out)
|
||||
}
|
||||
if !strings.Contains(out, "--allow-dirty") {
|
||||
t.Errorf("expected untracked-files warning fragment, got: %q", out)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("allowDirty=false aborts before untracked warning", func(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
err := emitPublishWarnings(dir, false, &buf)
|
||||
if err == nil {
|
||||
t.Fatal("expected dirty-tree error, got nil")
|
||||
}
|
||||
if !strings.Contains(err.Error(), "working tree dirty") {
|
||||
t.Errorf("expected dirty-tree error, got: %v", err)
|
||||
}
|
||||
if strings.Contains(buf.String(), "--allow-dirty: these untracked files") {
|
||||
t.Errorf("untracked-files warning should not fire on dirty-abort path, got: %q", buf.String())
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func runGit(t *testing.T, dir string, args ...string) {
|
||||
t.Helper()
|
||||
cmd := exec.Command("git", args...)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user