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.

127 lines
3.5 KiB

2 years ago
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. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Database"
  9. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Database/Seeder"
  10. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Tests"
  11. "github.com/gofrs/uuid"
  12. )
  13. func Test_CreateConversation(t *testing.T) {
  14. client, ts, err := Tests.InitTestEnv()
  15. if err != nil {
  16. t.Errorf("Expected nil, recieved %s", err.Error())
  17. return
  18. }
  19. u, err := Database.GetUserByUsername("test")
  20. key, err := Seeder.GenerateAesKey()
  21. if err != nil {
  22. t.Errorf("Expected nil, recieved %s", err.Error())
  23. return
  24. }
  25. nameCiphertext, err := key.AesEncrypt([]byte("Test conversation"))
  26. if err != nil {
  27. t.Errorf("Expected nil, recieved %s", err.Error())
  28. return
  29. }
  30. twoUserCiphertext, err := key.AesEncrypt([]byte("false"))
  31. if err != nil {
  32. t.Errorf("Expected nil, recieved %s", err.Error())
  33. return
  34. }
  35. id, err := uuid.NewV4()
  36. if err != nil {
  37. t.Errorf("Expected nil, recieved %s", err.Error())
  38. return
  39. }
  40. conversationDetailIDCiphertext, err := key.AesEncrypt([]byte(id.String()))
  41. if err != nil {
  42. t.Errorf("Expected nil, recieved %s", err.Error())
  43. return
  44. }
  45. adminCiphertext, err := key.AesEncrypt([]byte("true"))
  46. if err != nil {
  47. t.Errorf("Expected nil, recieved %s", err.Error())
  48. return
  49. }
  50. userIDCiphertext, err := key.AesEncrypt([]byte(u.ID.String()))
  51. if err != nil {
  52. t.Errorf("Expected nil, recieved %s", err.Error())
  53. return
  54. }
  55. usernameCiphertext, err := key.AesEncrypt([]byte(u.Username))
  56. if err != nil {
  57. t.Errorf("Expected nil, recieved %s", err.Error())
  58. return
  59. }
  60. pubKey := Seeder.GetPubKey()
  61. d := struct {
  62. ID string `json:"id"`
  63. Name string `json:"name"`
  64. TwoUser string `json:"two_user"`
  65. Users []Database.ConversationDetailUser `json:"users"`
  66. UserConversations []Database.UserConversation `json:"user_conversations"`
  67. }{
  68. ID: id.String(),
  69. Name: base64.StdEncoding.EncodeToString(nameCiphertext),
  70. TwoUser: base64.StdEncoding.EncodeToString(twoUserCiphertext),
  71. Users: []Database.ConversationDetailUser{
  72. {
  73. ConversationDetailID: id,
  74. UserID: base64.StdEncoding.EncodeToString(userIDCiphertext),
  75. Username: base64.StdEncoding.EncodeToString(usernameCiphertext),
  76. AssociationKey: "",
  77. PublicKey: "",
  78. Admin: base64.StdEncoding.EncodeToString(adminCiphertext),
  79. },
  80. },
  81. UserConversations: []Database.UserConversation{
  82. {
  83. UserID: u.ID,
  84. ConversationDetailID: base64.StdEncoding.EncodeToString(conversationDetailIDCiphertext),
  85. Admin: base64.StdEncoding.EncodeToString(adminCiphertext),
  86. SymmetricKey: base64.StdEncoding.EncodeToString(
  87. Seeder.EncryptWithPublicKey(key.Key, pubKey),
  88. ),
  89. },
  90. },
  91. }
  92. jsonStr, _ := json.Marshal(d)
  93. req, _ := http.NewRequest("POST", ts.URL+"/api/v1/auth/conversations", 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. }
  103. var c Database.ConversationDetail
  104. err = Database.DB.First(&c, "id = ?", id.String()).Error
  105. if err != nil {
  106. t.Errorf("Expected conversation detail record, received %s", err.Error())
  107. return
  108. }
  109. }