package kbgovernance

import (
	"testing"

	"github.com/stretchr/testify/require"
)

func TestEncodePublicationSnapshotPreservesContract(t *testing.T) {
	snapshot := PublicationSnapshot{
		KnowledgeBaseID: "kb_1", WorkingRevision: "kbr_1", IsActive: true,
		Name: "Review me", Description: "Frozen description", GroupID: "group_1",
		TagIDs: []string{"tag_b", "tag_a"},
		Sources: []PublicationSnapshotSource{{
			ID: "src_1", SourceType: "codebase", Name: "AgentTeam", Description: "Repository",
			DefaultRef: "main", IndexingMode: "full", Status: "ready", SyncStatus: "ready",
			IndexStatus: "ready", Config: "{}", RevisionID: "rev_1", SourceCommitSHA: "source-sha",
			WikiRevision: "wiki_1", DashboardRevision: "dashboard_1",
			WikiDisposition: "ready", DashboardDisposition: "ready",
		}},
	}

	encoded, digest, err := EncodePublicationSnapshot(snapshot)
	require.NoError(t, err)
	require.Equal(t, `{"knowledgeBaseId":"kb_1","workingRevision":"kbr_1","isActive":true,"name":"Review me","description":"Frozen description","groupId":"group_1","tagIds":["tag_a","tag_b"],"sources":[{"id":"src_1","sourceType":"codebase","name":"AgentTeam","description":"Repository","defaultRef":"main","indexingMode":"full","status":"ready","syncStatus":"ready","indexStatus":"ready","config":"{}","revisionId":"rev_1","sourceCommitSha":"source-sha","wikiRevision":"wiki_1","dashboardRevision":"dashboard_1","wikiDisposition":"ready","dashboardDisposition":"ready"}]}`, string(encoded))
	require.Equal(t, "ecbc033259cf99978cf3a7629d0206bc1ba7da0aa5aab271ccc67b83041d8ba1", digest)
	require.Equal(t, []string{"tag_b", "tag_a"}, snapshot.TagIDs)

	decoded, err := DecodePublicationSnapshot(encoded)
	require.NoError(t, err)
	require.Equal(t, []string{"tag_a", "tag_b"}, decoded.TagIDs)
}
