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.

128 lines
3.5 KiB

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