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.

137 lines
3.0 KiB

2 years ago
2 years ago
  1. package Friends_test
  2. import (
  3. "bytes"
  4. "encoding/base64"
  5. "encoding/json"
  6. "fmt"
  7. "net/http"
  8. "testing"
  9. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Database"
  10. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Database/Seeder"
  11. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Models"
  12. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Tests"
  13. )
  14. func Test_AcceptFriendRequest(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. if err != nil {
  22. t.Errorf("Expected nil, recieved %s", err.Error())
  23. return
  24. }
  25. u2, err := Tests.InitTestCreateUser("test2")
  26. if err != nil {
  27. t.Errorf("Expected nil, recieved %s", err.Error())
  28. return
  29. }
  30. key, err := Seeder.GenerateAesKey()
  31. if err != nil {
  32. t.Errorf("Expected nil, recieved %s", err.Error())
  33. return
  34. }
  35. decodedPublicKey := Seeder.GetPubKey()
  36. encPublicKey, err := key.AesEncrypt([]byte(Seeder.PublicKey))
  37. if err != nil {
  38. t.Errorf("Expected nil, recieved %s", err.Error())
  39. return
  40. }
  41. friendReq := Models.FriendRequest{
  42. UserID: u.ID,
  43. FriendID: base64.StdEncoding.EncodeToString(
  44. Seeder.EncryptWithPublicKey(
  45. []byte(u2.ID.String()),
  46. decodedPublicKey,
  47. ),
  48. ),
  49. FriendUsername: base64.StdEncoding.EncodeToString(
  50. Seeder.EncryptWithPublicKey(
  51. []byte(u2.Username),
  52. decodedPublicKey,
  53. ),
  54. ),
  55. FriendPublicAsymmetricKey: base64.StdEncoding.EncodeToString(
  56. encPublicKey,
  57. ),
  58. SymmetricKey: base64.StdEncoding.EncodeToString(
  59. Seeder.EncryptWithPublicKey(key.Key, decodedPublicKey),
  60. ),
  61. }
  62. err = Database.CreateFriendRequest(&friendReq)
  63. if err != nil {
  64. t.Errorf("Expected nil, recieved %s", err.Error())
  65. return
  66. }
  67. friendReqResponse := Models.FriendRequest{
  68. UserID: u2.ID,
  69. FriendID: base64.StdEncoding.EncodeToString(
  70. Seeder.EncryptWithPublicKey(
  71. []byte(u.ID.String()),
  72. decodedPublicKey,
  73. ),
  74. ),
  75. FriendUsername: base64.StdEncoding.EncodeToString(
  76. Seeder.EncryptWithPublicKey(
  77. []byte(u.Username),
  78. decodedPublicKey,
  79. ),
  80. ),
  81. FriendPublicAsymmetricKey: base64.StdEncoding.EncodeToString(
  82. encPublicKey,
  83. ),
  84. SymmetricKey: base64.StdEncoding.EncodeToString(
  85. Seeder.EncryptWithPublicKey(key.Key, decodedPublicKey),
  86. ),
  87. }
  88. jsonStr, _ := json.Marshal(friendReqResponse)
  89. req, _ := http.NewRequest(
  90. "POST",
  91. fmt.Sprintf(
  92. "%s/api/v1/auth/friend_request/%s",
  93. ts.URL,
  94. friendReq.ID,
  95. ),
  96. bytes.NewBuffer(jsonStr),
  97. )
  98. req.Header.Set("Content-Type", "application/json")
  99. resp, err := client.Do(req)
  100. if err != nil {
  101. t.Errorf("Expected nil, recieved %s", err.Error())
  102. return
  103. }
  104. if resp.StatusCode != http.StatusNoContent {
  105. t.Errorf("Expected %d, recieved %d", http.StatusNoContent, resp.StatusCode)
  106. return
  107. }
  108. var reqs []Models.FriendRequest
  109. err = Database.DB.Find(&reqs).Error
  110. if err != nil {
  111. t.Errorf("Expected nil, recieved %s", err.Error())
  112. return
  113. }
  114. for _, r := range reqs {
  115. if r.AcceptedAt.Valid != true {
  116. t.Errorf("Expected true, recieved false")
  117. return
  118. }
  119. }
  120. }