databag/net/server/internal/ucContactApp_test.go
2022-07-22 12:28:14 -07:00

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
}))
}