user_handler_get_deleted_test.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package admin
  2. import (
  3. "context"
  4. "net/http"
  5. "net/http/httptest"
  6. "testing"
  7. "github.com/Wei-Shaw/sub2api/internal/service"
  8. "github.com/gin-gonic/gin"
  9. "github.com/stretchr/testify/require"
  10. )
  11. type getByIDAdminStub struct {
  12. service.AdminService
  13. }
  14. func (s *getByIDAdminStub) GetUser(_ context.Context, _ int64) (*service.User, error) {
  15. return nil, service.ErrUserNotFound
  16. }
  17. func (s *getByIDAdminStub) GetUserIncludeDeleted(_ context.Context, id int64) (*service.User, error) {
  18. return &service.User{ID: id, Email: "del@test.com"}, nil
  19. }
  20. func setupGetByIDRouter(svc service.AdminService) *gin.Engine {
  21. gin.SetMode(gin.TestMode)
  22. r := gin.New()
  23. h := NewUserHandler(svc, nil, nil, nil, nil, nil, nil)
  24. r.GET("/admin/users/:id", h.GetByID)
  25. return r
  26. }
  27. func TestAdminUserGetByID_IncludeDeleted(t *testing.T) {
  28. svc := &getByIDAdminStub{AdminService: newStubAdminService()}
  29. router := setupGetByIDRouter(svc)
  30. t.Run("normal path returns 404 for deleted user", func(t *testing.T) {
  31. w := httptest.NewRecorder()
  32. req, _ := http.NewRequest(http.MethodGet, "/admin/users/7", nil)
  33. router.ServeHTTP(w, req)
  34. require.Equal(t, http.StatusNotFound, w.Code)
  35. })
  36. t.Run("include_deleted=true returns 200", func(t *testing.T) {
  37. w := httptest.NewRecorder()
  38. req, _ := http.NewRequest(http.MethodGet, "/admin/users/7?include_deleted=true", nil)
  39. router.ServeHTTP(w, req)
  40. require.Equal(t, http.StatusOK, w.Code)
  41. })
  42. }