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
|
|
|
|
access := AddTestContacts(t, "groupcontact", 2);
|
|
|
|
contact := ConnectTestContacts(t, access[0], access[1])
|
|
|
|
|
|
|
|
// app connects websocket
|
|
|
|
wsA := getTestWebsocket()
|
|
|
|
announce := Announce{ AppToken: access[0] }
|
|
|
|
data, _ := json.Marshal(&announce)
|
|
|
|
wsA.WriteMessage(websocket.TextMessage, data)
|
2022-01-25 07:25:43 +00:00
|
|
|
wsB := getTestWebsocket()
|
|
|
|
announce = Announce{ AppToken: access[1] }
|
|
|
|
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)
|
|
|
|
SetBearerAuth(r, access[0])
|
|
|
|
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)
|
|
|
|
vars = map[string]string{ "cardId": contact[1].ContactCardId }
|
|
|
|
r = mux.SetURLVars(r, vars)
|
|
|
|
SetBearerAuth(r, access[1])
|
|
|
|
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
|
|
|
|
vars["cardId"] = contact[0].ContactCardId
|
|
|
|
r = mux.SetURLVars(r, vars)
|
|
|
|
SetBearerAuth(r, access[0])
|
|
|
|
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)
|
|
|
|
vars = map[string]string{ "cardId": contact[0].ContactCardId }
|
|
|
|
r = mux.SetURLVars(r, vars)
|
|
|
|
SetBearerAuth(r, access[0])
|
|
|
|
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)
|
|
|
|
vars = map[string]string{ "cardId": contact[1].ContactCardId }
|
|
|
|
r = mux.SetURLVars(r, vars)
|
|
|
|
SetBearerAuth(r, access[1])
|
|
|
|
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)
|
|
|
|
SetBearerAuth(r, access[0])
|
|
|
|
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)
|
|
|
|
SetBearerAuth(r, access[0])
|
|
|
|
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)
|
|
|
|
SetBearerAuth(r, access[0])
|
|
|
|
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)
|
|
|
|
vars = map[string]string{ "cardId": contact[0].ContactCardId }
|
|
|
|
r = mux.SetURLVars(r, vars)
|
|
|
|
SetBearerAuth(r, access[0])
|
|
|
|
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)
|
|
|
|
vars = map[string]string{ "cardId": contact[1].ContactCardId }
|
|
|
|
r = mux.SetURLVars(r, vars)
|
|
|
|
SetBearerAuth(r, access[1])
|
|
|
|
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)
|
|
|
|
SetBearerAuth(r, access[0])
|
|
|
|
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
|
|
|
}
|