2022-01-27 07:40:50 +00:00
|
|
|
package databag
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
2022-02-04 08:20:57 +00:00
|
|
|
"strconv"
|
2022-01-27 07:40:50 +00:00
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestAddArticle(t *testing.T) {
|
2022-01-27 08:07:42 +00:00
|
|
|
var set *TestGroup
|
|
|
|
var err error
|
2022-01-27 22:53:03 +00:00
|
|
|
var rev *Revision
|
2022-02-04 08:20:57 +00:00
|
|
|
var ver *Revision
|
2022-02-04 21:26:52 +00:00
|
|
|
var article *Article
|
2022-02-02 07:39:25 +00:00
|
|
|
var articles *[]Article
|
|
|
|
var articleAccess *ArticleAccess
|
2022-02-04 08:20:57 +00:00
|
|
|
var cards []Card
|
2022-02-04 21:26:52 +00:00
|
|
|
var label *Label
|
|
|
|
var subject *Subject
|
|
|
|
var vars *map[string]string
|
|
|
|
var contentRevision int64
|
|
|
|
var viewRevision int64
|
|
|
|
var labelRevision int64
|
2022-02-05 04:47:07 +00:00
|
|
|
var labels *[]Label
|
|
|
|
var view int64
|
2022-01-27 07:40:50 +00:00
|
|
|
|
2022-01-27 22:53:03 +00:00
|
|
|
// setup testing group
|
2022-01-28 07:01:17 +00:00
|
|
|
set, err = AddTestGroup("addarticle")
|
2022-01-27 08:07:42 +00:00
|
|
|
assert.NoError(t, err)
|
2022-01-27 22:53:03 +00:00
|
|
|
|
2022-01-28 07:01:17 +00:00
|
|
|
// initial revision
|
2022-02-02 07:39:25 +00:00
|
|
|
rev = GetTestRevision(set.B.Revisions)
|
2022-01-27 22:53:03 +00:00
|
|
|
|
|
|
|
// create article
|
2022-02-02 07:39:25 +00:00
|
|
|
articleAccess = &ArticleAccess{ Groups: []string{set.A.B.GroupId} }
|
2022-02-04 21:26:52 +00:00
|
|
|
article = &Article{}
|
|
|
|
assert.NoError(t, SendEndpointTest(AddArticle, "POST", "/content/articles", nil, articleAccess, APP_TOKENAPP, set.A.Token, article))
|
2022-01-28 07:01:17 +00:00
|
|
|
|
2022-02-04 21:26:52 +00:00
|
|
|
article = &Article{}
|
|
|
|
assert.NoError(t, SendEndpointTest(AddArticle, "POST", "/content/articles", nil, articleAccess, APP_TOKENAPP, set.A.Token, article))
|
2022-01-27 22:53:03 +00:00
|
|
|
|
2022-02-02 07:39:25 +00:00
|
|
|
assert.NoError(t, SendEndpointTest(RemoveArticle, "DELETE", "/content/articls/" + article.ArticleId, &map[string]string{"articleId": article.ArticleId }, nil, APP_TOKENAPP, set.A.Token, nil))
|
|
|
|
|
2022-02-04 08:20:57 +00:00
|
|
|
ver = GetTestRevision(set.B.Revisions)
|
|
|
|
assert.NoError(t, SendEndpointTest(GetCards, "GET", "/contact/cards?cardRevision=" + strconv.FormatInt(rev.Card, 10), nil, nil, APP_TOKENAPP, set.B.Token, &cards))
|
|
|
|
assert.NotEqual(t, ver.Card, rev.Card)
|
|
|
|
assert.Equal(t, 1, len(cards))
|
|
|
|
rev = ver
|
|
|
|
|
2022-02-02 07:39:25 +00:00
|
|
|
articles = &[]Article{}
|
|
|
|
assert.NoError(t, SendEndpointTest(GetArticles, "GET", "/content/articles", nil, nil, APP_TOKENAPP, set.A.Token, articles))
|
|
|
|
assert.Equal(t, 2, len(*articles))
|
|
|
|
assert.True(t, (*articles)[0].ArticleData != nil || (*articles)[1].ArticleData != nil)
|
|
|
|
assert.True(t, (*articles)[0].ArticleData == nil || (*articles)[1].ArticleData == nil)
|
|
|
|
|
|
|
|
articles = &[]Article{}
|
|
|
|
assert.NoError(t, SendEndpointTest(GetArticles, "GET", "/content/articles", nil, nil, APP_TOKENCONTACT, set.B.A.Token, articles))
|
2022-02-04 08:20:57 +00:00
|
|
|
assert.Equal(t, 1, len(*articles))
|
|
|
|
assert.True(t, (*articles)[0].ArticleData != nil)
|
2022-02-02 07:39:25 +00:00
|
|
|
|
|
|
|
articles = &[]Article{}
|
|
|
|
assert.NoError(t, SendEndpointTest(GetArticles, "GET", "/content/articles", nil, nil, APP_TOKENCONTACT, set.C.A.Token, articles))
|
2022-02-04 08:20:57 +00:00
|
|
|
assert.Equal(t, 0, len(*articles))
|
2022-01-29 06:21:54 +00:00
|
|
|
|
2022-02-04 08:20:57 +00:00
|
|
|
r, w, ret := NewRequest("GET", "/content/articles", nil)
|
|
|
|
assert.NoError(t, ret)
|
|
|
|
r.Header.Add("TokenType", APP_TOKENCONTACT)
|
|
|
|
SetBearerAuth(r, set.B.A.Token)
|
|
|
|
GetArticles(w, r)
|
|
|
|
resp := w.Result()
|
|
|
|
view, err = strconv.ParseInt(resp.Header["View-Revision"][0], 10, 64)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, view, cards[0].CardData.NotifiedView)
|
|
|
|
|
|
|
|
articles = &[]Article{}
|
|
|
|
assert.NoError(t, SendEndpointTest(GetArticles, "GET", "/content/articles?contentRevision=0&viewRevision=" + strconv.FormatInt(cards[0].CardData.NotifiedView, 10), nil, nil, APP_TOKENCONTACT, set.B.A.Token, articles))
|
|
|
|
assert.Equal(t, 2, len(*articles))
|
2022-01-27 22:53:03 +00:00
|
|
|
|
2022-02-04 21:26:52 +00:00
|
|
|
ver = GetTestRevision(set.C.Revisions)
|
|
|
|
|
|
|
|
// add another article
|
|
|
|
article = &Article{}
|
|
|
|
articleAccess = &ArticleAccess{}
|
|
|
|
assert.NoError(t, SendEndpointTest(AddArticle, "POST", "/content/articles", nil, articleAccess, APP_TOKENAPP, set.A.Token, article))
|
|
|
|
|
|
|
|
// capture updated card on new article
|
|
|
|
rev = GetTestRevision(set.C.Revisions)
|
|
|
|
assert.NoError(t, SendEndpointTest(GetCards, "GET", "/contact/cards?cardRevision=" + strconv.FormatInt(ver.Card, 10), nil, nil, APP_TOKENAPP, set.C.Token, &cards))
|
|
|
|
assert.Equal(t, 1, len(cards))
|
|
|
|
viewRevision = cards[0].CardData.NotifiedView
|
|
|
|
contentRevision = cards[0].CardData.NotifiedContent
|
|
|
|
labelRevision = cards[0].CardData.NotifiedLabel
|
|
|
|
ver = rev
|
|
|
|
|
|
|
|
// create new label
|
|
|
|
label = &Label{}
|
|
|
|
subject = &Subject{ DataType: "labeltype", Data: "labeldata" }
|
|
|
|
assert.NoError(t, SendEndpointTest(AddLabel, "POST", "/content/labels", nil, subject, APP_TOKENAPP, set.A.Token, label))
|
|
|
|
vars = &map[string]string{
|
|
|
|
"labelId": label.LabelId,
|
|
|
|
"groupId": set.A.C.GroupId,
|
|
|
|
}
|
|
|
|
label = &Label{}
|
|
|
|
assert.NoError(t, SendEndpointTest(SetLabelGroup, "POST", "/content/labels/{labelId}/groups/{groupId}", vars, nil, APP_TOKENAPP, set.A.Token, label))
|
|
|
|
|
|
|
|
// capture updated card on new assigned label
|
|
|
|
rev = GetTestRevision(set.C.Revisions)
|
|
|
|
assert.NoError(t, SendEndpointTest(GetCards, "GET", "/contact/cards?cardRevision=" + strconv.FormatInt(ver.Card, 10), nil, nil, APP_TOKENAPP, set.C.Token, &cards))
|
|
|
|
assert.Equal(t, 1, len(cards))
|
|
|
|
assert.NotEqual(t, viewRevision, cards[0].CardData.NotifiedView)
|
|
|
|
assert.NotEqual(t, labelRevision, cards[0].CardData.NotifiedLabel)
|
|
|
|
viewRevision = cards[0].CardData.NotifiedView
|
|
|
|
contentRevision = cards[0].CardData.NotifiedContent
|
|
|
|
labelRevision = cards[0].CardData.NotifiedLabel
|
|
|
|
ver = rev
|
|
|
|
|
|
|
|
// assign label to article
|
|
|
|
vars = &map[string]string{
|
|
|
|
"labelId": label.LabelId,
|
|
|
|
"articleId": article.ArticleId,
|
|
|
|
}
|
|
|
|
article = &Article{}
|
|
|
|
assert.NoError(t, SendEndpointTest(SetArticleLabel, "POST", "/content/articles/{articleId}/labels/{labelId}", vars, nil, APP_TOKENAPP, set.A.Token, article))
|
|
|
|
|
|
|
|
// capture updated card on assigned article
|
|
|
|
rev = GetTestRevision(set.C.Revisions)
|
|
|
|
assert.NoError(t, SendEndpointTest(GetCards, "GET", "/contact/cards?cardRevision=" + strconv.FormatInt(ver.Card, 10), nil, nil, APP_TOKENAPP, set.C.Token, &cards))
|
|
|
|
assert.Equal(t, 1, len(cards))
|
|
|
|
assert.NotEqual(t, contentRevision, cards[0].CardData.NotifiedContent)
|
|
|
|
ver = rev
|
|
|
|
|
|
|
|
// confirm c can see new article
|
|
|
|
articles = &[]Article{}
|
|
|
|
assert.NoError(t, SendEndpointTest(GetArticles, "GET", "/content/articles", nil, nil, APP_TOKENCONTACT, set.C.A.Token, articles))
|
|
|
|
assert.Equal(t, 1, len(*articles))
|
|
|
|
assert.Equal(t, (*articles)[0].ArticleId, article.ArticleId)
|
|
|
|
assert.Equal(t, 1, len((*articles)[0].ArticleData.Labels))
|
|
|
|
assert.Equal(t, (*articles)[0].ArticleData.Labels[0], label.LabelId)
|
|
|
|
|
|
|
|
// confirm b cannot see new article
|
|
|
|
articles = &[]Article{}
|
|
|
|
assert.NoError(t, SendEndpointTest(GetArticles, "GET", "/content/articles", nil, nil, APP_TOKENCONTACT, set.B.A.Token, articles))
|
|
|
|
assert.Equal(t, 1, len(*articles))
|
|
|
|
assert.NotEqual(t, article.ArticleId, (*articles)[0].ArticleId)
|
2022-02-05 04:47:07 +00:00
|
|
|
|
|
|
|
labels = &[]Label{}
|
|
|
|
assert.NoError(t, SendEndpointTest(GetLabels, "GET", "/content/labels", nil, nil, APP_TOKENAPP, set.A.Token, labels))
|
|
|
|
assert.Equal(t, 1, len(*labels))
|
|
|
|
|
|
|
|
labels = &[]Label{}
|
|
|
|
assert.NoError(t, SendEndpointTest(GetLabels, "GET", "/content/labels", nil, nil, APP_TOKENCONTACT, set.B.A.Token, labels))
|
|
|
|
assert.Equal(t, 0, len(*labels))
|
|
|
|
|
|
|
|
labels = &[]Label{}
|
|
|
|
assert.NoError(t, SendEndpointTest(GetLabels, "GET", "/content/labels", nil, nil, APP_TOKENCONTACT, set.C.A.Token, labels))
|
|
|
|
assert.Equal(t, 1, len(*labels))
|
|
|
|
|
|
|
|
r, w, ret = NewRequest("GET", "/content/labels", nil)
|
|
|
|
assert.NoError(t, ret)
|
|
|
|
r.Header.Add("TokenType", APP_TOKENCONTACT)
|
|
|
|
SetBearerAuth(r, set.C.A.Token)
|
|
|
|
GetLabels(w, r)
|
|
|
|
resp = w.Result()
|
|
|
|
view, err = strconv.ParseInt(resp.Header["View-Revision"][0], 10, 64)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, cards[0].CardData.NotifiedView, view)
|
2022-01-27 07:40:50 +00:00
|
|
|
}
|