Encrypted messaging app
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

133 lines
3.3 KiB

2 years ago
2 years ago
  1. package Messages_test
  2. import (
  3. "bytes"
  4. "encoding/base64"
  5. "encoding/json"
  6. "net/http"
  7. "testing"
  8. "time"
  9. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Database"
  10. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Database/Seeder"
  11. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Models"
  12. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Tests"
  13. "github.com/gofrs/uuid"
  14. )
  15. // TODO: Write test for message expiry
  16. func Test_CreateMessage(t *testing.T) {
  17. client, ts, err := Tests.InitTestEnv()
  18. if err != nil {
  19. t.Errorf("Expected nil, recieved %s", err.Error())
  20. return
  21. }
  22. u, err := Database.GetUserByUsername("test")
  23. key, err := Seeder.GenerateAesKey()
  24. if err != nil {
  25. t.Errorf("Expected nil, recieved %s", err.Error())
  26. return
  27. }
  28. dataCiphertext, err := key.AesEncrypt([]byte("Test message..."))
  29. if err != nil {
  30. t.Errorf("Expected nil, recieved %s", err.Error())
  31. return
  32. }
  33. senderIDCiphertext, err := key.AesEncrypt([]byte(u.ID.String()))
  34. if err != nil {
  35. t.Errorf("Expected nil, recieved %s", err.Error())
  36. return
  37. }
  38. id, err := uuid.NewV4()
  39. if err != nil {
  40. t.Errorf("Expected nil, recieved %s", err.Error())
  41. return
  42. }
  43. id2, err := uuid.NewV4()
  44. if err != nil {
  45. t.Errorf("Expected nil, recieved %s", err.Error())
  46. return
  47. }
  48. d := []struct {
  49. MessageData struct {
  50. ID uuid.UUID `json:"id"`
  51. Data string `json:"data"`
  52. SenderID string `json:"sender_id"`
  53. SymmetricKey string `json:"symmetric_key"`
  54. } `json:"message_data"`
  55. Messages []struct {
  56. ID uuid.UUID `json:"id"`
  57. MessageDataID uuid.UUID `json:"message_data_id"`
  58. SymmetricKey string `json:"symmetric_key"`
  59. AssociationKey string `json:"association_key"`
  60. Expiry time.Time `json:"expiry"`
  61. } `json:"message"`
  62. }{
  63. {
  64. MessageData: struct {
  65. ID uuid.UUID `json:"id"`
  66. Data string `json:"data"`
  67. SenderID string `json:"sender_id"`
  68. SymmetricKey string `json:"symmetric_key"`
  69. }{
  70. ID: id,
  71. Data: base64.StdEncoding.EncodeToString(dataCiphertext),
  72. SenderID: base64.StdEncoding.EncodeToString(senderIDCiphertext),
  73. SymmetricKey: "",
  74. },
  75. Messages: []struct {
  76. ID uuid.UUID `json:"id"`
  77. MessageDataID uuid.UUID `json:"message_data_id"`
  78. SymmetricKey string `json:"symmetric_key"`
  79. AssociationKey string `json:"association_key"`
  80. Expiry time.Time `json:"expiry"`
  81. }{
  82. {
  83. ID: id2,
  84. MessageDataID: id,
  85. SymmetricKey: "",
  86. AssociationKey: "",
  87. Expiry: time.Now(),
  88. },
  89. },
  90. },
  91. }
  92. jsonStr, _ := json.Marshal(d)
  93. req, _ := http.NewRequest("POST", ts.URL+"/api/v1/auth/message", bytes.NewBuffer(jsonStr))
  94. req.Header.Set("Content-Type", "application/json")
  95. resp, err := client.Do(req)
  96. if err != nil {
  97. t.Errorf("Expected nil, recieved %s", err.Error())
  98. return
  99. }
  100. if resp.StatusCode != http.StatusNoContent {
  101. t.Errorf("Expected %d, recieved %d", http.StatusNoContent, resp.StatusCode)
  102. return
  103. }
  104. var m Models.Message
  105. err = Database.DB.First(&m).Error
  106. if err != nil {
  107. t.Errorf("Expected conversation detail record, received %s", err.Error())
  108. return
  109. }
  110. var md Models.MessageData
  111. err = Database.DB.First(&md).Error
  112. if err != nil {
  113. t.Errorf("Expected conversation detail record, received %s", err.Error())
  114. return
  115. }
  116. }