databag/net/server/internal/ucGroupContact_test.go

201 lines
6.0 KiB
Go
Raw Normal View History

2022-01-25 05:22:33 +00:00
package databag
import (
"time"
"testing"
"encoding/json"
"github.com/gorilla/mux"
"github.com/gorilla/websocket"
"github.com/stretchr/testify/assert"
)
func TestGroupContact(t *testing.T) {
var subject *Subject
var group Group
var groups []Group
var groupRevision int64
var cardRevision int64
var revision Revision
var vars map[string]string
var cardData CardData
2022-01-25 07:25:43 +00:00
var contactRevision int64
var card Card
var contactCardRevision int64
// start notification thread
go SendNotifications()
2022-01-25 05:22:33 +00:00
// connect contacts
2022-01-27 08:07:42 +00:00
_, a, _ := AddTestAccount("groupcontact0")
_, b, _ := AddTestAccount("groupcontact1")
aCard, _ := AddTestCard(a, b)
bCard, _ := AddTestCard(b, a)
OpenTestCard(a, aCard)
OpenTestCard(b, bCard)
2022-01-25 05:22:33 +00:00
// app connects websocket
wsA := getTestWebsocket()
2022-01-27 08:07:42 +00:00
announce := Announce{ AppToken: a }
2022-01-25 05:22:33 +00:00
data, _ := json.Marshal(&announce)
wsA.WriteMessage(websocket.TextMessage, data)
2022-01-25 07:25:43 +00:00
wsB := getTestWebsocket()
2022-01-27 08:07:42 +00:00
announce = Announce{ AppToken: b }
2022-01-25 07:25:43 +00:00
data, _ = json.Marshal(&announce)
wsB.WriteMessage(websocket.TextMessage, data)
2022-01-25 05:22:33 +00:00
// receive revision
wsA.SetReadDeadline(time.Now().Add(2 * time.Second))
_, data, _ = wsA.ReadMessage()
assert.NoError(t, json.Unmarshal(data, &revision))
groupRevision = revision.Group
2022-01-25 07:25:43 +00:00
wsB.SetReadDeadline(time.Now().Add(2 * time.Second))
_, data, _ = wsB.ReadMessage()
assert.NoError(t, json.Unmarshal(data, &revision))
contactRevision = revision.Card
2022-01-25 05:22:33 +00:00
// add group to conatact 0
subject = &Subject{
DataType: "imagroup",
Data: "group data with name and logo",
}
r, w, _ := NewRequest("POST", "/share/groups", subject)
2022-01-27 08:07:42 +00:00
SetBearerAuth(r, a)
2022-01-25 05:22:33 +00:00
AddGroup(w, r)
assert.NoError(t, ReadResponse(w, &group))
// receive revision
wsA.SetReadDeadline(time.Now().Add(2 * time.Second))
_, data, _ = wsA.ReadMessage()
assert.NoError(t, json.Unmarshal(data, &revision))
assert.NotEqual(t, groupRevision, revision.Group)
cardRevision = revision.Card
2022-01-25 07:25:43 +00:00
// get contact revision
r, w, _ = NewRequest("GET", "/contact/cards/{cardId}", nil)
2022-01-27 08:07:42 +00:00
vars = map[string]string{ "cardId": bCard }
2022-01-25 07:25:43 +00:00
r = mux.SetURLVars(r, vars)
2022-01-27 08:07:42 +00:00
SetBearerAuth(r, b)
2022-01-25 07:25:43 +00:00
GetCard(w, r)
assert.NoError(t, ReadResponse(w, &card))
contactCardRevision = card.ContentRevision
2022-01-25 05:22:33 +00:00
// set contact group
r, w, _ = NewRequest("PUT", "/contact/cards/{cardId}/groups/{groupId}", nil)
vars = make(map[string]string)
vars["groupId"] = group.GroupId
2022-01-27 08:07:42 +00:00
vars["cardId"] = aCard
2022-01-25 05:22:33 +00:00
r = mux.SetURLVars(r, vars)
2022-01-27 08:07:42 +00:00
SetBearerAuth(r, a)
2022-01-25 05:22:33 +00:00
SetCardGroup(w, r)
assert.NoError(t, ReadResponse(w, &cardData))
assert.Equal(t, 1, len(cardData.Groups))
2022-01-25 18:48:02 +00:00
// get contact revision
r, w, _ = NewRequest("GET", "/contact/cards/{cardId}", nil)
2022-01-27 08:07:42 +00:00
vars = map[string]string{ "cardId": aCard }
2022-01-25 18:48:02 +00:00
r = mux.SetURLVars(r, vars)
2022-01-27 08:07:42 +00:00
SetBearerAuth(r, a)
2022-01-25 18:48:02 +00:00
GetCard(w, r)
card = Card{}
assert.NoError(t, ReadResponse(w, &card))
assert.Equal(t, len(card.CardData.Groups), 1)
2022-01-25 05:22:33 +00:00
// receive revision
wsA.SetReadDeadline(time.Now().Add(2 * time.Second))
_, data, _ = wsA.ReadMessage()
assert.NoError(t, json.Unmarshal(data, &revision))
assert.NotEqual(t, cardRevision, revision.Card)
2022-01-25 07:25:43 +00:00
groupRevision = revision.Group
wsB.SetReadDeadline(time.Now().Add(2 * time.Second))
_, data, _ = wsB.ReadMessage()
assert.NoError(t, json.Unmarshal(data, &revision))
assert.NotEqual(t, contactRevision, revision.Card)
contactRevision = revision.Card
// get contact revision
r, w, _ = NewRequest("GET", "/contact/cards/{cardId}", nil)
2022-01-27 08:07:42 +00:00
vars = map[string]string{ "cardId": bCard }
2022-01-25 07:25:43 +00:00
r = mux.SetURLVars(r, vars)
2022-01-27 08:07:42 +00:00
SetBearerAuth(r, b)
2022-01-25 07:25:43 +00:00
GetCard(w, r)
assert.NoError(t, ReadResponse(w, &card))
assert.NotEqual(t, contactCardRevision, card.ContentRevision)
contactCardRevision = card.ContentRevision
2022-01-25 05:22:33 +00:00
// show group view
r, w, _ = NewRequest("GET", "/share/groups", nil)
2022-01-27 08:07:42 +00:00
SetBearerAuth(r, a)
2022-01-25 05:22:33 +00:00
GetGroups(w, r)
assert.NoError(t, ReadResponse(w, &groups))
assert.Equal(t, 1, len(groups))
2022-01-25 07:25:43 +00:00
// update group in conatact 0
subject = &Subject{
DataType: "imagroupEDIT",
Data: "group data with name and logo",
}
r, w, _ = NewRequest("POST", "/share/groups", subject)
vars = make(map[string]string)
vars["groupId"] = group.GroupId
r = mux.SetURLVars(r, vars)
2022-01-27 08:07:42 +00:00
SetBearerAuth(r, a)
2022-01-25 07:25:43 +00:00
UpdateGroup(w, r)
assert.NoError(t, ReadResponse(w, &group))
assert.Equal(t, group.DataType, "imagroupEDIT")
// receive revision
wsA.SetReadDeadline(time.Now().Add(2 * time.Second))
_, data, _ = wsA.ReadMessage()
assert.NoError(t, json.Unmarshal(data, &revision))
assert.NotEqual(t, groupRevision, revision.Group)
groupRevision = revision.Group
// delete group
r, w, _ = NewRequest("DELETE", "/share/groups", nil)
vars = make(map[string]string)
vars["groupId"] = group.GroupId
r = mux.SetURLVars(r, vars)
2022-01-27 08:07:42 +00:00
SetBearerAuth(r, a)
2022-01-25 07:25:43 +00:00
RemoveGroup(w, r)
assert.NoError(t, ReadResponse(w, &group))
2022-01-25 05:22:33 +00:00
2022-01-25 18:48:02 +00:00
// get contact revision
r, w, _ = NewRequest("GET", "/contact/cards/{cardId}", nil)
2022-01-27 08:07:42 +00:00
vars = map[string]string{ "cardId": aCard }
2022-01-25 18:48:02 +00:00
r = mux.SetURLVars(r, vars)
2022-01-27 08:07:42 +00:00
SetBearerAuth(r, a)
2022-01-25 18:48:02 +00:00
GetCard(w, r)
card = Card{}
assert.NoError(t, ReadResponse(w, &card))
assert.Equal(t, len(card.CardData.Groups), 0)
2022-01-25 07:25:43 +00:00
// receive revision
wsA.SetReadDeadline(time.Now().Add(2 * time.Second))
_, data, _ = wsA.ReadMessage()
assert.NoError(t, json.Unmarshal(data, &revision))
assert.NotEqual(t, groupRevision, revision.Group)
wsB.SetReadDeadline(time.Now().Add(2 * time.Second))
_, data, _ = wsB.ReadMessage()
assert.NoError(t, json.Unmarshal(data, &revision))
assert.NotEqual(t, contactRevision, revision.Card)
// get contact revision
r, w, _ = NewRequest("GET", "/contact/cards/{cardId}", nil)
2022-01-27 08:07:42 +00:00
vars = map[string]string{ "cardId": bCard }
2022-01-25 07:25:43 +00:00
r = mux.SetURLVars(r, vars)
2022-01-27 08:07:42 +00:00
SetBearerAuth(r, b)
2022-01-25 07:25:43 +00:00
GetCard(w, r)
assert.NoError(t, ReadResponse(w, &card))
assert.NotEqual(t, contactCardRevision, card.ContentRevision)
2022-01-25 05:22:33 +00:00
// show group view
2022-01-25 07:25:43 +00:00
r, w, _ = NewRequest("GET", "/share/groups", nil)
2022-01-27 08:07:42 +00:00
SetBearerAuth(r, a)
2022-01-25 07:25:43 +00:00
GetGroups(w, r)
assert.NoError(t, ReadResponse(w, &groups))
assert.Equal(t, 0, len(groups))
// stop notification thread
ExitNotifications()
2022-01-25 05:22:33 +00:00
}