package repository import ( "context" "testing" "github.com/gochat/gochat/internal/model" "github.com/stretchr/testify/require" "gorm.io/driver/sqlite" "gorm.io/gorm" "gorm.io/gorm/logger" ) func setupRepoDB_Cov4(t *testing.T, models ...interface{}) *gorm.DB { t.Helper() db, err := gorm.Open(sqlite.Open("file::memory:"), &gorm.Config{Logger: logger.Default.LogMode(logger.Silent)}) require.NoError(t, err) allModels := append([]interface{}{ &model.Account{}, &model.User{}, &model.AccountUser{}, &model.Inbox{}, &model.Contact{}, &model.ContactInbox{}, &model.Conversation{}, &model.Message{}, &model.Attachment{}, &model.AccessToken{}, &model.AccountOIDCSettings{}, &model.AgentBot{}, &model.AgentBotInbox{}, &model.Article{}, &model.Category{}, &model.InboxCapacityLimit{}, &model.AssignmentPolicyV2{}, &model.InboxMember{}, &model.Team{}, &model.TeamMember{}, &model.Portal{}, &model.CaptainDocument{}, &model.CaptainPreference{}, &model.CaptainAssistant{}, &model.Tag{}, &model.ConversationLabel{}, &model.ContactLabel{}, &model.Note{}, &model.ContactNote{}, &model.DeliveryStatus{}, &model.WorkingHour{}, &model.WebhookSubscription{}, &model.NotificationSetting{}, &model.NotificationSubscription{}, }, models...) require.NoError(t, db.AutoMigrate(allModels...)) return db } // AccessTokenRepo tests func TestAccessTokenRepo_Update_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAccessTokenRepo(db) token := &model.AccessToken{OwnerType: "User", OwnerID: 1, Token: "test"} require.NoError(t, db.Create(token).Error) token.Token = "updated" _ = r.Update(context.Background(), token) } // AccountOIDCSettingsRepo tests func TestAccountOIDCSettingsRepo_Create_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAccountOIDCSettingsRepo(db) _ = r.Create(&model.AccountOIDCSettings{AccountID: 1, Active: true}) } func TestAccountOIDCSettingsRepo_GetByAccount_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAccountOIDCSettingsRepo(db) _, _ = r.GetByAccount(1) } func TestAccountOIDCSettingsRepo_GetByAccount_Found_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAccountOIDCSettingsRepo(db) require.NoError(t, r.Create(&model.AccountOIDCSettings{AccountID: 1, Active: true})) _, _ = r.GetByAccount(1) } func TestAccountOIDCSettingsRepo_GetActiveByAccount_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAccountOIDCSettingsRepo(db) _, _ = r.GetActiveByAccount(1) } func TestAccountOIDCSettingsRepo_Update_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAccountOIDCSettingsRepo(db) s := &model.AccountOIDCSettings{AccountID: 1, Active: true} require.NoError(t, r.Create(s)) s.Active = false _ = r.Update(s) } func TestAccountOIDCSettingsRepo_UpdateFields_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAccountOIDCSettingsRepo(db) require.NoError(t, r.Create(&model.AccountOIDCSettings{AccountID: 1, Active: true})) _ = r.UpdateFields(1, map[string]interface{}{"active": false}) } func TestAccountOIDCSettingsRepo_Delete_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAccountOIDCSettingsRepo(db) require.NoError(t, r.Create(&model.AccountOIDCSettings{AccountID: 1, Active: true})) _ = r.Delete(1) } func TestAccountOIDCSettingsRepo_SetActive_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAccountOIDCSettingsRepo(db) require.NoError(t, r.Create(&model.AccountOIDCSettings{AccountID: 1, Active: false})) _ = r.SetActive(1, true) } // AgentCapacityPolicyRepo tests func TestAgentCapacityPolicyRepo_FindInboxByAccount_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAgentCapacityPolicyRepo(db) _, _ = r.FindInboxByAccount(context.Background(), 1, 1) } func TestAgentCapacityPolicyRepo_FindAccountUser_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAgentCapacityPolicyRepo(db) _, _ = r.FindAccountUser(context.Background(), 1, 1) } func TestAgentCapacityPolicyRepo_UpdateAccountUser_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAgentCapacityPolicyRepo(db) _ = r.UpdateAccountUser(context.Background(), &model.AccountUser{}) } func TestAgentCapacityPolicyRepo_CreateInboxCapacityLimit_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAgentCapacityPolicyRepo(db) _ = r.CreateInboxCapacityLimit(context.Background(), &model.InboxCapacityLimit{}) } func TestAgentCapacityPolicyRepo_FindInboxCapacityLimitByPolicy_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAgentCapacityPolicyRepo(db) _, _ = r.FindInboxCapacityLimitByPolicy(context.Background(), 1, 1) } func TestAgentCapacityPolicyRepo_FindInboxCapacityLimitByInbox_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAgentCapacityPolicyRepo(db) _, _ = r.FindInboxCapacityLimitByInbox(context.Background(), 1, 1) } func TestAgentCapacityPolicyRepo_UpdateInboxCapacityLimit_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAgentCapacityPolicyRepo(db) _ = r.UpdateInboxCapacityLimit(context.Background(), &model.InboxCapacityLimit{}) } func TestAgentCapacityPolicyRepo_DeleteInboxCapacityLimit_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAgentCapacityPolicyRepo(db) _ = r.DeleteInboxCapacityLimit(context.Background(), &model.InboxCapacityLimit{}) } func TestAgentCapacityPolicyRepo_FindPolicyUsers_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewAgentCapacityPolicyRepo(db) _, _ = r.FindPolicyUsers(context.Background(), 1, 1) } // ArticleRepo tests func TestArticleRepo_DB_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewArticleRepo(db) _ = r.DB() } func TestArticleRepo_GetByPortalAndID_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewArticleRepo(db) _, _ = r.GetByPortalAndID(context.Background(), 1, 1) } func TestArticleRepo_FindByPortalAndSlug_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewArticleRepo(db) _, _ = r.FindByPortalAndSlug(context.Background(), 1, "test-slug") } func TestArticleRepo_CountSearch_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewArticleRepo(db) _, _ = r.CountSearch(context.Background(), ArticleSearchParams{PortalID: 1}) } func TestArticleRepo_UpdatePositionsForPortal_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewArticleRepo(db) _ = r.UpdatePositionsForPortal(context.Background(), 1, map[uint]int{1: 0, 2: 1}) } func TestArticleRepo_BulkUpdateStatusForPortal_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewArticleRepo(db) _ = r.BulkUpdateStatusForPortal(context.Background(), 1, []uint{1, 2}, "published") } func TestArticleRepo_BulkUpdateCategoryForPortal_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewArticleRepo(db) _ = r.BulkUpdateCategoryForPortal(context.Background(), 1, []uint{1, 2}, 1) } func TestArticleRepo_BulkDeleteForPortal_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewArticleRepo(db) _ = r.BulkDeleteForPortal(context.Background(), 1, []uint{1, 2}) } func TestArticleRepo_CountByPortalAndIDs_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewArticleRepo(db) _, _ = r.CountByPortalAndIDs(context.Background(), 1, []uint{1, 2}) } func TestArticleRepo_FindByPortalAndIDs_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewArticleRepo(db) _, _ = r.FindByPortalAndIDs(context.Background(), 1, []uint{1, 2}) } func TestArticleRepo_CategoryExistsForPortalAndLocale_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewArticleRepo(db) _, _ = r.CategoryExistsForPortalAndLocale(context.Background(), 1, 1, "en") } func TestArticleRepo_FindTranslationsByRootIDsAndLocale_Cov4(t *testing.T) { db := setupRepoDB_Cov4(t) r := NewArticleRepo(db) _, _ = r.FindTranslationsByRootIDsAndLocale(context.Background(), 1, []uint{1, 2}, "en") } // Pure helper function tests func TestContactFilterColumn_Cov4(t *testing.T) { col, _, ok := contactFilterColumn("name") _ = col _ = ok _, _, ok2 := contactFilterColumn("nonexistent") _ = ok2 } func TestContactFilterCustomAttributeOperators_Cov4(t *testing.T) { _ = contactFilterCustomAttributeOperators("text") _ = contactFilterCustomAttributeOperators("date") _ = contactFilterCustomAttributeOperators("list") } func TestContactFilterNormalizeValues_Cov4(t *testing.T) { _ = contactFilterNormalizeValues("name", []string{"John", "Jane"}) } func TestSearchSenderTypeAliases_Cov4(t *testing.T) { _ = searchSenderTypeAliases("agent") _ = searchSenderTypeAliases("user") _ = searchSenderTypeAliases("invalid") } func TestConversationFinderOrderClause_Cov4b(t *testing.T) { require.NotEmpty(t, conversationFinderOrderClause("latest")) require.NotEmpty(t, conversationFinderOrderClause("oldest")) require.NotEmpty(t, conversationFinderOrderClause("")) } func TestNormalizeContactLabels_Cov4b(t *testing.T) { result := normalizeContactLabels([]string{"Label1", "label2", ""}) require.Len(t, result, 2) } func TestContactFeatureFlagEnabled_Cov4b(t *testing.T) { require.True(t, contactFeatureFlagEnabled("email", "email")) require.False(t, contactFeatureFlagEnabled("", "email")) }