|
|
- package Messages_test
-
- import (
- "encoding/base64"
- "encoding/json"
- "fmt"
- "io/ioutil"
- "net/http"
- "testing"
-
- "git.tovijaeschke.xyz/tovi/Capsule/Backend/Database"
- "git.tovijaeschke.xyz/tovi/Capsule/Backend/Database/Seeder"
- "git.tovijaeschke.xyz/tovi/Capsule/Backend/Models"
- "git.tovijaeschke.xyz/tovi/Capsule/Backend/Tests"
- )
-
- func Test_ConversationsList(t *testing.T) {
- client, ts, err := Tests.InitTestEnv()
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- u, err := Database.GetUserByUsername("test")
-
- key, err := Seeder.GenerateAesKey()
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- nameCiphertext, err := key.AesEncrypt([]byte("Test conversation"))
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- twoUserCiphertext, err := key.AesEncrypt([]byte("false"))
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- messageThread := Models.ConversationDetail{
- Name: base64.StdEncoding.EncodeToString(nameCiphertext),
- TwoUser: base64.StdEncoding.EncodeToString(twoUserCiphertext),
- }
-
- err = Database.CreateConversationDetail(&messageThread)
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- conversationDetailIDCiphertext, err := key.AesEncrypt([]byte(messageThread.ID.String()))
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- adminCiphertext, err := key.AesEncrypt([]byte("true"))
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- pubKey := Seeder.GetPubKey()
-
- messageThreadUser := Models.UserConversation{
- UserID: u.ID,
- ConversationDetailID: base64.StdEncoding.EncodeToString(conversationDetailIDCiphertext),
- Admin: base64.StdEncoding.EncodeToString(adminCiphertext),
- SymmetricKey: base64.StdEncoding.EncodeToString(
- Seeder.EncryptWithPublicKey(key.Key, pubKey),
- ),
- }
-
- err = Database.CreateUserConversation(&messageThreadUser)
-
- req, _ := http.NewRequest("GET", ts.URL+"/api/v1/auth/conversations", nil)
-
- resp, err := client.Do(req)
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- if resp.StatusCode != http.StatusOK {
- t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode)
- return
- }
-
- requestBody, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode)
- return
- }
-
- var conversations []Models.UserConversation
-
- json.Unmarshal(requestBody, &conversations)
-
- if len(conversations) != 1 {
- t.Errorf("Expected %d, recieved %d", 1, len(conversations))
- return
- }
-
- conv := conversations[0]
-
- decodedId, err := base64.StdEncoding.DecodeString(conv.ConversationDetailID)
- if err != nil {
- t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode)
- return
- }
- decrypedId, err := key.AesDecrypt(decodedId)
- if err != nil {
- t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode)
- return
- }
-
- req, _ = http.NewRequest(
- "GET",
- ts.URL+"/api/v1/auth/conversation_details?conversation_detail_ids="+string(decrypedId),
- nil,
- )
-
- resp, err = client.Do(req)
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- var conversationDetails []Models.ConversationDetail
-
- requestBody, err = ioutil.ReadAll(resp.Body)
- if err != nil {
- t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode)
- return
- }
-
- json.Unmarshal(requestBody, &conversationDetails)
-
- if len(conversationDetails) != 1 {
- t.Errorf("Expected %d, recieved %d", 1, len(conversations))
- }
-
- decodedName, err := base64.StdEncoding.DecodeString(conversationDetails[0].Name)
- if err != nil {
- t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode)
- return
- }
- decrypedName, err := key.AesDecrypt(decodedName)
- if err != nil {
- t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode)
- return
- }
-
- if string(decrypedName) != "Test conversation" {
- t.Errorf("Expected %s, recieved %s", "Test converation", string(decrypedName))
- }
- }
-
- func Test_ConversationsListPagination(t *testing.T) {
- client, ts, err := Tests.InitTestEnv()
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- u, err := Database.GetUserByUsername("test")
-
- key, err := Seeder.GenerateAesKey()
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- for i := 0; i < 40; i++ {
- nameCiphertext, err := key.AesEncrypt([]byte(
- fmt.Sprintf("Test conversation %d", i),
- ))
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- twoUserCiphertext, err := key.AesEncrypt([]byte("false"))
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- messageThread := Models.ConversationDetail{
- Name: base64.StdEncoding.EncodeToString(nameCiphertext),
- TwoUser: base64.StdEncoding.EncodeToString(twoUserCiphertext),
- }
-
- err = Database.CreateConversationDetail(&messageThread)
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- conversationDetailIDCiphertext, err := key.AesEncrypt([]byte(messageThread.ID.String()))
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- adminCiphertext, err := key.AesEncrypt([]byte("true"))
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- pubKey := Seeder.GetPubKey()
-
- messageThreadUser := Models.UserConversation{
- UserID: u.ID,
- ConversationDetailID: base64.StdEncoding.EncodeToString(conversationDetailIDCiphertext),
- Admin: base64.StdEncoding.EncodeToString(adminCiphertext),
- SymmetricKey: base64.StdEncoding.EncodeToString(
- Seeder.EncryptWithPublicKey(key.Key, pubKey),
- ),
- }
-
- err = Database.CreateUserConversation(&messageThreadUser)
- }
-
- req, _ := http.NewRequest("GET", ts.URL+"/api/v1/auth/conversations?page=0", nil)
-
- resp, err := client.Do(req)
- if err != nil {
- t.Errorf("Expected nil, recieved %s", err.Error())
- return
- }
-
- if resp.StatusCode != http.StatusOK {
- t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode)
- return
- }
-
- requestBody, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- t.Errorf("Expected %d, recieved %d", http.StatusOK, resp.StatusCode)
- return
- }
-
- var conversations []Models.UserConversation
-
- json.Unmarshal(requestBody, &conversations)
-
- if len(conversations) != 20 {
- t.Errorf("Expected %d, recieved %d", 1, len(conversations))
- }
- }
|