2021-12-10 17:46:37 +02:00
|
|
|
package integrationtests
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/mattermost/focalboard/server/client"
|
|
|
|
"github.com/mattermost/focalboard/server/model"
|
|
|
|
"github.com/mattermost/focalboard/server/services/store"
|
|
|
|
"github.com/mattermost/focalboard/server/utils"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func createTestSubscriptions(client *client.Client, num int, workspaceID string) ([]*model.Subscription, string, error) {
|
|
|
|
newSubs := make([]*model.Subscription, 0, num)
|
|
|
|
|
|
|
|
user, resp := client.GetMe()
|
|
|
|
if resp.Error != nil {
|
|
|
|
return nil, "", fmt.Errorf("cannot get current user: %w", resp.Error)
|
|
|
|
}
|
|
|
|
|
2022-01-05 11:02:06 +02:00
|
|
|
board := model.Block{
|
|
|
|
ID: utils.NewID(utils.IDTypeBoard),
|
|
|
|
RootID: workspaceID,
|
|
|
|
CreateAt: 1,
|
|
|
|
UpdateAt: 1,
|
|
|
|
Type: model.TypeBoard,
|
|
|
|
}
|
|
|
|
boards, resp := client.InsertBlocks([]model.Block{board})
|
|
|
|
if resp.Error != nil {
|
|
|
|
return nil, "", fmt.Errorf("cannot insert test board block: %w", resp.Error)
|
|
|
|
}
|
|
|
|
board = boards[0]
|
|
|
|
|
2021-12-10 17:46:37 +02:00
|
|
|
for n := 0; n < num; n++ {
|
2022-01-05 11:02:06 +02:00
|
|
|
newBlock := model.Block{
|
|
|
|
ID: utils.NewID(utils.IDTypeCard),
|
|
|
|
RootID: board.ID,
|
|
|
|
CreateAt: 1,
|
|
|
|
UpdateAt: 1,
|
|
|
|
Type: model.TypeCard,
|
|
|
|
}
|
|
|
|
|
|
|
|
newBlocks, resp := client.InsertBlocks([]model.Block{newBlock})
|
|
|
|
if resp.Error != nil {
|
|
|
|
return nil, "", fmt.Errorf("cannot insert test card block: %w", resp.Error)
|
|
|
|
}
|
|
|
|
newBlock = newBlocks[0]
|
|
|
|
|
2021-12-10 17:46:37 +02:00
|
|
|
sub := &model.Subscription{
|
2022-01-05 11:02:06 +02:00
|
|
|
BlockType: newBlock.Type,
|
|
|
|
BlockID: newBlock.ID,
|
2021-12-10 17:46:37 +02:00
|
|
|
WorkspaceID: workspaceID,
|
|
|
|
SubscriberType: model.SubTypeUser,
|
|
|
|
SubscriberID: user.ID,
|
|
|
|
}
|
|
|
|
|
|
|
|
subNew, resp := client.CreateSubscription(workspaceID, sub)
|
|
|
|
if resp.Error != nil {
|
|
|
|
return nil, "", resp.Error
|
|
|
|
}
|
|
|
|
newSubs = append(newSubs, subNew)
|
|
|
|
}
|
|
|
|
return newSubs, user.ID, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCreateSubscription(t *testing.T) {
|
|
|
|
th := SetupTestHelper().InitBasic()
|
|
|
|
defer th.TearDown()
|
|
|
|
|
|
|
|
container := store.Container{
|
|
|
|
WorkspaceID: utils.NewID(utils.IDTypeWorkspace),
|
|
|
|
}
|
|
|
|
|
|
|
|
t.Run("Create valid subscription", func(t *testing.T) {
|
|
|
|
subs, userID, err := createTestSubscriptions(th.Client, 5, container.WorkspaceID)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Len(t, subs, 5)
|
|
|
|
|
|
|
|
// fetch the newly created subscriptions and compare
|
|
|
|
subsFound, resp := th.Client.GetSubscriptions(container.WorkspaceID, userID)
|
|
|
|
require.NoError(t, resp.Error)
|
|
|
|
require.Len(t, subsFound, 5)
|
|
|
|
assert.ElementsMatch(t, subs, subsFound)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("Create invalid subscription", func(t *testing.T) {
|
|
|
|
user, resp := th.Client.GetMe()
|
|
|
|
require.NoError(t, resp.Error)
|
|
|
|
|
|
|
|
sub := &model.Subscription{
|
|
|
|
WorkspaceID: container.WorkspaceID,
|
|
|
|
SubscriberID: user.ID,
|
|
|
|
}
|
|
|
|
_, resp = th.Client.CreateSubscription(container.WorkspaceID, sub)
|
|
|
|
require.Error(t, resp.Error)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("Create subscription for another user", func(t *testing.T) {
|
|
|
|
sub := &model.Subscription{
|
|
|
|
WorkspaceID: container.WorkspaceID,
|
|
|
|
SubscriberID: utils.NewID(utils.IDTypeUser),
|
|
|
|
}
|
|
|
|
_, resp := th.Client.CreateSubscription(container.WorkspaceID, sub)
|
|
|
|
require.Error(t, resp.Error)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetSubscriptions(t *testing.T) {
|
|
|
|
th := SetupTestHelperWithoutToken().InitBasic()
|
|
|
|
defer th.TearDown()
|
|
|
|
|
|
|
|
err := th.InitUsers("user1", "user2")
|
|
|
|
require.NoError(t, err, "failed to init users")
|
|
|
|
|
|
|
|
container := store.Container{
|
|
|
|
WorkspaceID: utils.NewID(utils.IDTypeWorkspace),
|
|
|
|
}
|
|
|
|
|
|
|
|
t.Run("Get subscriptions for user", func(t *testing.T) {
|
|
|
|
mySubs, user1ID, err := createTestSubscriptions(th.Client, 5, container.WorkspaceID)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Len(t, mySubs, 5)
|
|
|
|
|
|
|
|
// create more subscriptions with different user
|
|
|
|
otherSubs, _, err := createTestSubscriptions(th.Client2, 10, container.WorkspaceID)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Len(t, otherSubs, 10)
|
|
|
|
|
|
|
|
// fetch the newly created subscriptions for current user, making sure only
|
|
|
|
// the ones created for the current user are returned.
|
|
|
|
subsFound, resp := th.Client.GetSubscriptions(container.WorkspaceID, user1ID)
|
|
|
|
require.NoError(t, resp.Error)
|
|
|
|
require.Len(t, subsFound, 5)
|
|
|
|
assert.ElementsMatch(t, mySubs, subsFound)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestDeleteSubscription(t *testing.T) {
|
|
|
|
th := SetupTestHelper().InitBasic()
|
|
|
|
defer th.TearDown()
|
|
|
|
|
|
|
|
container := store.Container{
|
|
|
|
WorkspaceID: utils.NewID(utils.IDTypeWorkspace),
|
|
|
|
}
|
|
|
|
|
|
|
|
t.Run("Delete valid subscription", func(t *testing.T) {
|
|
|
|
subs, userID, err := createTestSubscriptions(th.Client, 3, container.WorkspaceID)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Len(t, subs, 3)
|
|
|
|
|
|
|
|
resp := th.Client.DeleteSubscription(container.WorkspaceID, subs[1].BlockID, userID)
|
|
|
|
require.NoError(t, resp.Error)
|
|
|
|
|
|
|
|
// fetch the subscriptions and ensure the list is correct
|
|
|
|
subsFound, resp := th.Client.GetSubscriptions(container.WorkspaceID, userID)
|
|
|
|
require.NoError(t, resp.Error)
|
|
|
|
require.Len(t, subsFound, 2)
|
|
|
|
|
|
|
|
assert.Contains(t, subsFound, subs[0])
|
|
|
|
assert.Contains(t, subsFound, subs[2])
|
|
|
|
assert.NotContains(t, subsFound, subs[1])
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("Delete invalid subscription", func(t *testing.T) {
|
|
|
|
user, resp := th.Client.GetMe()
|
|
|
|
require.NoError(t, resp.Error)
|
|
|
|
|
|
|
|
resp = th.Client.DeleteSubscription(container.WorkspaceID, "bogus", user.ID)
|
|
|
|
require.Error(t, resp.Error)
|
|
|
|
})
|
|
|
|
}
|