package repository import ( "context" "regexp" "strings" "testing" "time" sqlmock "github.com/DATA-DOG/go-sqlmock" "github.com/Wei-Shaw/sub2api/internal/service" "github.com/stretchr/testify/require" ) func TestBuildContentModerationLogWhere_BlockedIncludesAllBlockActions(t *testing.T) { where, args := buildContentModerationLogWhere(service.ContentModerationLogFilter{Result: "blocked"}) require.Empty(t, args) sql := strings.Join(where, " AND ") require.Contains(t, sql, "l.action IN ('block', 'keyword_block', 'hash_block')") require.NotContains(t, sql, "l.action = 'block'") } func TestContentModerationRepositoryCountFlaggedByUserSince_ExcludesHashBlock(t *testing.T) { db, mock, err := sqlmock.New() require.NoError(t, err) defer func() { _ = db.Close() }() repo := NewContentModerationRepository(db) since := time.Now().Add(-time.Hour) mock.ExpectQuery(regexp.QuoteMeta("AND action <> 'hash_block'")). WithArgs(int64(1001), since). WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(2)) count, err := repo.CountFlaggedByUserSince(context.Background(), 1001, since) require.NoError(t, err) require.Equal(t, 2, count) require.NoError(t, mock.ExpectationsWereMet()) }