mirror of
https://github.com/balzack/databag.git
synced 2025-02-12 19:49:16 +00:00
206 lines
6.6 KiB
Go
206 lines
6.6 KiB
Go
package databag
|
|
|
|
import (
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
)
|
|
|
|
func TestContactApp(t *testing.T) {
|
|
var params *TestAPIParams
|
|
var response *TestAPIResponse
|
|
|
|
// allocate test accounts
|
|
set, err := AddTestGroup("contactapp")
|
|
assert.NoError(t, err)
|
|
|
|
// allocate new test app
|
|
app := NewTestApp()
|
|
go app.Connect(set.A.Token)
|
|
|
|
// wait for test
|
|
assert.NoError(t, app.WaitFor(func(testApp *TestApp) bool {
|
|
if testApp.profile.Handle == "contactappA" {
|
|
return true
|
|
}
|
|
return false
|
|
}))
|
|
|
|
// update profile name
|
|
profileData := &ProfileData{
|
|
Name: "Roland",
|
|
Location: "San Diago",
|
|
}
|
|
assert.NoError(t, APITestMsg(SetProfile, "PUT", "/profile/data", nil, profileData,
|
|
APPTokenAgent, set.A.Token, nil, nil))
|
|
|
|
// wait for test
|
|
assert.NoError(t, app.WaitFor(func(testApp *TestApp) bool {
|
|
if testApp.profile.Location == "San Diago" {
|
|
return true
|
|
}
|
|
return false
|
|
}))
|
|
|
|
// add a new article
|
|
article := &Article{}
|
|
subject := &Subject{Data: "subjectdata", DataType: "subjectdatatype"}
|
|
params = &TestAPIParams{restType: "POST", query: "/articles", tokenType: APPTokenAgent, token: set.A.Token, body: subject}
|
|
response = &TestAPIResponse{data: article}
|
|
assert.NoError(t, TestAPIRequest(AddArticle, params, response))
|
|
|
|
// wait for a
|
|
assert.NoError(t, app.WaitFor(func(testApp *TestApp) bool {
|
|
a, set := testApp.articles[article.ID]
|
|
if set && a.Data.Data == "subjectdata" {
|
|
return true
|
|
}
|
|
return false
|
|
}))
|
|
|
|
// remove a new article
|
|
params = &TestAPIParams{restType: "DELETE", query: "/articles/{articleID}", path: map[string]string{"articleID": article.ID},
|
|
tokenType: APPTokenAgent, token: set.A.Token, body: subject}
|
|
response = &TestAPIResponse{}
|
|
assert.NoError(t, TestAPIRequest(RemoveArticle, params, response))
|
|
|
|
// wait for a to be removed
|
|
assert.NoError(t, app.WaitFor(func(testApp *TestApp) bool {
|
|
if _, set := testApp.articles[article.ID]; !set {
|
|
return true
|
|
}
|
|
return false
|
|
}))
|
|
|
|
// add a new article in contact
|
|
article = &Article{}
|
|
subject = &Subject{Data: "subjectdataB", DataType: "subjectdatatypeB"}
|
|
params = &TestAPIParams{restType: "POST", query: "/articles", tokenType: APPTokenAgent, token: set.B.Token, body: subject}
|
|
response = &TestAPIResponse{data: article}
|
|
assert.NoError(t, TestAPIRequest(AddArticle, params, response))
|
|
articleID := article.ID
|
|
|
|
// share article
|
|
article = &Article{}
|
|
params = &TestAPIParams{restType: "POST", query: "/articles/{articleID}/groups/{groupID}", tokenType: APPTokenAgent, token: set.B.Token,
|
|
path: map[string]string{"articleID": articleID, "groupID": set.B.A.GroupID}}
|
|
response = &TestAPIResponse{data: article}
|
|
assert.NoError(t, TestAPIRequest(SetArticleGroup, params, response))
|
|
|
|
// wait for
|
|
assert.NoError(t, app.WaitFor(func(testApp *TestApp) bool {
|
|
contact, contactSet := testApp.contacts[set.A.B.CardID]
|
|
if contactSet {
|
|
_, articleSet := contact.articles[articleID]
|
|
if articleSet {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}))
|
|
|
|
// remove new article in contact
|
|
article = &Article{}
|
|
params = &TestAPIParams{restType: "DELETE", query: "/articles/{articleID}", tokenType: APPTokenAgent, token: set.B.Token,
|
|
path: map[string]string{"articleID": articleID}}
|
|
response = &TestAPIResponse{}
|
|
assert.NoError(t, TestAPIRequest(RemoveArticle, params, response))
|
|
|
|
// wait for
|
|
assert.NoError(t, app.WaitFor(func(testApp *TestApp) bool {
|
|
contact, contactSet := testApp.contacts[set.A.B.CardID]
|
|
if contactSet {
|
|
_, articleSet := contact.articles[articleID]
|
|
if !articleSet {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}))
|
|
|
|
// add a new article in contact
|
|
article = &Article{}
|
|
subject = &Subject{Data: "subjectdataB", DataType: "subjectdatatypeB"}
|
|
params = &TestAPIParams{restType: "POST", query: "/articles", tokenType: APPTokenAgent, token: set.B.Token, body: subject}
|
|
response = &TestAPIResponse{data: article}
|
|
assert.NoError(t, TestAPIRequest(AddArticle, params, response))
|
|
articleID = article.ID
|
|
|
|
// share article
|
|
article = &Article{}
|
|
params = &TestAPIParams{restType: "POST", query: "/articles/{articleID}/groups/{groupID}", tokenType: APPTokenAgent, token: set.B.Token,
|
|
path: map[string]string{"articleID": articleID, "groupID": set.B.A.GroupID}}
|
|
response = &TestAPIResponse{data: article}
|
|
assert.NoError(t, TestAPIRequest(SetArticleGroup, params, response))
|
|
|
|
// wait for
|
|
assert.NoError(t, app.WaitFor(func(testApp *TestApp) bool {
|
|
contact, contactSet := testApp.contacts[set.A.B.CardID]
|
|
if contactSet {
|
|
_, articleSet := contact.articles[articleID]
|
|
if articleSet {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}))
|
|
|
|
// remove group in contact
|
|
article = &Article{}
|
|
params = &TestAPIParams{restType: "DELETE", query: "/groups/{groupID}", tokenType: APPTokenAgent, token: set.B.Token,
|
|
path: map[string]string{"groupID": set.B.A.GroupID}}
|
|
response = &TestAPIResponse{}
|
|
assert.NoError(t, TestAPIRequest(RemoveGroup, params, response))
|
|
|
|
// wait for
|
|
assert.NoError(t, app.WaitFor(func(testApp *TestApp) bool {
|
|
contact, contactSet := testApp.contacts[set.A.B.CardID]
|
|
if contactSet {
|
|
_, articleSet := contact.articles[articleID]
|
|
if !articleSet {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}))
|
|
|
|
// update Bs profile
|
|
profileData = &ProfileData{Name: "contactappname"}
|
|
params = &TestAPIParams{restType: "PUT", query: "/profile/data", tokenType: APPTokenAgent, token: set.B.Token, body: profileData}
|
|
response = &TestAPIResponse{}
|
|
assert.NoError(t, TestAPIRequest(SetProfile, params, response))
|
|
|
|
// wait for
|
|
assert.NoError(t, app.WaitFor(func(testApp *TestApp) bool {
|
|
for _, contact := range testApp.contacts {
|
|
if contact.card.Data.CardProfile.Name == "contactappname" {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}))
|
|
|
|
// disconnect from B
|
|
card := &Card{}
|
|
params = &TestAPIParams{restType: "PUT", query: "/contact/cards/{cardID}/status", tokenType: APPTokenAgent, token: set.B.Token,
|
|
path: map[string]string{"cardID": set.B.A.CardID}, body: APPCardConfirmed}
|
|
response = &TestAPIResponse{data: card}
|
|
assert.NoError(t, TestAPIRequest(SetCardStatus, params, response))
|
|
msg := &DataMessage{}
|
|
params = &TestAPIParams{query: "/contact/cards/{cardID}/closeMessage", tokenType: APPTokenAgent, token: set.B.Token,
|
|
path: map[string]string{"cardID": set.B.A.CardID}}
|
|
response = &TestAPIResponse{data: msg}
|
|
assert.NoError(t, TestAPIRequest(GetCloseMessage, params, response))
|
|
params = &TestAPIParams{restType: "PUT", query: "/contact/closeMessage", body: msg}
|
|
response = &TestAPIResponse{}
|
|
assert.NoError(t, TestAPIRequest(SetCloseMessage, params, response))
|
|
|
|
// wait for
|
|
assert.NoError(t, app.WaitFor(func(testApp *TestApp) bool {
|
|
contact, contactSet := testApp.contacts[set.A.B.CardID]
|
|
if contactSet && contact.card.Data.CardDetail.Status == APPCardConfirmed {
|
|
return true
|
|
}
|
|
return false
|
|
}))
|
|
}
|