databag/net/server/internal/ucConnectContact_test.go

135 lines
4.2 KiB
Go
Raw Normal View History

2022-01-19 23:03:06 +00:00
package databag
import (
2022-01-23 04:37:14 +00:00
"time"
2022-01-19 23:03:06 +00:00
"testing"
2022-01-21 05:48:24 +00:00
"encoding/json"
"github.com/gorilla/websocket"
2022-01-21 00:26:59 +00:00
"github.com/gorilla/mux"
2022-01-20 04:25:20 +00:00
"github.com/stretchr/testify/assert"
2022-01-19 23:03:06 +00:00
)
func TestConnectContact(t *testing.T) {
2022-01-21 00:26:59 +00:00
var card Card
2022-01-21 05:48:24 +00:00
var revision Revision
2022-01-21 01:01:02 +00:00
var msg DataMessage
var vars map[string]string
2022-01-23 04:37:14 +00:00
var cardRevision int64
2022-01-21 18:34:08 +00:00
var contactStatus ContactStatus
2022-01-19 23:03:06 +00:00
2022-01-20 23:19:26 +00:00
// create some contacts for this test
access := AddTestContacts(t, "connect", 2)
2022-01-19 23:03:06 +00:00
2022-01-21 01:01:02 +00:00
// get A identity message
2022-01-20 23:19:26 +00:00
r, w, _ := NewRequest("GET", "/profile/message", nil)
SetBearerAuth(r, access[0])
2022-01-20 08:05:12 +00:00
GetProfileMessage(w, r)
assert.NoError(t, ReadResponse(w, &msg))
2022-01-21 05:48:24 +00:00
// app connects websocket
ws := getTestWebsocket()
announce := Announce{ AppToken: access[1] }
data, _ := json.Marshal(&announce)
ws.WriteMessage(websocket.TextMessage, data)
2022-01-23 04:37:14 +00:00
ws.SetReadDeadline(time.Now().Add(2 * time.Second))
2022-01-21 05:48:24 +00:00
_, data, _ = ws.ReadMessage()
assert.NoError(t, json.Unmarshal(data, &revision))
2022-01-22 19:40:20 +00:00
//cardRevision = revision.Card
2022-01-21 05:48:24 +00:00
2022-01-21 01:01:02 +00:00
// add A card in B
2022-01-20 23:19:26 +00:00
r, w, _ = NewRequest("POST", "/contact/cards", &msg)
SetBearerAuth(r, access[1])
AddCard(w, r)
2022-01-21 00:26:59 +00:00
assert.NoError(t, ReadResponse(w, &card))
2022-01-21 05:48:24 +00:00
// profile revision incremented
2022-01-23 04:37:14 +00:00
ws.SetReadDeadline(time.Now().Add(2 * time.Second))
_, data, _ = ws.ReadMessage()
assert.NoError(t, json.Unmarshal(data, &revision))
assert.NotEqual(t, cardRevision, revision.Card)
cardRevision = revision.Card
2022-01-21 05:48:24 +00:00
2022-01-21 01:01:02 +00:00
// update A status to connecting
2022-01-21 00:26:59 +00:00
r, w, _ = NewRequest("PUT", "/contact/cards/{cardId}/status", APP_CARDCONNECTING)
2022-01-21 01:01:02 +00:00
vars = map[string]string{ "cardId": card.CardId }
2022-01-21 00:26:59 +00:00
r = mux.SetURLVars(r, vars)
SetBearerAuth(r, access[1])
SetCardStatus(w, r)
2022-01-20 23:19:26 +00:00
assert.NoError(t, ReadResponse(w, &card))
2022-01-21 18:34:08 +00:00
// card revision incremented
2022-01-23 04:37:14 +00:00
ws.SetReadDeadline(time.Now().Add(2 * time.Second))
_, data, _ = ws.ReadMessage()
assert.NoError(t, json.Unmarshal(data, &revision))
assert.NotEqual(t, cardRevision, revision.Card)
cardRevision = revision.Card
2022-01-21 05:48:24 +00:00
2022-01-21 01:01:02 +00:00
// get open message to A
r, w, _ = NewRequest("GET", "/contact/cards/{cardId}/openMessage", nil)
vars = map[string]string{ "cardId": card.CardId }
r = mux.SetURLVars(r, vars)
SetBearerAuth(r, access[1])
GetOpenMessage(w, r)
assert.NoError(t, ReadResponse(w, &msg))
2022-01-21 07:41:08 +00:00
// set open message in A
r, w, _ = NewRequest("PUT", "/contact/openMessage", msg)
SetOpenMessage(w, r)
assert.NoError(t, ReadResponse(w, &contactStatus))
2022-01-21 08:05:42 +00:00
// get view of cards in A
2022-01-21 08:39:43 +00:00
r, w, _ = NewRequest("GET", "/contact/cards/view", nil)
2022-01-21 08:05:42 +00:00
SetBearerAuth(r, access[0])
GetCardView(w, r)
var views []CardView
assert.NoError(t, ReadResponse(w, &views))
2022-01-21 08:39:43 +00:00
assert.Equal(t, len(views), 1)
2022-01-21 08:05:42 +00:00
2022-01-21 08:39:43 +00:00
// get B card in A
r, w, _ = NewRequest("GET", "/contact/cards/{cardId}", nil)
vars = map[string]string{ "cardId": views[0].CardId }
r = mux.SetURLVars(r, vars)
SetBearerAuth(r, access[0])
GetCard(w, r)
assert.NoError(t, ReadResponse(w, &card))
2022-01-21 18:34:08 +00:00
// update B status to connecting
r, w, _ = NewRequest("PUT", "/contact/cards/{cardId}/status", APP_CARDCONNECTING)
vars = map[string]string{ "cardId": views[0].CardId }
r = mux.SetURLVars(r, vars)
SetBearerAuth(r, access[0])
SetCardStatus(w, r)
assert.NoError(t, ReadResponse(w, &card))
2022-01-19 23:03:06 +00:00
2022-01-21 18:34:08 +00:00
// get open message to B
r, w, _ = NewRequest("GET", "/contact/cards/{cardId}/openMessage", nil)
vars = map[string]string{ "cardId": views[0].CardId }
r = mux.SetURLVars(r, vars)
SetBearerAuth(r, access[0])
GetOpenMessage(w, r)
assert.NoError(t, ReadResponse(w, &msg))
2022-01-19 23:03:06 +00:00
2022-01-21 18:34:08 +00:00
// set open message in B
r, w, _ = NewRequest("PUT", "/contact/openMessage", msg)
SetOpenMessage(w, r)
assert.NoError(t, ReadResponse(w, &contactStatus))
assert.Equal(t, APP_CARDCONNECTED, contactStatus.Status)
2022-01-19 23:03:06 +00:00
2022-01-21 18:34:08 +00:00
// card revision incremented
2022-01-23 04:37:14 +00:00
ws.SetReadDeadline(time.Now().Add(2 * time.Second))
_, data, _ = ws.ReadMessage()
assert.NoError(t, json.Unmarshal(data, &revision))
assert.NotEqual(t, cardRevision, revision.Card)
cardRevision = revision.Card
2022-01-19 23:03:06 +00:00
2022-01-21 18:34:08 +00:00
// update B status to connected
r, w, _ = NewRequest("PUT", "/contact/cards/{cardId}/status?token=" + contactStatus.Token, APP_CARDCONNECTED)
vars = map[string]string{ "cardId": views[0].CardId }
r = mux.SetURLVars(r, vars)
SetBearerAuth(r, access[0])
SetCardStatus(w, r)
assert.NoError(t, ReadResponse(w, &card))
2022-01-19 23:03:06 +00:00
}