memo_test.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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. "github.com/usememos/memos/api"
  11. )
  12. func TestMemoServer(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 := &api.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. memoList, err := s.getMemoList()
  25. require.NoError(t, err)
  26. require.Len(t, memoList, 1)
  27. memo, err := s.postMemoCreate(&api.MemoCreate{
  28. Content: "test memo",
  29. })
  30. require.NoError(t, err)
  31. require.Equal(t, "test memo", memo.Content)
  32. memoList, err = s.getMemoList()
  33. require.NoError(t, err)
  34. require.Len(t, memoList, 2)
  35. updatedContent := "updated memo"
  36. memo, err = s.patchMemo(&api.MemoPatch{
  37. ID: memo.ID,
  38. Content: &updatedContent,
  39. })
  40. require.NoError(t, err)
  41. require.Equal(t, updatedContent, memo.Content)
  42. require.Equal(t, false, memo.Pinned)
  43. memo, err = s.postMemosOrganizer(&api.MemoOrganizerUpsert{
  44. MemoID: memo.ID,
  45. UserID: user.ID,
  46. Pinned: true,
  47. })
  48. require.NoError(t, err)
  49. memo, err = s.patchMemo(&api.MemoPatch{
  50. ID: memo.ID,
  51. Content: &updatedContent,
  52. })
  53. require.NoError(t, err)
  54. require.Equal(t, updatedContent, memo.Content)
  55. require.Equal(t, true, memo.Pinned)
  56. err = s.deleteMemo(&api.MemoDelete{
  57. ID: memo.ID,
  58. })
  59. require.NoError(t, err)
  60. memoList, err = s.getMemoList()
  61. require.NoError(t, err)
  62. require.Len(t, memoList, 1)
  63. }
  64. func (s *TestingServer) getMemo(memoID int) (*api.Memo, error) {
  65. body, err := s.get(fmt.Sprintf("/api/memo/%d", memoID), nil)
  66. if err != nil {
  67. return nil, err
  68. }
  69. buf := &bytes.Buffer{}
  70. _, err = buf.ReadFrom(body)
  71. if err != nil {
  72. return nil, errors.Wrap(err, "fail to read response body")
  73. }
  74. type MemoCreateResponse struct {
  75. Data *api.Memo `json:"data"`
  76. }
  77. res := new(MemoCreateResponse)
  78. if err = json.Unmarshal(buf.Bytes(), res); err != nil {
  79. return nil, errors.Wrap(err, "fail to unmarshal get memo response")
  80. }
  81. return res.Data, nil
  82. }
  83. func (s *TestingServer) getMemoList() ([]*api.Memo, error) {
  84. body, err := s.get("/api/memo", nil)
  85. if err != nil {
  86. return nil, err
  87. }
  88. buf := &bytes.Buffer{}
  89. _, err = buf.ReadFrom(body)
  90. if err != nil {
  91. return nil, errors.Wrap(err, "fail to read response body")
  92. }
  93. type MemoCreateResponse struct {
  94. Data []*api.Memo `json:"data"`
  95. }
  96. res := new(MemoCreateResponse)
  97. if err = json.Unmarshal(buf.Bytes(), res); err != nil {
  98. return nil, errors.Wrap(err, "fail to unmarshal get memo list response")
  99. }
  100. return res.Data, nil
  101. }
  102. func (s *TestingServer) postMemoCreate(memoCreate *api.MemoCreate) (*api.Memo, error) {
  103. rawData, err := json.Marshal(&memoCreate)
  104. if err != nil {
  105. return nil, errors.Wrap(err, "failed to marshal memo create")
  106. }
  107. reader := bytes.NewReader(rawData)
  108. body, err := s.post("/api/memo", reader, nil)
  109. if err != nil {
  110. return nil, err
  111. }
  112. buf := &bytes.Buffer{}
  113. _, err = buf.ReadFrom(body)
  114. if err != nil {
  115. return nil, errors.Wrap(err, "fail to read response body")
  116. }
  117. type MemoCreateResponse struct {
  118. Data *api.Memo `json:"data"`
  119. }
  120. res := new(MemoCreateResponse)
  121. if err = json.Unmarshal(buf.Bytes(), res); err != nil {
  122. return nil, errors.Wrap(err, "fail to unmarshal post memo create response")
  123. }
  124. return res.Data, nil
  125. }
  126. func (s *TestingServer) patchMemo(memoPatch *api.MemoPatch) (*api.Memo, error) {
  127. rawData, err := json.Marshal(&memoPatch)
  128. if err != nil {
  129. return nil, errors.Wrap(err, "failed to marshal memo patch")
  130. }
  131. reader := bytes.NewReader(rawData)
  132. body, err := s.patch(fmt.Sprintf("/api/memo/%d", memoPatch.ID), reader, nil)
  133. if err != nil {
  134. return nil, err
  135. }
  136. buf := &bytes.Buffer{}
  137. _, err = buf.ReadFrom(body)
  138. if err != nil {
  139. return nil, errors.Wrap(err, "fail to read response body")
  140. }
  141. type MemoPatchResponse struct {
  142. Data *api.Memo `json:"data"`
  143. }
  144. res := new(MemoPatchResponse)
  145. if err = json.Unmarshal(buf.Bytes(), res); err != nil {
  146. return nil, errors.Wrap(err, "fail to unmarshal patch memo response")
  147. }
  148. return res.Data, nil
  149. }
  150. func (s *TestingServer) deleteMemo(memoDelete *api.MemoDelete) error {
  151. _, err := s.delete(fmt.Sprintf("/api/memo/%d", memoDelete.ID), nil)
  152. return err
  153. }
  154. func (s *TestingServer) postMemosOrganizer(memosOrganizer *api.MemoOrganizerUpsert) (*api.Memo, error) {
  155. rawData, err := json.Marshal(&memosOrganizer)
  156. if err != nil {
  157. return nil, errors.Wrap(err, "failed to marshal memos organizer")
  158. }
  159. reader := bytes.NewReader(rawData)
  160. body, err := s.post(fmt.Sprintf("/api/memo/%d/organizer", memosOrganizer.MemoID), reader, nil)
  161. if err != nil {
  162. return nil, err
  163. }
  164. buf := &bytes.Buffer{}
  165. _, err = buf.ReadFrom(body)
  166. if err != nil {
  167. return nil, errors.Wrap(err, "fail to read response body")
  168. }
  169. type MemoOrganizerResponse struct {
  170. Data *api.Memo `json:"data"`
  171. }
  172. res := new(MemoOrganizerResponse)
  173. if err = json.Unmarshal(buf.Bytes(), res); err != nil {
  174. return nil, errors.Wrap(err, "fail to unmarshal organizer memo create response")
  175. }
  176. return res.Data, err
  177. }