mirror of
https://github.com/balzack/databag.git
synced 2025-02-12 11:39:17 +00:00
completed contact group test
This commit is contained in:
parent
2a8fe4b6b8
commit
c66d5bedbc
38
net/server/internal/api_removeGroup.go
Normal file
38
net/server/internal/api_removeGroup.go
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
package databag
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
"databag/internal/store"
|
||||||
|
)
|
||||||
|
|
||||||
|
func RemoveGroup(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
|
account, code, err := BearerAppToken(r, false)
|
||||||
|
if err != nil {
|
||||||
|
ErrResponse(w, code, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
params := mux.Vars(r)
|
||||||
|
groupId := params["groupId"]
|
||||||
|
|
||||||
|
err = store.DB.Transaction(func(tx *gorm.DB) error {
|
||||||
|
if res := tx.Where("account_id = ? AND group_id = ?", account.ID, groupId).Delete(&store.Group{}).Error; res != nil {
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
if res := tx.Model(&account).Updates(store.Account{ViewRevision: account.ViewRevision + 1, GroupRevision: account.GroupRevision + 1}).Error; res != nil {
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
ErrResponse(w, http.StatusInternalServerError, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
WriteResponse(w, nil)
|
||||||
|
SetStatus(account)
|
||||||
|
SetContentNotification(account)
|
||||||
|
}
|
||||||
|
|
@ -48,10 +48,10 @@ func SetCardGroup(w http.ResponseWriter, r *http.Request) {
|
|||||||
card.ViewRevision += 1
|
card.ViewRevision += 1
|
||||||
card.DataRevision += 1
|
card.DataRevision += 1
|
||||||
err = store.DB.Transaction(func(tx *gorm.DB) error {
|
err = store.DB.Transaction(func(tx *gorm.DB) error {
|
||||||
if res := store.DB.Model(&account).Update("card_revision", account.CardRevision + 1).Error; res != nil {
|
if res := tx.Model(&account).Update("card_revision", account.CardRevision + 1).Error; res != nil {
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
if res := store.DB.Preload("Groups").Save(&card).Error; res != nil {
|
if res := tx.Preload("Groups").Save(&card).Error; res != nil {
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -66,7 +66,6 @@ func SetCardGroup(w http.ResponseWriter, r *http.Request) {
|
|||||||
Status: card.Status,
|
Status: card.Status,
|
||||||
Notes: card.Notes,
|
Notes: card.Notes,
|
||||||
Token: card.OutToken,
|
Token: card.OutToken,
|
||||||
Groups: nil,
|
|
||||||
}
|
}
|
||||||
for _, group := range card.Groups {
|
for _, group := range card.Groups {
|
||||||
cardData.Groups = append(cardData.Groups, group.GroupId)
|
cardData.Groups = append(cardData.Groups, group.GroupId)
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
/*
|
|
||||||
* DataBag
|
|
||||||
*
|
|
||||||
* DataBag provides storage for decentralized identity based self-hosting apps. It is intended to support sharing of personal data and hosting group conversations.
|
|
||||||
*
|
|
||||||
* API version: 0.0.1
|
|
||||||
* Contact: roland.osborne@gmail.com
|
|
||||||
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
|
|
||||||
*/
|
|
||||||
package databag
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net/http"
|
|
||||||
)
|
|
||||||
|
|
||||||
func RemoveGroup(w http.ResponseWriter, r *http.Request) {
|
|
||||||
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
|
|
||||||
w.WriteHeader(http.StatusOK)
|
|
||||||
}
|
|
||||||
|
|
||||||
func UpdateGroup(w http.ResponseWriter, r *http.Request) {
|
|
||||||
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
|
|
||||||
w.WriteHeader(http.StatusOK)
|
|
||||||
}
|
|
59
net/server/internal/api_updateGroup.go
Normal file
59
net/server/internal/api_updateGroup.go
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
package databag
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"net/http"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
"databag/internal/store"
|
||||||
|
)
|
||||||
|
|
||||||
|
func UpdateGroup(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
|
account, code, err := BearerAppToken(r, false)
|
||||||
|
if err != nil {
|
||||||
|
ErrResponse(w, code, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
params := mux.Vars(r)
|
||||||
|
groupId := params["groupId"]
|
||||||
|
|
||||||
|
var subject Subject
|
||||||
|
if err := ParseRequest(r, w, &subject); err != nil {
|
||||||
|
ErrResponse(w, http.StatusBadRequest, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// load specified group
|
||||||
|
var group store.Group
|
||||||
|
if err := store.DB.Where("account_id = ? AND group_id = ?", account.ID, groupId).First(&group).Error; err != nil {
|
||||||
|
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
ErrResponse(w, http.StatusInternalServerError, err)
|
||||||
|
} else {
|
||||||
|
ErrResponse(w, http.StatusNotFound, err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// update specified group
|
||||||
|
group.DataType = subject.DataType
|
||||||
|
group.Data = subject.Data
|
||||||
|
err = store.DB.Transaction(func(tx *gorm.DB) error {
|
||||||
|
if res := store.DB.Save(group).Error; res != nil {
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
if res := store.DB.Model(&account).Update("group_revision", account.GroupRevision + 1).Error; res != nil {
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
ErrResponse(w, http.StatusInternalServerError, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
SetStatus(account)
|
||||||
|
WriteResponse(w, getGroupModel(&group))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -7,7 +7,7 @@ import (
|
|||||||
|
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
|
|
||||||
// SetHideLog(true)
|
SetHideLog(true)
|
||||||
SetKeySize(2048)
|
SetKeySize(2048)
|
||||||
store.SetPath("file::memory:?cache=shared");
|
store.SetPath("file::memory:?cache=shared");
|
||||||
// store.SetPath("databag.db");
|
// store.SetPath("databag.db");
|
||||||
|
@ -18,6 +18,12 @@ func TestGroupContact(t *testing.T) {
|
|||||||
var revision Revision
|
var revision Revision
|
||||||
var vars map[string]string
|
var vars map[string]string
|
||||||
var cardData CardData
|
var cardData CardData
|
||||||
|
var contactRevision int64
|
||||||
|
var card Card
|
||||||
|
var contactCardRevision int64
|
||||||
|
|
||||||
|
// start notification thread
|
||||||
|
go SendNotifications()
|
||||||
|
|
||||||
// connect contacts
|
// connect contacts
|
||||||
access := AddTestContacts(t, "groupcontact", 2);
|
access := AddTestContacts(t, "groupcontact", 2);
|
||||||
@ -28,12 +34,20 @@ func TestGroupContact(t *testing.T) {
|
|||||||
announce := Announce{ AppToken: access[0] }
|
announce := Announce{ AppToken: access[0] }
|
||||||
data, _ := json.Marshal(&announce)
|
data, _ := json.Marshal(&announce)
|
||||||
wsA.WriteMessage(websocket.TextMessage, data)
|
wsA.WriteMessage(websocket.TextMessage, data)
|
||||||
|
wsB := getTestWebsocket()
|
||||||
|
announce = Announce{ AppToken: access[1] }
|
||||||
|
data, _ = json.Marshal(&announce)
|
||||||
|
wsB.WriteMessage(websocket.TextMessage, data)
|
||||||
|
|
||||||
// receive revision
|
// receive revision
|
||||||
wsA.SetReadDeadline(time.Now().Add(2 * time.Second))
|
wsA.SetReadDeadline(time.Now().Add(2 * time.Second))
|
||||||
_, data, _ = wsA.ReadMessage()
|
_, data, _ = wsA.ReadMessage()
|
||||||
assert.NoError(t, json.Unmarshal(data, &revision))
|
assert.NoError(t, json.Unmarshal(data, &revision))
|
||||||
groupRevision = revision.Group
|
groupRevision = revision.Group
|
||||||
|
wsB.SetReadDeadline(time.Now().Add(2 * time.Second))
|
||||||
|
_, data, _ = wsB.ReadMessage()
|
||||||
|
assert.NoError(t, json.Unmarshal(data, &revision))
|
||||||
|
contactRevision = revision.Card
|
||||||
|
|
||||||
// add group to conatact 0
|
// add group to conatact 0
|
||||||
subject = &Subject{
|
subject = &Subject{
|
||||||
@ -52,6 +66,15 @@ func TestGroupContact(t *testing.T) {
|
|||||||
assert.NotEqual(t, groupRevision, revision.Group)
|
assert.NotEqual(t, groupRevision, revision.Group)
|
||||||
cardRevision = revision.Card
|
cardRevision = 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))
|
||||||
|
contactCardRevision = card.ContentRevision
|
||||||
|
|
||||||
// set contact group
|
// set contact group
|
||||||
r, w, _ = NewRequest("PUT", "/contact/cards/{cardId}/groups/{groupId}", nil)
|
r, w, _ = NewRequest("PUT", "/contact/cards/{cardId}/groups/{groupId}", nil)
|
||||||
vars = make(map[string]string)
|
vars = make(map[string]string)
|
||||||
@ -68,6 +91,22 @@ func TestGroupContact(t *testing.T) {
|
|||||||
_, data, _ = wsA.ReadMessage()
|
_, data, _ = wsA.ReadMessage()
|
||||||
assert.NoError(t, json.Unmarshal(data, &revision))
|
assert.NoError(t, json.Unmarshal(data, &revision))
|
||||||
assert.NotEqual(t, cardRevision, revision.Card)
|
assert.NotEqual(t, cardRevision, revision.Card)
|
||||||
|
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
|
||||||
|
|
||||||
// show group view
|
// show group view
|
||||||
r, w, _ = NewRequest("GET", "/share/groups", nil)
|
r, w, _ = NewRequest("GET", "/share/groups", nil)
|
||||||
@ -76,9 +115,62 @@ func TestGroupContact(t *testing.T) {
|
|||||||
assert.NoError(t, ReadResponse(w, &groups))
|
assert.NoError(t, ReadResponse(w, &groups))
|
||||||
assert.Equal(t, 1, len(groups))
|
assert.Equal(t, 1, len(groups))
|
||||||
|
|
||||||
PrintMsg(groups)
|
// 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")
|
||||||
|
|
||||||
// add 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)
|
||||||
|
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))
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
|
||||||
// show group view
|
// 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, 0, len(groups))
|
||||||
|
|
||||||
|
// stop notification thread
|
||||||
|
ExitNotifications()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user