package service

import (
	"errors"
	"os"
	"path/filepath"
	"testing"

	"github.com/pingcap/agent-git-service/internal/gitstore"
)

func TestRepairWikiRefLocksFailsClosedWithoutPrivateOwner(t *testing.T) {
	root := t.TempDir()
	store, err := gitstore.New(root)
	if err != nil {
		t.Fatalf("gitstore.New: %v", err)
	}
	lockPath := filepath.Join(root, "owner", "repo.wiki.git", "refs", "heads", "master.lock")
	if err := os.MkdirAll(filepath.Dir(lockPath), 0o700); err != nil {
		t.Fatalf("MkdirAll: %v", err)
	}
	if err := os.WriteFile(lockPath, []byte("lock"), 0o600); err != nil {
		t.Fatalf("WriteFile: %v", err)
	}

	service := &Service{Git: store}
	if _, err := service.RepairWikiRefLocks(t.Context(), "owner/repo", true); !errors.Is(err, ErrRepositoryMigrationConflict) {
		t.Fatalf("RepairWikiRefLocks without owner = %v, want ErrRepositoryMigrationConflict", err)
	}
	if _, err := os.Stat(lockPath); err != nil {
		t.Fatalf("ownerless repair mutated lock: %v", err)
	}
}
