| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- //go:build integration
- package repository
- import (
- "context"
- "testing"
- "github.com/Wei-Shaw/sub2api/internal/pkg/pagination"
- "github.com/Wei-Shaw/sub2api/internal/service"
- "github.com/stretchr/testify/require"
- )
- func TestUserRepo_ListWithFilters_IncludeDeleted(t *testing.T) {
- ctx := context.Background()
- tx := testEntTx(t)
- client := tx.Client()
- repo := NewUserRepository(client, integrationDB)
- active := mustCreateUser(t, client, &service.User{Email: "shared-keyword-active@test.com"})
- deleted := mustCreateUser(t, client, &service.User{Email: "shared-keyword-deleted@test.com"})
- require.NoError(t, client.User.DeleteOneID(deleted.ID).Exec(ctx))
- params := pagination.PaginationParams{Page: 1, PageSize: 50, SortBy: "email", SortOrder: "asc"}
- // 默认(不含已删):只返回活跃用户。
- usersDefault, resDefault, err := repo.ListWithFilters(ctx, params,
- service.UserListFilters{Search: "shared-keyword-"})
- require.NoError(t, err)
- require.Len(t, usersDefault, 1)
- require.Equal(t, active.ID, usersDefault[0].ID)
- require.EqualValues(t, 1, resDefault.Total)
- // IncludeDeleted=true:两个都返回,且 Total 与结果集一致。
- usersAll, resAll, err := repo.ListWithFilters(ctx, params,
- service.UserListFilters{Search: "shared-keyword-", IncludeDeleted: true})
- require.NoError(t, err)
- require.Len(t, usersAll, 2)
- require.EqualValues(t, 2, resAll.Total, "Count 必须与结果集行数一致")
- var delUser *service.User
- for i := range usersAll {
- if usersAll[i].ID == deleted.ID {
- delUser = &usersAll[i]
- }
- }
- require.NotNil(t, delUser)
- require.NotNil(t, delUser.DeletedAt)
- }
- func TestUserRepo_GetByIDIncludeDeleted(t *testing.T) {
- ctx := context.Background()
- tx := testEntTx(t)
- client := tx.Client()
- repo := NewUserRepository(client, integrationDB)
- u := mustCreateUser(t, client, &service.User{Email: "getbyid-deleted@test.com"})
- require.NoError(t, client.User.DeleteOneID(u.ID).Exec(ctx))
- // 默认 GetByID:找不到(被软删过滤)。
- _, err := repo.GetByID(ctx, u.ID)
- require.ErrorIs(t, err, service.ErrUserNotFound)
- // GetByIDIncludeDeleted:找得到,且 DeletedAt 非空。
- got, err := repo.GetByIDIncludeDeleted(ctx, u.ID)
- require.NoError(t, err)
- require.Equal(t, "getbyid-deleted@test.com", got.Email)
- require.NotNil(t, got.DeletedAt)
- }
|