user_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package testserver
  2. import (
  3. "bytes"
  4. "context"
  5. "encoding/json"
  6. "fmt"
  7. "testing"
  8. "github.com/pkg/errors"
  9. "github.com/stretchr/testify/require"
  10. apiv1 "github.com/usememos/memos/api/v1"
  11. )
  12. func TestUserServer(t *testing.T) {
  13. ctx := context.Background()
  14. s, err := NewTestingServer(ctx, t)
  15. require.NoError(t, err)
  16. defer s.Shutdown(ctx)
  17. signup := &apiv1.SignUp{
  18. Username: "testuser",
  19. Password: "testpassword",
  20. }
  21. user, err := s.postAuthSignUp(signup)
  22. require.NoError(t, err)
  23. require.Equal(t, signup.Username, user.Username)
  24. user, err = s.getCurrentUser()
  25. require.NoError(t, err)
  26. require.Equal(t, signup.Username, user.Username)
  27. user, err = s.getUserByID(user.ID)
  28. require.NoError(t, err)
  29. require.Equal(t, signup.Username, user.Username)
  30. newEmail := "test@usermemos.com"
  31. userPatch := &apiv1.UpdateUserRequest{
  32. Email: &newEmail,
  33. }
  34. user, err = s.patchUser(user.ID, userPatch)
  35. require.NoError(t, err)
  36. require.Equal(t, newEmail, user.Email)
  37. }
  38. func (s *TestingServer) getCurrentUser() (*apiv1.User, error) {
  39. body, err := s.get("/api/v1/user/me", nil)
  40. if err != nil {
  41. return nil, err
  42. }
  43. buf := &bytes.Buffer{}
  44. _, err = buf.ReadFrom(body)
  45. if err != nil {
  46. return nil, errors.Wrap(err, "fail to read response body")
  47. }
  48. user := &apiv1.User{}
  49. if err = json.Unmarshal(buf.Bytes(), &user); err != nil {
  50. return nil, errors.Wrap(err, "fail to unmarshal get user response")
  51. }
  52. return user, nil
  53. }
  54. func (s *TestingServer) getUserByID(userID int32) (*apiv1.User, error) {
  55. body, err := s.get(fmt.Sprintf("/api/v1/user/%d", userID), nil)
  56. if err != nil {
  57. return nil, err
  58. }
  59. buf := &bytes.Buffer{}
  60. _, err = buf.ReadFrom(body)
  61. if err != nil {
  62. return nil, errors.Wrap(err, "fail to read response body")
  63. }
  64. user := &apiv1.User{}
  65. if err = json.Unmarshal(buf.Bytes(), &user); err != nil {
  66. return nil, errors.Wrap(err, "fail to unmarshal get user response")
  67. }
  68. return user, nil
  69. }
  70. func (s *TestingServer) patchUser(userID int32, request *apiv1.UpdateUserRequest) (*apiv1.User, error) {
  71. rawData, err := json.Marshal(&request)
  72. if err != nil {
  73. return nil, errors.Wrap(err, "failed to marshal request")
  74. }
  75. reader := bytes.NewReader(rawData)
  76. body, err := s.patch(fmt.Sprintf("/api/v1/user/%d", userID), reader, nil)
  77. if err != nil {
  78. return nil, err
  79. }
  80. buf := &bytes.Buffer{}
  81. _, err = buf.ReadFrom(body)
  82. if err != nil {
  83. return nil, errors.Wrap(err, "fail to read response body")
  84. }
  85. user := &apiv1.User{}
  86. if err = json.Unmarshal(buf.Bytes(), user); err != nil {
  87. return nil, errors.Wrap(err, "fail to unmarshal patch user response")
  88. }
  89. return user, nil
  90. }