memo_relation_test.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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 TestMemoRelationServer(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.CreateMemoRequest{
  28. Content: "test memo",
  29. })
  30. require.NoError(t, err)
  31. require.Equal(t, "test memo", memo.Content)
  32. memo2, err := s.postMemoCreate(&api.CreateMemoRequest{
  33. Content: "test memo2",
  34. RelationList: []*api.MemoRelationUpsert{
  35. {
  36. RelatedMemoID: memo.ID,
  37. Type: api.MemoRelationReference,
  38. },
  39. },
  40. })
  41. require.NoError(t, err)
  42. require.Equal(t, "test memo2", memo2.Content)
  43. memoList, err = s.getMemoList()
  44. require.NoError(t, err)
  45. require.Len(t, memoList, 3)
  46. require.Len(t, memo2.RelationList, 1)
  47. err = s.deleteMemoRelation(memo2.ID, memo.ID, api.MemoRelationReference)
  48. require.NoError(t, err)
  49. memo2, err = s.getMemo(memo2.ID)
  50. require.NoError(t, err)
  51. require.Len(t, memo2.RelationList, 0)
  52. memoRelation, err := s.postMemoRelationUpsert(memo2.ID, &api.MemoRelationUpsert{
  53. RelatedMemoID: memo.ID,
  54. Type: api.MemoRelationReference,
  55. })
  56. require.NoError(t, err)
  57. require.Equal(t, memo.ID, memoRelation.RelatedMemoID)
  58. memo2, err = s.getMemo(memo2.ID)
  59. require.NoError(t, err)
  60. require.Len(t, memo2.RelationList, 1)
  61. }
  62. func (s *TestingServer) postMemoRelationUpsert(memoID int, memoRelationUpsert *api.MemoRelationUpsert) (*api.MemoRelation, error) {
  63. rawData, err := json.Marshal(&memoRelationUpsert)
  64. if err != nil {
  65. return nil, errors.Wrap(err, "failed to marshal memo relation upsert")
  66. }
  67. reader := bytes.NewReader(rawData)
  68. body, err := s.post(fmt.Sprintf("/api/memo/%d/relation", memoID), reader, nil)
  69. if err != nil {
  70. return nil, err
  71. }
  72. buf := &bytes.Buffer{}
  73. _, err = buf.ReadFrom(body)
  74. if err != nil {
  75. return nil, errors.Wrap(err, "fail to read response body")
  76. }
  77. type MemoCreateResponse struct {
  78. Data *api.MemoRelation `json:"data"`
  79. }
  80. res := new(MemoCreateResponse)
  81. if err = json.Unmarshal(buf.Bytes(), res); err != nil {
  82. return nil, errors.Wrap(err, "fail to unmarshal post memo relation upsert response")
  83. }
  84. return res.Data, nil
  85. }
  86. func (s *TestingServer) deleteMemoRelation(memoID int, relatedMemoID int, relationType api.MemoRelationType) error {
  87. _, err := s.delete(fmt.Sprintf("/api/memo/%d/relation/%d/type/%s", memoID, relatedMemoID, relationType), nil)
  88. return err
  89. }