package search import ( "testing" "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestDocumentUID(t *testing.T) { uid := documentUID(ResultTypeConversation, 1, 42) assert.Equal(t, "1_conversation_42", uid) } func TestSearchDocument_EnsureUID(t *testing.T) { doc := SearchDocument{Type: ResultTypeMessage, AccountID: 1, ID: 5} doc.ensureUID() assert.Equal(t, "1_message_5", doc.UID) } func TestSearchDocument_EnsureUID_AlreadySet(t *testing.T) { doc := SearchDocument{UID: "custom_uid"} doc.ensureUID() assert.Equal(t, "custom_uid", doc.UID) } func TestNormalizeEngineConfig_Defaults(t *testing.T) { cfg := normalizeEngineConfig(EngineConfig{}) assert.Equal(t, EngineMeilisearch, cfg.Engine) assert.Equal(t, "http://localhost:7700", cfg.Host) assert.Equal(t, "gochat_", cfg.IndexPrefix) } func TestNormalizeEngineConfig_Custom(t *testing.T) { cfg := normalizeEngineConfig(EngineConfig{ Engine: "MeiliSearch", Host: "http://search:7700", IndexPrefix: "custom_", }) assert.Equal(t, "meilisearch", cfg.Engine) assert.Equal(t, "http://search:7700", cfg.Host) assert.Equal(t, "custom_", cfg.IndexPrefix) } func TestSearchableTypes_Default(t *testing.T) { types := searchableTypes(nil) assert.NotEmpty(t, types) assert.Contains(t, types, ResultTypeConversation) assert.Contains(t, types, ResultTypeMessage) assert.Contains(t, types, ResultTypeContact) } func TestSearchableTypes_WithFilter(t *testing.T) { filter := &SearchFilter{Types: []SearchResultType{ResultTypeConversation}} types := searchableTypes(filter) assert.Len(t, types, 1) assert.Equal(t, ResultTypeConversation, types[0]) } func TestTimestamp(t *testing.T) { now := time.Now() ts := timestamp(now) assert.NotZero(t, ts) } func TestTimestampPtr_Nil(t *testing.T) { assert.Equal(t, int64(0), timestampPtr(nil)) } func TestTimestampPtr_Value(t *testing.T) { v := int64(12345) assert.Equal(t, int64(12345), timestampPtr(&v)) } func TestNewSearchEngine_InvalidEngine(t *testing.T) { _, err := NewSearchEngine(EngineConfig{Engine: "nonexistent"}, nil) require.Error(t, err) } func TestNewSearchEngineDB(t *testing.T) { // Create with nil repo - should still construct eng := NewSearchEngineDB(nil) assert.NotNil(t, eng) }