databag/net/server/internal/ucAddArticle_test.go

168 lines
6.9 KiB
Go
Raw Normal View History

package databag
import (
"testing"
"strconv"
"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
var ver *Revision
var article *Article
2022-02-02 07:39:25 +00:00
var articles *[]Article
var articleAccess *ArticleAccess
var cards []Card
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 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} }
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
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))
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))
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))
assert.Equal(t, 0, len(*articles))
2022-01-29 06:21:54 +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
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)
}