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)
|
||||
}
|
||||
|
||||
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) {
|
||||
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
|
@ -48,7 +48,7 @@ func GetArticles(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
} else if tokenType == APP_TOKENCONTACT {
|
||||
|
||||
card, code, err := BearerContactToken(r)
|
||||
card, code, err := BearerContactToken(r, false)
|
||||
if err != nil {
|
||||
ErrResponse(w, code, err)
|
||||
return
|
||||
|
@ -1,59 +1,35 @@
|
||||
package databag
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"errors"
|
||||
"net/http"
|
||||
"gorm.io/gorm"
|
||||
"databag/internal/store"
|
||||
)
|
||||
|
||||
func GetProfileMessage(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// extract token
|
||||
var code int
|
||||
var err error
|
||||
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
|
||||
var account *store.Account
|
||||
if tokenType == APP_TOKENAPP {
|
||||
var app store.App
|
||||
if err := store.DB.Preload("Account.AccountDetail").Where("account_id = ? AND token = ?", target, access).First(&app).Error; err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
ErrResponse(w, http.StatusNotFound, err);
|
||||
} else {
|
||||
ErrResponse(w, http.StatusInternalServerError, err);
|
||||
}
|
||||
if account, code, err = BearerAppToken(r, true); err != nil {
|
||||
ErrResponse(w, code, err)
|
||||
return
|
||||
}
|
||||
account = &app.Account
|
||||
} else if tokenType == APP_TOKENCONTACT {
|
||||
var card store.Card
|
||||
if err := store.DB.Preload("Account.AccountDetail").Where("account_id = ? AND InToken = ?", target, access).First(&card).Error; err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
ErrResponse(w, http.StatusNotFound, err)
|
||||
} else {
|
||||
ErrResponse(w, http.StatusInternalServerError, err)
|
||||
}
|
||||
var card *store.Card
|
||||
if card, code, err = BearerContactToken(r, true); err != nil {
|
||||
ErrResponse(w, code, err)
|
||||
return
|
||||
}
|
||||
account = &card.Account
|
||||
} else {
|
||||
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
|
||||
}
|
||||
detail := &account.AccountDetail
|
||||
|
||||
// generate identity DataMessage
|
||||
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) {
|
||||
|
||||
card, code, err := BearerContactToken(r)
|
||||
card, code, err := BearerContactToken(r, false)
|
||||
if err != nil {
|
||||
ErrResponse(w, code, err)
|
||||
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 {
|
||||
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 {
|
||||
return res
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import (
|
||||
|
||||
func SetLabelRevision(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
card, code, err := BearerContactToken(r)
|
||||
card, code, err := BearerContactToken(r, false)
|
||||
if err != nil {
|
||||
ErrResponse(w, code, err)
|
||||
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 {
|
||||
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 {
|
||||
return res
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import (
|
||||
|
||||
func SetProfileRevision(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
card, code, err := BearerContactToken(r)
|
||||
card, code, err := BearerContactToken(r, false)
|
||||
if err != nil {
|
||||
ErrResponse(w, code, err)
|
||||
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 {
|
||||
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 {
|
||||
return res
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import (
|
||||
|
||||
func SetViewRevision(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
card, code, err := BearerContactToken(r)
|
||||
card, code, err := BearerContactToken(r, false)
|
||||
if err != nil {
|
||||
ErrResponse(w, code, err)
|
||||
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 {
|
||||
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 {
|
||||
return res
|
||||
}
|
||||
|
@ -127,7 +127,7 @@ func ParseToken(token string) (string, string, error) {
|
||||
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
|
||||
auth := r.Header.Get("Authorization")
|
||||
@ -139,6 +139,15 @@ func BearerContactToken(r *http.Request) (*store.Card, int, error) {
|
||||
|
||||
// find token record
|
||||
var card store.Card
|
||||
if detail {
|
||||
if err := store.DB.Preload("Account.AccountDetail").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
|
||||
}
|
||||
}
|
||||
} 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
|
||||
@ -146,6 +155,7 @@ func BearerContactToken(r *http.Request) (*store.Card, int, error) {
|
||||
return nil, http.StatusInternalServerError, err
|
||||
}
|
||||
}
|
||||
}
|
||||
if card.Account.Disabled {
|
||||
return nil, http.StatusGone, errors.New("account is inactive")
|
||||
}
|
||||
|
@ -23,6 +23,7 @@ func getCardModel(slot *store.CardSlot) *Card {
|
||||
CardData: &CardData {
|
||||
NotifiedProfile: slot.Card.NotifiedProfile,
|
||||
NotifiedContent: slot.Card.NotifiedContent,
|
||||
NotifiedLabel: slot.Card.NotifiedLabel,
|
||||
NotifiedView: slot.Card.NotifiedView,
|
||||
CardProfile: &CardProfile{
|
||||
Guid: slot.Card.Guid,
|
||||
|
@ -91,6 +91,7 @@ type CardData struct {
|
||||
CardData *CardData `json:"cardData"`
|
||||
NotifiedProfile int64 `json:"notifiedProfile"`
|
||||
NotifiedContent int64 `json:"notifiedContent"`
|
||||
NotifiedLabel int64 `json:"notifiedLabel"`
|
||||
NotifiedView int64 `json:"notifiedView"`
|
||||
Status string `json:"status"`
|
||||
Notes string `json:"notes,omitempty"`
|
||||
|
@ -47,7 +47,7 @@ func SendLocalNotification(notification *store.Notification) {
|
||||
|
||||
// pull reference account
|
||||
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)
|
||||
return
|
||||
}
|
||||
|
@ -189,6 +189,7 @@ type Card struct {
|
||||
NotifiedProfile int64
|
||||
Account Account `gorm:"references:Guid"`
|
||||
Groups []Group `gorm:"many2many:card_groups"`
|
||||
CardSlot CardSlot
|
||||
}
|
||||
|
||||
type Asset struct {
|
||||
|
@ -538,22 +538,4 @@ func StatusConnection(token string, rev *Revision) (ws *websocket.Conn, err erro
|
||||
}
|
||||
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