mirror of
https://github.com/balzack/databag.git
synced 2025-02-12 03:29:16 +00:00
consolodating tests
This commit is contained in:
parent
67ffe43c8c
commit
dc055fa9af
@ -53,11 +53,6 @@ func SetCardNotes(w http.ResponseWriter, r *http.Request) {
|
|||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
func SetCardProfile(w http.ResponseWriter, r *http.Request) {
|
|
||||||
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
|
|
||||||
w.WriteHeader(http.StatusOK)
|
|
||||||
}
|
|
||||||
|
|
||||||
func SetCloseMessage(w http.ResponseWriter, r *http.Request) {
|
func SetCloseMessage(w http.ResponseWriter, r *http.Request) {
|
||||||
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
|
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
|
@ -48,7 +48,7 @@ func GetArticles(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
} else if tokenType == APP_TOKENCONTACT {
|
} else if tokenType == APP_TOKENCONTACT {
|
||||||
|
|
||||||
card, code, err := BearerContactToken(r)
|
card, code, err := BearerContactToken(r, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ErrResponse(w, code, err)
|
ErrResponse(w, code, err)
|
||||||
return
|
return
|
||||||
|
@ -1,59 +1,35 @@
|
|||||||
package databag
|
package databag
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
|
||||||
"errors"
|
"errors"
|
||||||
"net/http"
|
"net/http"
|
||||||
"gorm.io/gorm"
|
|
||||||
"databag/internal/store"
|
"databag/internal/store"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetProfileMessage(w http.ResponseWriter, r *http.Request) {
|
func GetProfileMessage(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var code int
|
||||||
// extract token
|
var err error
|
||||||
tokenType := r.Header.Get("TokenType")
|
tokenType := r.Header.Get("TokenType")
|
||||||
auth := r.Header.Get("Authorization")
|
|
||||||
token := strings.TrimSpace(strings.TrimPrefix(auth, "Bearer"))
|
|
||||||
target, access, err := ParseToken(token)
|
|
||||||
if err != nil {
|
|
||||||
ErrResponse(w, http.StatusBadRequest, errors.New("invalid bearer token"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// load account record
|
// load account record
|
||||||
var account *store.Account
|
var account *store.Account
|
||||||
if tokenType == APP_TOKENAPP {
|
if tokenType == APP_TOKENAPP {
|
||||||
var app store.App
|
if account, code, err = BearerAppToken(r, true); err != nil {
|
||||||
if err := store.DB.Preload("Account.AccountDetail").Where("account_id = ? AND token = ?", target, access).First(&app).Error; err != nil {
|
ErrResponse(w, code, err)
|
||||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
||||||
ErrResponse(w, http.StatusNotFound, err);
|
|
||||||
} else {
|
|
||||||
ErrResponse(w, http.StatusInternalServerError, err);
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
account = &app.Account
|
|
||||||
} else if tokenType == APP_TOKENCONTACT {
|
} else if tokenType == APP_TOKENCONTACT {
|
||||||
var card store.Card
|
var card *store.Card
|
||||||
if err := store.DB.Preload("Account.AccountDetail").Where("account_id = ? AND InToken = ?", target, access).First(&card).Error; err != nil {
|
if card, code, err = BearerContactToken(r, true); err != nil {
|
||||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
ErrResponse(w, code, err)
|
||||||
ErrResponse(w, http.StatusNotFound, err)
|
|
||||||
} else {
|
|
||||||
ErrResponse(w, http.StatusInternalServerError, err)
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
account = &card.Account
|
account = &card.Account
|
||||||
} else {
|
} else {
|
||||||
ErrResponse(w, http.StatusBadRequest, errors.New("invalid token type"))
|
ErrResponse(w, http.StatusBadRequest, errors.New("invalid token type"))
|
||||||
}
|
|
||||||
detail := &account.AccountDetail
|
|
||||||
|
|
||||||
// check if account is active
|
|
||||||
if account.Disabled {
|
|
||||||
ErrResponse(w, http.StatusGone, errors.New("account is not active"))
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
detail := &account.AccountDetail
|
||||||
|
|
||||||
// generate identity DataMessage
|
// generate identity DataMessage
|
||||||
identity := Identity{
|
identity := Identity{
|
||||||
|
92
net/server/internal/api_setCardProfile.go
Normal file
92
net/server/internal/api_setCardProfile.go
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
package databag
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"net/http"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
"databag/internal/store"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SetCardProfile(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var msg DataMessage
|
||||||
|
|
||||||
|
account, code, err := BearerAppToken(r, false);
|
||||||
|
if err != nil {
|
||||||
|
ErrResponse(w, code, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// scan parameters
|
||||||
|
params := mux.Vars(r)
|
||||||
|
cardId := params["cardId"]
|
||||||
|
|
||||||
|
if err := ParseRequest(r, w, &msg); err != nil {
|
||||||
|
ErrResponse(w, http.StatusBadRequest, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// load referenced card
|
||||||
|
var slot store.CardSlot
|
||||||
|
if err := store.DB.Preload("Card.Groups").Where("account_id = ? AND card_slot_id = ?", account.ID, cardId).First(&slot).Error; err != nil {
|
||||||
|
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
ErrResponse(w, http.StatusInternalServerError, err)
|
||||||
|
} else {
|
||||||
|
ErrResponse(w, http.StatusNotFound, err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if slot.Card == nil {
|
||||||
|
ErrResponse(w, http.StatusNotFound, errors.New("referenced slot is empty"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var identity Identity
|
||||||
|
guid, messageType, _, err := ReadDataMessage(&msg, &identity)
|
||||||
|
if messageType != APP_MSGIDENTITY || err != nil {
|
||||||
|
ErrResponse(w, http.StatusBadRequest, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if slot.Card.Guid != guid {
|
||||||
|
ErrResponse(w, http.StatusBadRequest, errors.New("slot does not contain specified contact"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if slot.Card.ProfileRevision >= identity.Revision {
|
||||||
|
WriteResponse(w, getCardModel(&slot))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// update card
|
||||||
|
slot.Card.ProfileRevision = identity.Revision
|
||||||
|
slot.Card.Username = identity.Handle
|
||||||
|
slot.Card.Name = identity.Name
|
||||||
|
slot.Card.Description = identity.Description
|
||||||
|
slot.Card.Location = identity.Location
|
||||||
|
slot.Card.Image = identity.Image
|
||||||
|
slot.Card.Version = identity.Version
|
||||||
|
slot.Card.Node = identity.Node
|
||||||
|
slot.Revision = account.CardRevision + 1
|
||||||
|
|
||||||
|
// save and update contact revision
|
||||||
|
err = store.DB.Transaction(func(tx *gorm.DB) error {
|
||||||
|
if res := tx.Save(&slot.Card).Error; res != nil {
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
if res := tx.Preload("Card").Save(&slot).Error; res != nil {
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
if res := tx.Model(&account).Update("card_revision", account.CardRevision + 1).Error; res != nil {
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
ErrResponse(w, http.StatusInternalServerError, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
SetStatus(account)
|
||||||
|
WriteResponse(w, getCardModel(&slot));
|
||||||
|
}
|
||||||
|
|
@ -8,7 +8,7 @@ import (
|
|||||||
|
|
||||||
func SetContentRevision(w http.ResponseWriter, r *http.Request) {
|
func SetContentRevision(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
card, code, err := BearerContactToken(r)
|
card, code, err := BearerContactToken(r, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ErrResponse(w, code, err)
|
ErrResponse(w, code, err)
|
||||||
return
|
return
|
||||||
@ -35,6 +35,9 @@ func NotifyContentRevision(card *store.Card, revision int64) error {
|
|||||||
if res := tx.Model(card).Where("id = ?", card.ID).Update("notified_content", revision).Error; res != nil {
|
if res := tx.Model(card).Where("id = ?", card.ID).Update("notified_content", revision).Error; res != nil {
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
if res := tx.Model(&card.CardSlot).Where("id = ?", card.CardSlot.ID).Update("revision", act.CardRevision+1).Error; res != nil {
|
||||||
|
return res
|
||||||
|
}
|
||||||
if res := tx.Model(act).Where("id = ?", act.ID).Update("card_revision", act.CardRevision + 1).Error; res != nil {
|
if res := tx.Model(act).Where("id = ?", act.ID).Update("card_revision", act.CardRevision + 1).Error; res != nil {
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ import (
|
|||||||
|
|
||||||
func SetLabelRevision(w http.ResponseWriter, r *http.Request) {
|
func SetLabelRevision(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
card, code, err := BearerContactToken(r)
|
card, code, err := BearerContactToken(r, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ErrResponse(w, code, err)
|
ErrResponse(w, code, err)
|
||||||
return
|
return
|
||||||
@ -35,6 +35,9 @@ func NotifyLabelRevision(card *store.Card, revision int64) error {
|
|||||||
if res := tx.Model(card).Where("id = ?", card.ID).Update("notified_label", revision).Error; res != nil {
|
if res := tx.Model(card).Where("id = ?", card.ID).Update("notified_label", revision).Error; res != nil {
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
if res := tx.Model(&card.CardSlot).Where("id = ?", card.CardSlot.ID).Update("revision", act.CardRevision+1).Error; res != nil {
|
||||||
|
return res
|
||||||
|
}
|
||||||
if res := tx.Model(act).Where("id = ?", act.ID).Update("card_revision", act.CardRevision + 1).Error; res != nil {
|
if res := tx.Model(act).Where("id = ?", act.ID).Update("card_revision", act.CardRevision + 1).Error; res != nil {
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ import (
|
|||||||
|
|
||||||
func SetProfileRevision(w http.ResponseWriter, r *http.Request) {
|
func SetProfileRevision(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
card, code, err := BearerContactToken(r)
|
card, code, err := BearerContactToken(r, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ErrResponse(w, code, err)
|
ErrResponse(w, code, err)
|
||||||
return
|
return
|
||||||
@ -35,6 +35,9 @@ func NotifyProfileRevision(card *store.Card, revision int64) error {
|
|||||||
if res := tx.Model(card).Where("id = ?", card.ID).Update("notified_profile", revision).Error; res != nil {
|
if res := tx.Model(card).Where("id = ?", card.ID).Update("notified_profile", revision).Error; res != nil {
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
if res := tx.Model(&card.CardSlot).Where("id = ?", card.CardSlot.ID).Update("revision", act.CardRevision+1).Error; res != nil {
|
||||||
|
return res
|
||||||
|
}
|
||||||
if res := tx.Model(act).Where("id = ?", act.ID).Update("card_revision", act.CardRevision+1).Error; res != nil {
|
if res := tx.Model(act).Where("id = ?", act.ID).Update("card_revision", act.CardRevision+1).Error; res != nil {
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ import (
|
|||||||
|
|
||||||
func SetViewRevision(w http.ResponseWriter, r *http.Request) {
|
func SetViewRevision(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
card, code, err := BearerContactToken(r)
|
card, code, err := BearerContactToken(r, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ErrResponse(w, code, err)
|
ErrResponse(w, code, err)
|
||||||
return
|
return
|
||||||
@ -35,6 +35,9 @@ func NotifyViewRevision(card *store.Card, revision int64) error {
|
|||||||
if res := tx.Model(card).Where("id = ?", card.ID).Update("notified_view", revision).Error; res != nil {
|
if res := tx.Model(card).Where("id = ?", card.ID).Update("notified_view", revision).Error; res != nil {
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
if res := tx.Model(&card.CardSlot).Where("id = ?", card.CardSlot.ID).Update("revision", act.CardRevision+1).Error; res != nil {
|
||||||
|
return res
|
||||||
|
}
|
||||||
if res := tx.Model(act).Where("id = ?", act.ID).Update("card_revision", act.CardRevision + 1).Error; res != nil {
|
if res := tx.Model(act).Where("id = ?", act.ID).Update("card_revision", act.CardRevision + 1).Error; res != nil {
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
@ -127,7 +127,7 @@ func ParseToken(token string) (string, string, error) {
|
|||||||
return split[0], split[1], nil
|
return split[0], split[1], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func BearerContactToken(r *http.Request) (*store.Card, int, error) {
|
func BearerContactToken(r *http.Request, detail bool) (*store.Card, int, error) {
|
||||||
|
|
||||||
// parse bearer authentication
|
// parse bearer authentication
|
||||||
auth := r.Header.Get("Authorization")
|
auth := r.Header.Get("Authorization")
|
||||||
@ -139,11 +139,21 @@ func BearerContactToken(r *http.Request) (*store.Card, int, error) {
|
|||||||
|
|
||||||
// find token record
|
// find token record
|
||||||
var card store.Card
|
var card store.Card
|
||||||
if err := store.DB.Preload("Account").Where("account_id = ? AND in_token = ?", target, access).First(&card).Error; err != nil {
|
if detail {
|
||||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
if err := store.DB.Preload("Account.AccountDetail").Where("account_id = ? AND in_token = ?", target, access).First(&card).Error; err != nil {
|
||||||
return nil, http.StatusNotFound, err
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
} else {
|
return nil, http.StatusNotFound, err
|
||||||
return nil, http.StatusInternalServerError, err
|
} else {
|
||||||
|
return nil, http.StatusInternalServerError, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if err := store.DB.Preload("Account").Where("account_id = ? AND in_token = ?", target, access).First(&card).Error; err != nil {
|
||||||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
return nil, http.StatusNotFound, err
|
||||||
|
} else {
|
||||||
|
return nil, http.StatusInternalServerError, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if card.Account.Disabled {
|
if card.Account.Disabled {
|
||||||
|
@ -23,6 +23,7 @@ func getCardModel(slot *store.CardSlot) *Card {
|
|||||||
CardData: &CardData {
|
CardData: &CardData {
|
||||||
NotifiedProfile: slot.Card.NotifiedProfile,
|
NotifiedProfile: slot.Card.NotifiedProfile,
|
||||||
NotifiedContent: slot.Card.NotifiedContent,
|
NotifiedContent: slot.Card.NotifiedContent,
|
||||||
|
NotifiedLabel: slot.Card.NotifiedLabel,
|
||||||
NotifiedView: slot.Card.NotifiedView,
|
NotifiedView: slot.Card.NotifiedView,
|
||||||
CardProfile: &CardProfile{
|
CardProfile: &CardProfile{
|
||||||
Guid: slot.Card.Guid,
|
Guid: slot.Card.Guid,
|
||||||
|
@ -91,6 +91,7 @@ type CardData struct {
|
|||||||
CardData *CardData `json:"cardData"`
|
CardData *CardData `json:"cardData"`
|
||||||
NotifiedProfile int64 `json:"notifiedProfile"`
|
NotifiedProfile int64 `json:"notifiedProfile"`
|
||||||
NotifiedContent int64 `json:"notifiedContent"`
|
NotifiedContent int64 `json:"notifiedContent"`
|
||||||
|
NotifiedLabel int64 `json:"notifiedLabel"`
|
||||||
NotifiedView int64 `json:"notifiedView"`
|
NotifiedView int64 `json:"notifiedView"`
|
||||||
Status string `json:"status"`
|
Status string `json:"status"`
|
||||||
Notes string `json:"notes,omitempty"`
|
Notes string `json:"notes,omitempty"`
|
||||||
|
@ -47,7 +47,7 @@ func SendLocalNotification(notification *store.Notification) {
|
|||||||
|
|
||||||
// pull reference account
|
// pull reference account
|
||||||
var card store.Card
|
var card store.Card
|
||||||
if err := store.DB.Preload("Account").Where("in_token = ?", notification.Token).First(&card).Error; err != nil {
|
if err := store.DB.Preload("Account").Preload("CardSlot").Where("in_token = ?", notification.Token).First(&card).Error; err != nil {
|
||||||
ErrMsg(err)
|
ErrMsg(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -189,6 +189,7 @@ type Card struct {
|
|||||||
NotifiedProfile int64
|
NotifiedProfile int64
|
||||||
Account Account `gorm:"references:Guid"`
|
Account Account `gorm:"references:Guid"`
|
||||||
Groups []Group `gorm:"many2many:card_groups"`
|
Groups []Group `gorm:"many2many:card_groups"`
|
||||||
|
CardSlot CardSlot
|
||||||
}
|
}
|
||||||
|
|
||||||
type Asset struct {
|
type Asset struct {
|
||||||
|
@ -538,22 +538,4 @@ func StatusConnection(token string, rev *Revision) (ws *websocket.Conn, err erro
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
func StatusRevision(ws *websocket.Conn, rev *Revision) (err error) {
|
|
||||||
var data []byte
|
|
||||||
var dataType int
|
|
||||||
|
|
||||||
// read revision update
|
|
||||||
ws.SetReadDeadline(time.Now().Add(TEST_READDEADLINE * time.Second))
|
|
||||||
if dataType, data, err = ws.ReadMessage(); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if dataType != websocket.TextMessage {
|
|
||||||
err = errors.New("invalid status data type")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err = json.Unmarshal(data, rev); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
package databag
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestAddAccount(t *testing.T) {
|
|
||||||
|
|
||||||
// acquire new token for creating accounts
|
|
||||||
r, w, _ := NewRequest("POST", "/admin/accounts", nil)
|
|
||||||
SetBasicAuth(r, "admin:pass");
|
|
||||||
AddNodeAccount(w, r)
|
|
||||||
var token string
|
|
||||||
assert.NoError(t, ReadResponse(w, &token))
|
|
||||||
|
|
||||||
// validate account token
|
|
||||||
r, w, _ = NewRequest("GET", "/account/token", nil)
|
|
||||||
SetBearerAuth(r, token)
|
|
||||||
GetAccountToken(w, r)
|
|
||||||
var tokenType string
|
|
||||||
assert.NoError(t, ReadResponse(w, &tokenType))
|
|
||||||
|
|
||||||
// check if username is available
|
|
||||||
r, w, _ = NewRequest("GET", "/account/claimable?username=addaccount", nil)
|
|
||||||
SetBearerAuth(r, token)
|
|
||||||
GetAccountUsername(w, r)
|
|
||||||
var available bool
|
|
||||||
assert.NoError(t, ReadResponse(w, &available))
|
|
||||||
assert.True(t, available)
|
|
||||||
|
|
||||||
// create account
|
|
||||||
r, w, _ = NewRequest("GET", "/account/profile", nil)
|
|
||||||
SetCredentials(r, "addaccount:pass")
|
|
||||||
SetBearerAuth(r, token)
|
|
||||||
AddAccount(w, r)
|
|
||||||
var profile Profile
|
|
||||||
assert.NoError(t, ReadResponse(w, &profile))
|
|
||||||
|
|
||||||
// acquire new token for creating accounts
|
|
||||||
r, w, _ = NewRequest("POST", "/admin/accounts", nil)
|
|
||||||
SetBasicAuth(r, "admin:pass")
|
|
||||||
AddNodeAccount(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &token))
|
|
||||||
|
|
||||||
// check if dup is available
|
|
||||||
r, w, _ = NewRequest("GET", "/account/claimable?username=addaccount", nil)
|
|
||||||
SetBearerAuth(r, token)
|
|
||||||
GetAccountUsername(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &available))
|
|
||||||
assert.False(t, available);
|
|
||||||
|
|
||||||
// create dup account
|
|
||||||
r, w, _ = NewRequest("GET", "/account/profile", nil)
|
|
||||||
SetCredentials(r, "addaccount:pass")
|
|
||||||
SetBearerAuth(r, token);
|
|
||||||
AddAccount(w, r)
|
|
||||||
assert.Error(t, ReadResponse(w, &profile))
|
|
||||||
}
|
|
58
net/server/internal/ucAddContact_test.go
Normal file
58
net/server/internal/ucAddContact_test.go
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
package databag
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
"strconv"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestAddContact(t *testing.T) {
|
||||||
|
var err error
|
||||||
|
var set *TestGroup
|
||||||
|
var rev *Revision
|
||||||
|
var r *Revision
|
||||||
|
var msg DataMessage
|
||||||
|
var cards []Card
|
||||||
|
var card Card
|
||||||
|
|
||||||
|
// setup testing group
|
||||||
|
set, err = AddTestGroup("addaccount")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
// setup testing group
|
||||||
|
_, err = AddTestGroup("addaccount")
|
||||||
|
assert.Error(t, err)
|
||||||
|
|
||||||
|
rev = GetTestRevision(set.B.Revisions)
|
||||||
|
|
||||||
|
assert.NoError(t, SendEndpointTest(GetCards, "PUT", "/contact/cards", nil, nil, APP_TOKENAPP, set.B.Token, &cards))
|
||||||
|
|
||||||
|
// update B profile
|
||||||
|
profileData := ProfileData{
|
||||||
|
Name: "Namer",
|
||||||
|
Location: "San Francisco",
|
||||||
|
Description: "databaggerr",
|
||||||
|
};
|
||||||
|
assert.NoError(t, SendEndpointTest(SetProfile, "PUT", "/profile/data", nil, &profileData, APP_TOKENAPP, set.A.Token, nil))
|
||||||
|
|
||||||
|
r = GetTestRevision(set.B.Revisions)
|
||||||
|
assert.NotEqual(t, rev.Card, r.Card)
|
||||||
|
|
||||||
|
assert.NoError(t, SendEndpointTest(GetCards, "PUT", "/contact/cards?cardRevision=" + strconv.FormatInt(rev.Card, 10), nil, nil, APP_TOKENAPP, set.B.Token, &cards))
|
||||||
|
assert.Equal(t, 1, len(cards))
|
||||||
|
assert.Equal(t, set.A.Guid, cards[0].CardData.CardProfile.Guid)
|
||||||
|
assert.NotEqual(t, "Namer", cards[0].CardData.CardProfile.Name)
|
||||||
|
rev = r
|
||||||
|
|
||||||
|
assert.NoError(t, SendEndpointTest(GetProfileMessage, "GET", "/profile/message", nil, nil, APP_TOKENCONTACT, set.B.A.Token, &msg))
|
||||||
|
assert.NoError(t, SendEndpointTest(SetCardProfile, "PUT", "/contact/cards/{cardId}/profile", &map[string]string{"cardId":cards[0].CardId}, msg, APP_TOKENAPP, set.B.Token, &card))
|
||||||
|
|
||||||
|
r = GetTestRevision(set.B.Revisions)
|
||||||
|
assert.NotEqual(t, rev.Card, r.Card)
|
||||||
|
|
||||||
|
assert.NoError(t, SendEndpointTest(GetCards, "PUT", "/contact/cards?cardRevision=" + strconv.FormatInt(rev.Card, 10), nil, nil, APP_TOKENAPP, set.B.Token, &cards))
|
||||||
|
assert.Equal(t, 1, len(cards))
|
||||||
|
assert.Equal(t, set.A.Guid, cards[0].CardData.CardProfile.Guid)
|
||||||
|
assert.Equal(t, "Namer", cards[0].CardData.CardProfile.Name)
|
||||||
|
rev = r
|
||||||
|
}
|
@ -1,98 +0,0 @@
|
|||||||
package databag
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
"time"
|
|
||||||
"github.com/gorilla/websocket"
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestAttachAccount(t *testing.T) {
|
|
||||||
var err error
|
|
||||||
var ws *websocket.Conn
|
|
||||||
var revision Revision
|
|
||||||
|
|
||||||
// get account token
|
|
||||||
r, w, _ := NewRequest("POST", "/admin/accounts", nil)
|
|
||||||
SetBasicAuth(r, "admin:pass")
|
|
||||||
AddNodeAccount(w, r)
|
|
||||||
var account string
|
|
||||||
assert.NoError(t, ReadResponse(w, &account))
|
|
||||||
|
|
||||||
// set account profile
|
|
||||||
r, w, _ = NewRequest("GET", "/account/profile", nil)
|
|
||||||
SetBearerAuth(r, account);
|
|
||||||
SetCredentials(r, "attachapp:pass")
|
|
||||||
AddAccount(w, r)
|
|
||||||
var profile Profile
|
|
||||||
assert.NoError(t, ReadResponse(w, &profile))
|
|
||||||
|
|
||||||
// acquire new token for attaching app
|
|
||||||
r, w, _ = NewRequest("POST", "/account/apps", nil)
|
|
||||||
SetBasicAuth(r, "attachapp:pass");
|
|
||||||
AddAccountApp(w, r);
|
|
||||||
var token string
|
|
||||||
assert.NoError(t, ReadResponse(w, &token))
|
|
||||||
|
|
||||||
// attach app with token
|
|
||||||
app := AppData{
|
|
||||||
Name: "Appy",
|
|
||||||
Description: "A test app",
|
|
||||||
Url: "http://app.example.com",
|
|
||||||
};
|
|
||||||
r, w, _ = NewRequest("PUT", "/account/apps", &app)
|
|
||||||
SetBearerAuth(r, token)
|
|
||||||
SetAccountApp(w, r)
|
|
||||||
var access string
|
|
||||||
assert.NoError(t, ReadResponse(w, &access))
|
|
||||||
|
|
||||||
// autorize app
|
|
||||||
r, w, _ = NewRequest("PUT", "/authorize", "aabbccdd")
|
|
||||||
SetBearerAuth(r, profile.Guid + "." + access)
|
|
||||||
Authorize(w, r);
|
|
||||||
var message DataMessage
|
|
||||||
assert.NoError(t, ReadResponse(w, &message))
|
|
||||||
|
|
||||||
// validate message
|
|
||||||
var auth Authenticate
|
|
||||||
guid, msgType, ts, err := ReadDataMessage(&message, &auth)
|
|
||||||
if err != nil {
|
|
||||||
PrintMsg(err)
|
|
||||||
}
|
|
||||||
cur := time.Now().Unix()
|
|
||||||
assert.GreaterOrEqual(t, cur, ts)
|
|
||||||
assert.Less(t, cur - 60, ts)
|
|
||||||
assert.Equal(t, "aabbccdd", auth.Token)
|
|
||||||
assert.Equal(t, msgType, APP_MSGAUTHENTICATE)
|
|
||||||
|
|
||||||
// app connects websocket
|
|
||||||
ws, err = StatusConnection(profile.Guid + "." + access, &revision);
|
|
||||||
assert.NoError(t, err)
|
|
||||||
profileRevision := revision.Profile
|
|
||||||
|
|
||||||
// set profile
|
|
||||||
profileData := ProfileData{
|
|
||||||
Name: "Namer",
|
|
||||||
Location: "San Francisco",
|
|
||||||
Description: "databaggerr",
|
|
||||||
};
|
|
||||||
r, w, _ = NewRequest("PUT", "/profile/data", &profileData)
|
|
||||||
SetBearerAuth(r, profile.Guid + "." + access)
|
|
||||||
SetProfile(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, nil))
|
|
||||||
|
|
||||||
// get profile
|
|
||||||
r, w, _ = NewRequest("GET", "/profile", nil)
|
|
||||||
SetBearerAuth(r, profile.Guid + "." + access)
|
|
||||||
GetProfile(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &profile))
|
|
||||||
assert.Equal(t, guid, profile.Guid)
|
|
||||||
assert.Equal(t, "attachapp", profile.Handle)
|
|
||||||
assert.Equal(t, "Namer", profile.Name)
|
|
||||||
|
|
||||||
// profile revision incremented
|
|
||||||
err = StatusRevision(ws, &revision)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.NotEqual(t, profileRevision, revision.Profile)
|
|
||||||
}
|
|
||||||
|
|
@ -1,127 +0,0 @@
|
|||||||
package databag
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
"github.com/gorilla/websocket"
|
|
||||||
"github.com/gorilla/mux"
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestConnectContact(t *testing.T) {
|
|
||||||
var card Card
|
|
||||||
var revision Revision
|
|
||||||
var msg DataMessage
|
|
||||||
var vars map[string]string
|
|
||||||
var cardRevision int64
|
|
||||||
var contactStatus ContactStatus
|
|
||||||
var ws *websocket.Conn
|
|
||||||
var err error
|
|
||||||
|
|
||||||
|
|
||||||
// create some contacts for this test
|
|
||||||
_, a, _ := AddTestAccount("connect0")
|
|
||||||
_, b, _ := AddTestAccount("connect1")
|
|
||||||
|
|
||||||
// get A identity message
|
|
||||||
r, w, _ := NewRequest("GET", "/profile/message", nil)
|
|
||||||
r.Header.Add("TokenType", APP_TOKENAPP)
|
|
||||||
SetBearerAuth(r, a)
|
|
||||||
GetProfileMessage(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &msg))
|
|
||||||
|
|
||||||
// app connects websocket
|
|
||||||
ws, err = StatusConnection(b, &revision);
|
|
||||||
assert.NoError(t, err)
|
|
||||||
|
|
||||||
// add A card in B
|
|
||||||
r, w, _ = NewRequest("POST", "/contact/cards", &msg)
|
|
||||||
SetBearerAuth(r, b)
|
|
||||||
AddCard(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &card))
|
|
||||||
|
|
||||||
// profile revision incremented
|
|
||||||
err = StatusRevision(ws, &revision)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
cardRevision = revision.Card
|
|
||||||
|
|
||||||
// update A status to connecting
|
|
||||||
r, w, _ = NewRequest("PUT", "/contact/cards/{cardId}/status", APP_CARDCONNECTING)
|
|
||||||
vars = map[string]string{ "cardId": card.CardId }
|
|
||||||
r = mux.SetURLVars(r, vars)
|
|
||||||
SetBearerAuth(r, b)
|
|
||||||
SetCardStatus(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &card))
|
|
||||||
|
|
||||||
// card revision incremented
|
|
||||||
err = StatusRevision(ws, &revision)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.NotEqual(t, cardRevision, revision.Card)
|
|
||||||
cardRevision = revision.Card
|
|
||||||
|
|
||||||
// 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, b)
|
|
||||||
GetOpenMessage(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &msg))
|
|
||||||
|
|
||||||
// set open message in A
|
|
||||||
r, w, _ = NewRequest("PUT", "/contact/openMessage", msg)
|
|
||||||
SetOpenMessage(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &contactStatus))
|
|
||||||
|
|
||||||
// get cards in A
|
|
||||||
r, w, _ = NewRequest("GET", "/contact/cards", nil)
|
|
||||||
SetBearerAuth(r, a)
|
|
||||||
GetCards(w, r)
|
|
||||||
var cards []Card
|
|
||||||
assert.NoError(t, ReadResponse(w, &cards))
|
|
||||||
assert.Equal(t, len(cards), 1)
|
|
||||||
|
|
||||||
// get B card in A
|
|
||||||
r, w, _ = NewRequest("GET", "/contact/cards/{cardId}", nil)
|
|
||||||
vars = map[string]string{ "cardId": cards[0].CardId }
|
|
||||||
r = mux.SetURLVars(r, vars)
|
|
||||||
SetBearerAuth(r, a)
|
|
||||||
GetCard(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &card))
|
|
||||||
|
|
||||||
// update B status to connecting
|
|
||||||
r, w, _ = NewRequest("PUT", "/contact/cards/{cardId}/status", APP_CARDCONNECTING)
|
|
||||||
vars = map[string]string{ "cardId": cards[0].CardId }
|
|
||||||
r = mux.SetURLVars(r, vars)
|
|
||||||
SetBearerAuth(r, a)
|
|
||||||
SetCardStatus(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &card))
|
|
||||||
|
|
||||||
// get open message to B
|
|
||||||
r, w, _ = NewRequest("GET", "/contact/cards/{cardId}/openMessage", nil)
|
|
||||||
vars = map[string]string{ "cardId": cards[0].CardId }
|
|
||||||
r = mux.SetURLVars(r, vars)
|
|
||||||
SetBearerAuth(r, a)
|
|
||||||
GetOpenMessage(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &msg))
|
|
||||||
|
|
||||||
// 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)
|
|
||||||
|
|
||||||
// card revision incremented
|
|
||||||
err = StatusRevision(ws, &revision)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.NotEqual(t, cardRevision, revision.Card)
|
|
||||||
cardRevision = revision.Card
|
|
||||||
|
|
||||||
// update B status to connected
|
|
||||||
r, w, _ = NewRequest("PUT", "/contact/cards/{cardId}/status?token=" + contactStatus.Token, APP_CARDCONNECTED)
|
|
||||||
vars = map[string]string{ "cardId": cards[0].CardId }
|
|
||||||
r = mux.SetURLVars(r, vars)
|
|
||||||
SetBearerAuth(r, a)
|
|
||||||
SetCardStatus(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &card))
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,177 +0,0 @@
|
|||||||
package databag
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
"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 contactRevision int64
|
|
||||||
var card Card
|
|
||||||
var contactViewRevision int64
|
|
||||||
var wsA *websocket.Conn
|
|
||||||
var wsB *websocket.Conn
|
|
||||||
var err error
|
|
||||||
|
|
||||||
// connect contacts
|
|
||||||
_, a, _ := AddTestAccount("groupcontact0")
|
|
||||||
_, b, _ := AddTestAccount("groupcontact1")
|
|
||||||
aCard, _ := AddTestCard(a, b)
|
|
||||||
bCard, _ := AddTestCard(b, a)
|
|
||||||
OpenTestCard(a, aCard)
|
|
||||||
OpenTestCard(b, bCard)
|
|
||||||
|
|
||||||
// app connects websocket
|
|
||||||
wsA, err = StatusConnection(a, &revision);
|
|
||||||
assert.NoError(t, err)
|
|
||||||
groupRevision = revision.Group
|
|
||||||
wsB, err = StatusConnection(b, &revision);
|
|
||||||
assert.NoError(t, err)
|
|
||||||
contactRevision = revision.Card
|
|
||||||
|
|
||||||
// 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, a)
|
|
||||||
AddGroup(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &group))
|
|
||||||
|
|
||||||
// receive revision
|
|
||||||
err = StatusRevision(wsA, &revision)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.NotEqual(t, groupRevision, revision.Group)
|
|
||||||
cardRevision = revision.Card
|
|
||||||
|
|
||||||
// get contact revision
|
|
||||||
r, w, _ = NewRequest("GET", "/contact/cards/{cardId}", nil)
|
|
||||||
vars = map[string]string{ "cardId": bCard }
|
|
||||||
r = mux.SetURLVars(r, vars)
|
|
||||||
SetBearerAuth(r, b)
|
|
||||||
GetCard(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &card))
|
|
||||||
contactViewRevision = card.CardData.NotifiedView
|
|
||||||
|
|
||||||
// set contact group
|
|
||||||
r, w, _ = NewRequest("PUT", "/contact/cards/{cardId}/groups/{groupId}", nil)
|
|
||||||
vars = make(map[string]string)
|
|
||||||
vars["groupId"] = group.GroupId
|
|
||||||
vars["cardId"] = aCard
|
|
||||||
r = mux.SetURLVars(r, vars)
|
|
||||||
SetBearerAuth(r, a)
|
|
||||||
SetCardGroup(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &card))
|
|
||||||
assert.Equal(t, 1, len(card.CardData.Groups))
|
|
||||||
|
|
||||||
// get contact revision
|
|
||||||
r, w, _ = NewRequest("GET", "/contact/cards/{cardId}", nil)
|
|
||||||
vars = map[string]string{ "cardId": aCard }
|
|
||||||
r = mux.SetURLVars(r, vars)
|
|
||||||
SetBearerAuth(r, a)
|
|
||||||
GetCard(w, r)
|
|
||||||
card = Card{}
|
|
||||||
assert.NoError(t, ReadResponse(w, &card))
|
|
||||||
assert.Equal(t, len(card.CardData.Groups), 1)
|
|
||||||
|
|
||||||
// receive revision
|
|
||||||
err = StatusRevision(wsA, &revision)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.NotEqual(t, cardRevision, revision.Card)
|
|
||||||
groupRevision = revision.Group
|
|
||||||
err = StatusRevision(wsB, &revision)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
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": bCard }
|
|
||||||
r = mux.SetURLVars(r, vars)
|
|
||||||
SetBearerAuth(r, b)
|
|
||||||
GetCard(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &card))
|
|
||||||
assert.NotEqual(t, contactViewRevision, card.CardData.NotifiedView)
|
|
||||||
contactViewRevision = card.CardData.NotifiedView
|
|
||||||
|
|
||||||
// show group view
|
|
||||||
r, w, _ = NewRequest("GET", "/share/groups", nil)
|
|
||||||
SetBearerAuth(r, a)
|
|
||||||
GetGroups(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &groups))
|
|
||||||
assert.Equal(t, 1, len(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, a)
|
|
||||||
UpdateGroup(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &group))
|
|
||||||
assert.Equal(t, group.GroupData.DataType, "imagroupEDIT")
|
|
||||||
|
|
||||||
// receive revision
|
|
||||||
err = StatusRevision(wsA, &revision)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
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, a)
|
|
||||||
RemoveGroup(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &group))
|
|
||||||
|
|
||||||
// get contact revision
|
|
||||||
r, w, _ = NewRequest("GET", "/contact/cards/{cardId}", nil)
|
|
||||||
vars = map[string]string{ "cardId": aCard }
|
|
||||||
r = mux.SetURLVars(r, vars)
|
|
||||||
SetBearerAuth(r, a)
|
|
||||||
GetCard(w, r)
|
|
||||||
card = Card{}
|
|
||||||
assert.NoError(t, ReadResponse(w, &card))
|
|
||||||
assert.Equal(t, len(card.CardData.Groups), 0)
|
|
||||||
|
|
||||||
// receive revision
|
|
||||||
err = StatusRevision(wsA, &revision)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.NotEqual(t, groupRevision, revision.Group)
|
|
||||||
err = StatusRevision(wsB, &revision)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.NotEqual(t, contactRevision, revision.Card)
|
|
||||||
|
|
||||||
// get contact revision
|
|
||||||
r, w, _ = NewRequest("GET", "/contact/cards/{cardId}", nil)
|
|
||||||
vars = map[string]string{ "cardId": bCard }
|
|
||||||
r = mux.SetURLVars(r, vars)
|
|
||||||
SetBearerAuth(r, b)
|
|
||||||
GetCard(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &card))
|
|
||||||
assert.NotEqual(t, contactViewRevision, card.CardData.NotifiedView)
|
|
||||||
|
|
||||||
// show group view
|
|
||||||
r, w, _ = NewRequest("GET", "/share/groups", nil)
|
|
||||||
SetBearerAuth(r, a)
|
|
||||||
GetGroups(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &groups))
|
|
||||||
assert.Equal(t, 1, len(groups))
|
|
||||||
assert.Nil(t, groups[0].GroupData)
|
|
||||||
}
|
|
@ -1,59 +0,0 @@
|
|||||||
package databag
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
"github.com/gorilla/websocket"
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestProfileNotification(t *testing.T) {
|
|
||||||
var cards []Card
|
|
||||||
var revision Revision
|
|
||||||
var ws *websocket.Conn
|
|
||||||
var err error
|
|
||||||
|
|
||||||
// connect contacts
|
|
||||||
_, a, _ := AddTestAccount("profilenotification0")
|
|
||||||
_, b, _ := AddTestAccount("profilenotification1")
|
|
||||||
aCard, _ := AddTestCard(a, b)
|
|
||||||
bCard, _ := AddTestCard(b, a)
|
|
||||||
OpenTestCard(a, aCard)
|
|
||||||
OpenTestCard(b, bCard)
|
|
||||||
|
|
||||||
// get list of cards
|
|
||||||
r, w, _ := NewRequest("GET", "/contact/cards", nil)
|
|
||||||
SetBearerAuth(r, a)
|
|
||||||
GetCards(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &cards))
|
|
||||||
assert.Equal(t, len(cards), 1)
|
|
||||||
profileRevision := cards[0].CardData.NotifiedProfile
|
|
||||||
|
|
||||||
// app connects websocket
|
|
||||||
ws, err = StatusConnection(a, &revision);
|
|
||||||
assert.NoError(t, err)
|
|
||||||
cardRevision := revision.Card
|
|
||||||
|
|
||||||
// update B profile
|
|
||||||
profileData := ProfileData{
|
|
||||||
Name: "Namer",
|
|
||||||
Location: "San Francisco",
|
|
||||||
Description: "databaggerr",
|
|
||||||
};
|
|
||||||
r, w, _ = NewRequest("PUT", "/profile/data", &profileData)
|
|
||||||
SetBearerAuth(r, b)
|
|
||||||
SetProfile(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, nil))
|
|
||||||
|
|
||||||
// receive revision
|
|
||||||
err = StatusRevision(ws, &revision)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.NotEqual(t, cardRevision, revision.Card)
|
|
||||||
|
|
||||||
// get list of cards
|
|
||||||
r, w, _ = NewRequest("GET", "/contact/cards", nil)
|
|
||||||
SetBearerAuth(r, a)
|
|
||||||
GetCards(w, r)
|
|
||||||
assert.NoError(t, ReadResponse(w, &cards))
|
|
||||||
assert.Equal(t, len(cards), 1)
|
|
||||||
assert.NotEqual(t, profileRevision, cards[0].CardData.NotifiedProfile)
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user