content_moderation_repo_test.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package repository
  2. import (
  3. "context"
  4. "regexp"
  5. "strings"
  6. "testing"
  7. "time"
  8. sqlmock "github.com/DATA-DOG/go-sqlmock"
  9. "github.com/Wei-Shaw/sub2api/internal/service"
  10. "github.com/stretchr/testify/require"
  11. )
  12. func TestBuildContentModerationLogWhere_BlockedIncludesAllBlockActions(t *testing.T) {
  13. where, args := buildContentModerationLogWhere(service.ContentModerationLogFilter{Result: "blocked"})
  14. require.Empty(t, args)
  15. sql := strings.Join(where, " AND ")
  16. require.Contains(t, sql, "l.action IN ('block', 'keyword_block', 'hash_block')")
  17. require.NotContains(t, sql, "l.action = 'block'")
  18. }
  19. func TestContentModerationRepositoryCountFlaggedByUserSince_ExcludesHashBlock(t *testing.T) {
  20. db, mock, err := sqlmock.New()
  21. require.NoError(t, err)
  22. defer func() { _ = db.Close() }()
  23. repo := NewContentModerationRepository(db)
  24. since := time.Now().Add(-time.Hour)
  25. mock.ExpectQuery(regexp.QuoteMeta("AND action <> 'hash_block'")).
  26. WithArgs(int64(1001), since, false).
  27. WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(2))
  28. count, err := repo.CountFlaggedByUserSince(context.Background(), 1001, since, false)
  29. require.NoError(t, err)
  30. require.Equal(t, 2, count)
  31. require.NoError(t, mock.ExpectationsWereMet())
  32. }
  33. func TestContentModerationRepositoryCountFlaggedByUserSince_ExcludesCyberPolicyWhenRequested(t *testing.T) {
  34. db, mock, err := sqlmock.New()
  35. require.NoError(t, err)
  36. defer func() { _ = db.Close() }()
  37. repo := NewContentModerationRepository(db)
  38. since := time.Now().Add(-time.Hour)
  39. mock.ExpectQuery(regexp.QuoteMeta("AND ($3::bool IS FALSE OR action <> 'cyber_policy')")).
  40. WithArgs(int64(1001), since, true).
  41. WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(3))
  42. count, err := repo.CountFlaggedByUserSince(context.Background(), 1001, since, true)
  43. require.NoError(t, err)
  44. require.Equal(t, 3, count)
  45. require.NoError(t, mock.ExpectationsWereMet())
  46. }