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.

131 lines
3.2 KiB

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