user_repo_include_deleted_integration_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. //go:build integration
  2. package repository
  3. import (
  4. "context"
  5. "testing"
  6. "github.com/Wei-Shaw/sub2api/internal/pkg/pagination"
  7. "github.com/Wei-Shaw/sub2api/internal/service"
  8. "github.com/stretchr/testify/require"
  9. )
  10. func TestUserRepo_ListWithFilters_IncludeDeleted(t *testing.T) {
  11. ctx := context.Background()
  12. tx := testEntTx(t)
  13. client := tx.Client()
  14. repo := NewUserRepository(client, integrationDB)
  15. active := mustCreateUser(t, client, &service.User{Email: "shared-keyword-active@test.com"})
  16. deleted := mustCreateUser(t, client, &service.User{Email: "shared-keyword-deleted@test.com"})
  17. require.NoError(t, client.User.DeleteOneID(deleted.ID).Exec(ctx))
  18. params := pagination.PaginationParams{Page: 1, PageSize: 50, SortBy: "email", SortOrder: "asc"}
  19. // 默认(不含已删):只返回活跃用户。
  20. usersDefault, resDefault, err := repo.ListWithFilters(ctx, params,
  21. service.UserListFilters{Search: "shared-keyword-"})
  22. require.NoError(t, err)
  23. require.Len(t, usersDefault, 1)
  24. require.Equal(t, active.ID, usersDefault[0].ID)
  25. require.EqualValues(t, 1, resDefault.Total)
  26. // IncludeDeleted=true:两个都返回,且 Total 与结果集一致。
  27. usersAll, resAll, err := repo.ListWithFilters(ctx, params,
  28. service.UserListFilters{Search: "shared-keyword-", IncludeDeleted: true})
  29. require.NoError(t, err)
  30. require.Len(t, usersAll, 2)
  31. require.EqualValues(t, 2, resAll.Total, "Count 必须与结果集行数一致")
  32. var delUser *service.User
  33. for i := range usersAll {
  34. if usersAll[i].ID == deleted.ID {
  35. delUser = &usersAll[i]
  36. }
  37. }
  38. require.NotNil(t, delUser)
  39. require.NotNil(t, delUser.DeletedAt)
  40. }
  41. func TestUserRepo_GetByIDIncludeDeleted(t *testing.T) {
  42. ctx := context.Background()
  43. tx := testEntTx(t)
  44. client := tx.Client()
  45. repo := NewUserRepository(client, integrationDB)
  46. u := mustCreateUser(t, client, &service.User{Email: "getbyid-deleted@test.com"})
  47. require.NoError(t, client.User.DeleteOneID(u.ID).Exec(ctx))
  48. // 默认 GetByID:找不到(被软删过滤)。
  49. _, err := repo.GetByID(ctx, u.ID)
  50. require.ErrorIs(t, err, service.ErrUserNotFound)
  51. // GetByIDIncludeDeleted:找得到,且 DeletedAt 非空。
  52. got, err := repo.GetByIDIncludeDeleted(ctx, u.ID)
  53. require.NoError(t, err)
  54. require.Equal(t, "getbyid-deleted@test.com", got.Email)
  55. require.NotNil(t, got.DeletedAt)
  56. }