From dc055fa9af3285da94e935f8d986662632d0cf81 Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Thu, 3 Feb 2022 11:18:50 -0800 Subject: [PATCH] consolodating tests --- net/server/internal/api_contact.go | 5 - net/server/internal/api_getArticles.go | 2 +- net/server/internal/api_getProfileMessage.go | 40 +--- net/server/internal/api_setCardProfile.go | 92 +++++++++ net/server/internal/api_setContentRevision.go | 5 +- net/server/internal/api_setLabelRevision.go | 5 +- net/server/internal/api_setProfileRevision.go | 5 +- net/server/internal/api_setViewRevision.go | 5 +- net/server/internal/authUtil.go | 22 ++- net/server/internal/modelUtil.go | 1 + net/server/internal/models.go | 1 + net/server/internal/notify.go | 2 +- net/server/internal/store/schema.go | 1 + net/server/internal/testUtil.go | 18 -- net/server/internal/ucAddAccount_test.go | 59 ------ net/server/internal/ucAddContact_test.go | 58 ++++++ net/server/internal/ucAttachApp_test.go | 98 ---------- net/server/internal/ucConnectContact_test.go | 127 ------------- net/server/internal/ucGroupContact_test.go | 177 ------------------ .../internal/ucProfileNotification_test.go | 59 ------ 20 files changed, 195 insertions(+), 587 deletions(-) create mode 100644 net/server/internal/api_setCardProfile.go delete mode 100644 net/server/internal/ucAddAccount_test.go create mode 100644 net/server/internal/ucAddContact_test.go delete mode 100644 net/server/internal/ucAttachApp_test.go delete mode 100644 net/server/internal/ucConnectContact_test.go delete mode 100644 net/server/internal/ucGroupContact_test.go delete mode 100644 net/server/internal/ucProfileNotification_test.go diff --git a/net/server/internal/api_contact.go b/net/server/internal/api_contact.go index 61580774..0c41100c 100644 --- a/net/server/internal/api_contact.go +++ b/net/server/internal/api_contact.go @@ -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) diff --git a/net/server/internal/api_getArticles.go b/net/server/internal/api_getArticles.go index 57f22801..e8c28e67 100644 --- a/net/server/internal/api_getArticles.go +++ b/net/server/internal/api_getArticles.go @@ -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 diff --git a/net/server/internal/api_getProfileMessage.go b/net/server/internal/api_getProfileMessage.go index f6cd905a..2d0752f6 100644 --- a/net/server/internal/api_getProfileMessage.go +++ b/net/server/internal/api_getProfileMessage.go @@ -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{ diff --git a/net/server/internal/api_setCardProfile.go b/net/server/internal/api_setCardProfile.go new file mode 100644 index 00000000..801129bd --- /dev/null +++ b/net/server/internal/api_setCardProfile.go @@ -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)); +} + diff --git a/net/server/internal/api_setContentRevision.go b/net/server/internal/api_setContentRevision.go index abf1ec7e..70f20887 100644 --- a/net/server/internal/api_setContentRevision.go +++ b/net/server/internal/api_setContentRevision.go @@ -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 } diff --git a/net/server/internal/api_setLabelRevision.go b/net/server/internal/api_setLabelRevision.go index 9ab0a76b..a10801d0 100644 --- a/net/server/internal/api_setLabelRevision.go +++ b/net/server/internal/api_setLabelRevision.go @@ -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 } diff --git a/net/server/internal/api_setProfileRevision.go b/net/server/internal/api_setProfileRevision.go index 2b4f2c7a..dca916a8 100644 --- a/net/server/internal/api_setProfileRevision.go +++ b/net/server/internal/api_setProfileRevision.go @@ -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 } diff --git a/net/server/internal/api_setViewRevision.go b/net/server/internal/api_setViewRevision.go index 7db36e1a..799e2c43 100644 --- a/net/server/internal/api_setViewRevision.go +++ b/net/server/internal/api_setViewRevision.go @@ -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 } diff --git a/net/server/internal/authUtil.go b/net/server/internal/authUtil.go index 90c2b404..5f1e204f 100644 --- a/net/server/internal/authUtil.go +++ b/net/server/internal/authUtil.go @@ -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,11 +139,21 @@ func BearerContactToken(r *http.Request) (*store.Card, int, error) { // find token record var card store.Card - 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 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 + } else { + return nil, http.StatusInternalServerError, err + } } } if card.Account.Disabled { diff --git a/net/server/internal/modelUtil.go b/net/server/internal/modelUtil.go index 41774896..1312a861 100644 --- a/net/server/internal/modelUtil.go +++ b/net/server/internal/modelUtil.go @@ -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, diff --git a/net/server/internal/models.go b/net/server/internal/models.go index f4ffc65a..b69b7fc3 100644 --- a/net/server/internal/models.go +++ b/net/server/internal/models.go @@ -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"` diff --git a/net/server/internal/notify.go b/net/server/internal/notify.go index 8ce49179..c8f2f67a 100644 --- a/net/server/internal/notify.go +++ b/net/server/internal/notify.go @@ -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 } diff --git a/net/server/internal/store/schema.go b/net/server/internal/store/schema.go index a6914523..e247f0aa 100644 --- a/net/server/internal/store/schema.go +++ b/net/server/internal/store/schema.go @@ -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 { diff --git a/net/server/internal/testUtil.go b/net/server/internal/testUtil.go index e59401c9..101c477b 100644 --- a/net/server/internal/testUtil.go +++ b/net/server/internal/testUtil.go @@ -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 -} diff --git a/net/server/internal/ucAddAccount_test.go b/net/server/internal/ucAddAccount_test.go deleted file mode 100644 index b2c2192a..00000000 --- a/net/server/internal/ucAddAccount_test.go +++ /dev/null @@ -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)) -} diff --git a/net/server/internal/ucAddContact_test.go b/net/server/internal/ucAddContact_test.go new file mode 100644 index 00000000..fe372534 --- /dev/null +++ b/net/server/internal/ucAddContact_test.go @@ -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 +} diff --git a/net/server/internal/ucAttachApp_test.go b/net/server/internal/ucAttachApp_test.go deleted file mode 100644 index 8ccb5962..00000000 --- a/net/server/internal/ucAttachApp_test.go +++ /dev/null @@ -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) -} - diff --git a/net/server/internal/ucConnectContact_test.go b/net/server/internal/ucConnectContact_test.go deleted file mode 100644 index 12f40db4..00000000 --- a/net/server/internal/ucConnectContact_test.go +++ /dev/null @@ -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)) - -} - diff --git a/net/server/internal/ucGroupContact_test.go b/net/server/internal/ucGroupContact_test.go deleted file mode 100644 index 4908c40c..00000000 --- a/net/server/internal/ucGroupContact_test.go +++ /dev/null @@ -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) -} diff --git a/net/server/internal/ucProfileNotification_test.go b/net/server/internal/ucProfileNotification_test.go deleted file mode 100644 index 9cc5b23e..00000000 --- a/net/server/internal/ucProfileNotification_test.go +++ /dev/null @@ -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) -}