package service_test

import (
	"testing"

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

func TestWikiCatalogPostCommit_GitIndexesSynchronously(t *testing.T) {
	svc, tenantHandle, cleanup := setupTestService(t)
	defer cleanup()
	ctx := tenantHandle.Context()

	repoFullName := seedRepoForWikiGitIngest(t, svc, tenantHandle, "alice", "sync-index")
	repo, err := svc.GetRepo(ctx, repoFullName)
	if err != nil {
		t.Fatalf("GetRepo: %v", err)
	}
	tenantHandle.WikiCatalog().OnChangeSetCommitted = svc.WikiCatalogPostCommit

	result, err := tenantHandle.WikiCatalog().ApplyChangeSet(ctx, wikicatalog.ChangeSetRequest{
		RepositoryID: repo.ID,
		Source:       wikicatalog.SourceGit,
		Changes: []wikicatalog.Change{{
			Op:   wikicatalog.OpUpsert,
			Slug: "home",
			Body: []byte("catalog body"),
		}},
	})
	if err != nil {
		t.Fatalf("ApplyChangeSet: %v", err)
	}

	var doc db.WikiSearchDocument
	if err := tenantHandle.DB().Where("repository_id = ? AND slug = ?", repo.ID, "home").First(&doc).Error; err != nil {
		t.Fatalf("search document not written before ApplyChangeSet returned: %v", err)
	}
	if string(doc.Body) != "catalog body" {
		t.Fatalf("search body = %q, want %q", string(doc.Body), "catalog body")
	}
	if result.Source != wikicatalog.SourceGit {
		t.Fatalf("result source = %q, want %q", result.Source, wikicatalog.SourceGit)
	}
}
