MM-48614: saves priority for drafts (#21752)

* MM-48614: saves priority for drafts

Adds a new column in the drafts table, "priority".
This way we can save post's priority in the draft.

Fixes OmitConnectionId, which when you published a ws event for a user
was getting bypassed.

Fixes Get for drafts returns deleted ones as well, which is needed for
upsert.

* Adds test case for the OmitConnectionId

* Addresses review comments, removes DeleteAt

* Vets

* Adds missing translation

* Re-instates DeleteAt column

* Adds separate case to get draft including deleted

* Fixes Update Draft

* Empty
Этот коммит содержится в:
Kyriakos Z
2022-11-29 23:36:47 +02:00
коммит произвёл GitHub
родитель 4f3f6e6496
Коммит a240cd53eb
22 изменённых файлов: 453 добавлений и 387 удалений

Просмотреть файл

@@ -3269,7 +3269,7 @@ func (s *OpenTracingLayerDraftStore) Delete(userID string, channelID string, roo
return err
}
func (s *OpenTracingLayerDraftStore) Get(userID string, channelID string, rootID string) (*model.Draft, error) {
func (s *OpenTracingLayerDraftStore) Get(userID string, channelID string, rootID string, includeDeleted bool) (*model.Draft, error) {
origCtx := s.Root.Store.Context()
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "DraftStore.Get")
s.Root.Store.SetContext(newCtx)
@@ -3278,7 +3278,7 @@ func (s *OpenTracingLayerDraftStore) Get(userID string, channelID string, rootID
}()
defer span.Finish()
result, err := s.DraftStore.Get(userID, channelID, rootID)
result, err := s.DraftStore.Get(userID, channelID, rootID, includeDeleted)
if err != nil {
span.LogFields(spanlog.Error(err))
ext.Error.Set(span, true)

Просмотреть файл

@@ -3651,11 +3651,11 @@ func (s *RetryLayerDraftStore) Delete(userID string, channelID string, rootID st
}
func (s *RetryLayerDraftStore) Get(userID string, channelID string, rootID string) (*model.Draft, error) {
func (s *RetryLayerDraftStore) Get(userID string, channelID string, rootID string, includeDeleted bool) (*model.Draft, error) {
tries := 0
for {
result, err := s.DraftStore.Get(userID, channelID, rootID)
result, err := s.DraftStore.Get(userID, channelID, rootID, includeDeleted)
if err == nil {
return result, nil
}

Просмотреть файл

@@ -24,7 +24,18 @@ type SqlDraftStore struct {
}
func draftSliceColumns() []string {
return []string{"CreateAt", "UpdateAt", "DeleteAt", "Message", "RootId", "ChannelId", "UserId", "FileIds", "Props"}
return []string{
"CreateAt",
"UpdateAt",
"DeleteAt",
"Message",
"RootId",
"ChannelId",
"UserId",
"FileIds",
"Props",
"Priority",
}
}
func draftToSlice(draft *model.Draft) []interface{} {
@@ -38,6 +49,7 @@ func draftToSlice(draft *model.Draft) []interface{} {
draft.UserId,
model.ArrayToJSON(draft.FileIds),
model.StringInterfaceToJSON(draft.Props),
model.StringInterfaceToJSON(draft.Priority),
}
}
@@ -49,17 +61,20 @@ func newSqlDraftStore(sqlStore *SqlStore, metrics einterfaces.MetricsInterface)
}
}
func (s *SqlDraftStore) Get(userId, channelId, rootId string) (*model.Draft, error) {
func (s *SqlDraftStore) Get(userId, channelId, rootId string, includeDeleted bool) (*model.Draft, error) {
query := s.getQueryBuilder().
Select("*").
Select(draftSliceColumns()...).
From("Drafts").
Where(sq.Eq{
"UserId": userId,
"ChannelId": channelId,
"RootId": rootId,
"DeleteAt": 0,
})
if !includeDeleted {
query = query.Where(sq.Eq{"DeleteAt": 0})
}
dt := model.Draft{}
err := s.GetReplicaX().GetBuilder(&dt, query)
@@ -108,20 +123,15 @@ func (s *SqlDraftStore) Update(draft *model.Draft) (*model.Draft, error) {
Set("Message", draft.Message).
Set("Props", draft.Props).
Set("FileIds", draft.FileIds).
Set("Priority", draft.Priority).
Set("DeleteAt", 0).
Where(sq.Eq{
"UserId": draft.UserId,
"ChannelId": draft.ChannelId,
"RootId": draft.RootId,
"DeleteAt": 0,
})
sql, args, err := query.ToSql()
if err != nil {
return nil, errors.Wrapf(err, "failed to convert to sql")
}
if _, err = s.GetMasterX().Exec(sql, args...); err != nil {
if _, err := s.GetMasterX().ExecBuilder(query); err != nil {
return nil, errors.Wrapf(err, "failed to update Draft with channelid=%s", draft.ChannelId)
}
@@ -132,7 +142,17 @@ func (s *SqlDraftStore) GetDraftsForUser(userID, teamID string) ([]*model.Draft,
var drafts []*model.Draft
query := s.getQueryBuilder().
Select("Drafts.*").
Select(
"Drafts.CreateAt",
"Drafts.UpdateAt",
"Drafts.Message",
"Drafts.RootId",
"Drafts.ChannelId",
"Drafts.UserId",
"Drafts.FileIds",
"Drafts.Props",
"Drafts.Priority",
).
From("Drafts").
InnerJoin("ChannelMembers ON ChannelMembers.ChannelId = Drafts.ChannelId").
Where(sq.And{

Просмотреть файл

@@ -6,345 +6,9 @@ package sqlstore
import (
"testing"
"github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/store"
"github.com/mattermost/mattermost-server/v6/store/storetest"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestDraftStore(t *testing.T) {
StoreTestWithSqlStore(t, storetest.TestDraftStore)
}
func TestSaveDraft(t *testing.T) {
StoreTest(t, func(t *testing.T, ss store.Store) {
user := &model.User{
Id: model.NewId(),
}
channel := &model.Channel{
Id: model.NewId(),
}
channel2 := &model.Channel{
Id: model.NewId(),
}
member1 := &model.ChannelMember{
ChannelId: channel.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
member2 := &model.ChannelMember{
ChannelId: channel2.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
_, err := ss.Channel().SaveMember(member1)
require.NoError(t, err)
_, err = ss.Channel().SaveMember(member2)
require.NoError(t, err)
draft1 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft1",
}
draft2 := &model.Draft{
CreateAt: 00005,
UpdateAt: 00005,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel2.Id,
Message: "draft2",
}
t.Run("save drafts", func(t *testing.T) {
draftResp, err := ss.Draft().Save(draft1)
assert.NoError(t, err)
assert.Equal(t, draft1.Message, draftResp.Message)
assert.Equal(t, draft1.ChannelId, draftResp.ChannelId)
draftResp, err = ss.Draft().Save(draft2)
assert.NoError(t, err)
assert.Equal(t, draft2.Message, draftResp.Message)
assert.Equal(t, draft2.ChannelId, draftResp.ChannelId)
})
})
}
func TestUpdateDraft(t *testing.T) {
StoreTest(t, func(t *testing.T, ss store.Store) {
user := &model.User{
Id: model.NewId(),
}
channel := &model.Channel{
Id: model.NewId(),
}
channel2 := &model.Channel{
Id: model.NewId(),
}
member1 := &model.ChannelMember{
ChannelId: channel.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
member2 := &model.ChannelMember{
ChannelId: channel2.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
_, err := ss.Channel().SaveMember(member1)
require.NoError(t, err)
_, err = ss.Channel().SaveMember(member2)
require.NoError(t, err)
draft1 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft1",
}
draft2 := &model.Draft{
CreateAt: 00005,
UpdateAt: 00005,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel2.Id,
Message: "draft2",
}
t.Run("update drafts", func(t *testing.T) {
draftResp, err := ss.Draft().Update(draft1)
assert.NoError(t, err)
assert.Equal(t, draft1.Message, draftResp.Message)
assert.Equal(t, draft1.ChannelId, draftResp.ChannelId)
draftResp, err = ss.Draft().Update(draft2)
assert.NoError(t, err)
assert.Equal(t, draft2.Message, draftResp.Message)
assert.Equal(t, draft2.ChannelId, draftResp.ChannelId)
})
})
}
func TestDeleteDraft(t *testing.T) {
StoreTest(t, func(t *testing.T, ss store.Store) {
user := &model.User{
Id: model.NewId(),
}
channel := &model.Channel{
Id: model.NewId(),
}
channel2 := &model.Channel{
Id: model.NewId(),
}
member1 := &model.ChannelMember{
ChannelId: channel.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
member2 := &model.ChannelMember{
ChannelId: channel2.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
_, err := ss.Channel().SaveMember(member1)
require.NoError(t, err)
_, err = ss.Channel().SaveMember(member2)
require.NoError(t, err)
draft1 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft1",
}
draft2 := &model.Draft{
CreateAt: 00005,
UpdateAt: 00005,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel2.Id,
Message: "draft2",
}
_, err = ss.Draft().Save(draft1)
require.NoError(t, err)
_, err = ss.Draft().Save(draft2)
require.NoError(t, err)
t.Run("delete drafts", func(t *testing.T) {
err := ss.Draft().Delete(user.Id, channel.Id, "")
assert.NoError(t, err)
err = ss.Draft().Delete(user.Id, channel2.Id, "")
assert.NoError(t, err)
})
})
}
func TestGetDraft(t *testing.T) {
StoreTest(t, func(t *testing.T, ss store.Store) {
user := &model.User{
Id: model.NewId(),
}
channel := &model.Channel{
Id: model.NewId(),
}
channel2 := &model.Channel{
Id: model.NewId(),
}
member1 := &model.ChannelMember{
ChannelId: channel.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
member2 := &model.ChannelMember{
ChannelId: channel2.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
_, err := ss.Channel().SaveMember(member1)
require.NoError(t, err)
_, err = ss.Channel().SaveMember(member2)
require.NoError(t, err)
draft1 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft1",
}
draft2 := &model.Draft{
CreateAt: 00005,
UpdateAt: 00005,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel2.Id,
Message: "draft2",
}
_, err = ss.Draft().Save(draft1)
require.NoError(t, err)
_, err = ss.Draft().Save(draft2)
require.NoError(t, err)
t.Run("get drafts", func(t *testing.T) {
draftResp, err := ss.Draft().Get(user.Id, channel.Id, "")
assert.NoError(t, err)
assert.Equal(t, draft1.Message, draftResp.Message)
assert.Equal(t, draft1.ChannelId, draftResp.ChannelId)
draftResp, err = ss.Draft().Get(user.Id, channel2.Id, "")
assert.NoError(t, err)
assert.Equal(t, draft2.Message, draftResp.Message)
assert.Equal(t, draft2.ChannelId, draftResp.ChannelId)
})
})
}
func TestGetDraftsForUser(t *testing.T) {
StoreTest(t, func(t *testing.T, ss store.Store) {
user := &model.User{
Id: model.NewId(),
}
channel := &model.Channel{
Id: model.NewId(),
}
channel2 := &model.Channel{
Id: model.NewId(),
}
member1 := &model.ChannelMember{
ChannelId: channel.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
member2 := &model.ChannelMember{
ChannelId: channel2.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
_, err := ss.Channel().SaveMember(member1)
require.NoError(t, err)
_, err = ss.Channel().SaveMember(member2)
require.NoError(t, err)
draft1 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft1",
}
draft2 := &model.Draft{
CreateAt: 00005,
UpdateAt: 00005,
DeleteAt: 0,
UserId: user.Id,
ChannelId: channel2.Id,
Message: "draft2",
}
_, err = ss.Draft().Save(draft1)
require.NoError(t, err)
_, err = ss.Draft().Save(draft2)
require.NoError(t, err)
t.Run("get drafts", func(t *testing.T) {
draftResp, err := ss.Draft().GetDraftsForUser(user.Id, "")
assert.NoError(t, err)
assert.Equal(t, draft2.Message, draftResp[0].Message)
assert.Equal(t, draft2.ChannelId, draftResp[0].ChannelId)
assert.Equal(t, draft1.Message, draftResp[1].Message)
assert.Equal(t, draft1.ChannelId, draftResp[1].ChannelId)
})
})
}

Просмотреть файл

@@ -983,7 +983,7 @@ type PostPriorityStore interface {
type DraftStore interface {
Save(d *model.Draft) (*model.Draft, error)
Get(userID, channelID, rootID string) (*model.Draft, error)
Get(userID, channelID, rootID string, includeDeleted bool) (*model.Draft, error)
Delete(userID, channelID, rootID string) error
GetDraftsForUser(userID, teamID string) ([]*model.Draft, error)
Update(d *model.Draft) (*model.Draft, error)

Просмотреть файл

@@ -6,8 +6,354 @@ package storetest
import (
"testing"
"github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/store"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestDraftStore(t *testing.T, ss store.Store, s SqlStore) {
t.Run("SaveDraft", func(t *testing.T) { testSaveDraft(t, ss) })
t.Run("UpdateDraft", func(t *testing.T) { testUpdateDraft(t, ss) })
t.Run("DeleteDraft", func(t *testing.T) { testDeleteDraft(t, ss) })
t.Run("GetDraft", func(t *testing.T) { testGetDraft(t, ss) })
t.Run("GetDraftsForUser", func(t *testing.T) { testGetDraftsForUser(t, ss) })
}
func testSaveDraft(t *testing.T, ss store.Store) {
user := &model.User{
Id: model.NewId(),
}
channel := &model.Channel{
Id: model.NewId(),
}
channel2 := &model.Channel{
Id: model.NewId(),
}
member1 := &model.ChannelMember{
ChannelId: channel.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
member2 := &model.ChannelMember{
ChannelId: channel2.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
_, err := ss.Channel().SaveMember(member1)
require.NoError(t, err)
_, err = ss.Channel().SaveMember(member2)
require.NoError(t, err)
draft1 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft1",
}
draft2 := &model.Draft{
CreateAt: 00005,
UpdateAt: 00005,
UserId: user.Id,
ChannelId: channel2.Id,
Message: "draft2",
}
t.Run("save drafts", func(t *testing.T) {
draftResp, err := ss.Draft().Save(draft1)
assert.NoError(t, err)
assert.Equal(t, draft1.Message, draftResp.Message)
assert.Equal(t, draft1.ChannelId, draftResp.ChannelId)
draftResp, err = ss.Draft().Save(draft2)
assert.NoError(t, err)
assert.Equal(t, draft2.Message, draftResp.Message)
assert.Equal(t, draft2.ChannelId, draftResp.ChannelId)
})
}
func testUpdateDraft(t *testing.T, ss store.Store) {
user := &model.User{
Id: model.NewId(),
}
channel := &model.Channel{
Id: model.NewId(),
}
channel2 := &model.Channel{
Id: model.NewId(),
}
member1 := &model.ChannelMember{
ChannelId: channel.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
member2 := &model.ChannelMember{
ChannelId: channel2.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
_, err := ss.Channel().SaveMember(member1)
require.NoError(t, err)
_, err = ss.Channel().SaveMember(member2)
require.NoError(t, err)
draft1 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft1",
}
draft2 := &model.Draft{
CreateAt: 00005,
UpdateAt: 00005,
UserId: user.Id,
ChannelId: channel2.Id,
Message: "draft2",
}
t.Run("update drafts", func(t *testing.T) {
draftResp, err := ss.Draft().Update(draft1)
assert.NoError(t, err)
assert.Equal(t, draft1.Message, draftResp.Message)
assert.Equal(t, draft1.ChannelId, draftResp.ChannelId)
draftResp, err = ss.Draft().Update(draft2)
assert.NoError(t, err)
assert.Equal(t, draft2.Message, draftResp.Message)
assert.Equal(t, draft2.ChannelId, draftResp.ChannelId)
})
}
func testDeleteDraft(t *testing.T, ss store.Store) {
user := &model.User{
Id: model.NewId(),
}
channel := &model.Channel{
Id: model.NewId(),
}
channel2 := &model.Channel{
Id: model.NewId(),
}
member1 := &model.ChannelMember{
ChannelId: channel.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
member2 := &model.ChannelMember{
ChannelId: channel2.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
_, err := ss.Channel().SaveMember(member1)
require.NoError(t, err)
_, err = ss.Channel().SaveMember(member2)
require.NoError(t, err)
draft1 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft1",
}
draft2 := &model.Draft{
CreateAt: 00005,
UpdateAt: 00005,
UserId: user.Id,
ChannelId: channel2.Id,
Message: "draft2",
}
_, err = ss.Draft().Save(draft1)
require.NoError(t, err)
_, err = ss.Draft().Save(draft2)
require.NoError(t, err)
t.Run("delete drafts", func(t *testing.T) {
err := ss.Draft().Delete(user.Id, channel.Id, "")
assert.NoError(t, err)
err = ss.Draft().Delete(user.Id, channel2.Id, "")
assert.NoError(t, err)
_, err = ss.Draft().Get(user.Id, channel.Id, "", false)
require.Error(t, err)
assert.IsType(t, &store.ErrNotFound{}, err)
_, err = ss.Draft().Get(user.Id, channel2.Id, "", false)
assert.Error(t, err)
assert.IsType(t, &store.ErrNotFound{}, err)
})
}
func testGetDraft(t *testing.T, ss store.Store) {
user := &model.User{
Id: model.NewId(),
}
channel := &model.Channel{
Id: model.NewId(),
}
channel2 := &model.Channel{
Id: model.NewId(),
}
member1 := &model.ChannelMember{
ChannelId: channel.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
member2 := &model.ChannelMember{
ChannelId: channel2.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
_, err := ss.Channel().SaveMember(member1)
require.NoError(t, err)
_, err = ss.Channel().SaveMember(member2)
require.NoError(t, err)
draft1 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft1",
}
draft2 := &model.Draft{
CreateAt: 00005,
UpdateAt: 00005,
UserId: user.Id,
ChannelId: channel2.Id,
Message: "draft2",
}
_, err = ss.Draft().Save(draft1)
require.NoError(t, err)
_, err = ss.Draft().Save(draft2)
require.NoError(t, err)
t.Run("get drafts", func(t *testing.T) {
draftResp, err := ss.Draft().Get(user.Id, channel.Id, "", false)
assert.NoError(t, err)
assert.Equal(t, draft1.Message, draftResp.Message)
assert.Equal(t, draft1.ChannelId, draftResp.ChannelId)
draftResp, err = ss.Draft().Get(user.Id, channel2.Id, "", false)
assert.NoError(t, err)
assert.Equal(t, draft2.Message, draftResp.Message)
assert.Equal(t, draft2.ChannelId, draftResp.ChannelId)
})
t.Run("get draft including deleted", func(t *testing.T) {
draftResp, err := ss.Draft().Get(user.Id, channel.Id, "", false)
assert.NoError(t, err)
assert.Equal(t, draft1.Message, draftResp.Message)
assert.Equal(t, draft1.ChannelId, draftResp.ChannelId)
err = ss.Draft().Delete(user.Id, channel.Id, "")
assert.NoError(t, err)
_, err = ss.Draft().Get(user.Id, channel.Id, "", false)
assert.Error(t, err)
assert.IsType(t, &store.ErrNotFound{}, err)
draftResp, err = ss.Draft().Get(user.Id, channel.Id, "", true)
assert.NoError(t, err)
assert.Equal(t, draft1.Message, draftResp.Message)
assert.Equal(t, draft1.ChannelId, draftResp.ChannelId)
})
}
func testGetDraftsForUser(t *testing.T, ss store.Store) {
user := &model.User{
Id: model.NewId(),
}
channel := &model.Channel{
Id: model.NewId(),
}
channel2 := &model.Channel{
Id: model.NewId(),
}
member1 := &model.ChannelMember{
ChannelId: channel.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
member2 := &model.ChannelMember{
ChannelId: channel2.Id,
UserId: user.Id,
NotifyProps: model.GetDefaultChannelNotifyProps(),
}
_, err := ss.Channel().SaveMember(member1)
require.NoError(t, err)
_, err = ss.Channel().SaveMember(member2)
require.NoError(t, err)
draft1 := &model.Draft{
CreateAt: 00001,
UpdateAt: 00001,
UserId: user.Id,
ChannelId: channel.Id,
Message: "draft1",
}
draft2 := &model.Draft{
CreateAt: 00005,
UpdateAt: 00005,
UserId: user.Id,
ChannelId: channel2.Id,
Message: "draft2",
}
_, err = ss.Draft().Save(draft1)
require.NoError(t, err)
_, err = ss.Draft().Save(draft2)
require.NoError(t, err)
t.Run("get drafts", func(t *testing.T) {
draftResp, err := ss.Draft().GetDraftsForUser(user.Id, "")
assert.NoError(t, err)
assert.Equal(t, draft2.Message, draftResp[0].Message)
assert.Equal(t, draft2.ChannelId, draftResp[0].ChannelId)
assert.Equal(t, draft1.Message, draftResp[1].Message)
assert.Equal(t, draft1.ChannelId, draftResp[1].ChannelId)
})
}

Просмотреть файл

@@ -28,13 +28,13 @@ func (_m *DraftStore) Delete(userID string, channelID string, rootID string) err
return r0
}
// Get provides a mock function with given fields: userID, channelID, rootID
func (_m *DraftStore) Get(userID string, channelID string, rootID string) (*model.Draft, error) {
ret := _m.Called(userID, channelID, rootID)
// Get provides a mock function with given fields: userID, channelID, rootID, includeDeleted
func (_m *DraftStore) Get(userID string, channelID string, rootID string, includeDeleted bool) (*model.Draft, error) {
ret := _m.Called(userID, channelID, rootID, includeDeleted)
var r0 *model.Draft
if rf, ok := ret.Get(0).(func(string, string, string) *model.Draft); ok {
r0 = rf(userID, channelID, rootID)
if rf, ok := ret.Get(0).(func(string, string, string, bool) *model.Draft); ok {
r0 = rf(userID, channelID, rootID, includeDeleted)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*model.Draft)
@@ -42,8 +42,8 @@ func (_m *DraftStore) Get(userID string, channelID string, rootID string) (*mode
}
var r1 error
if rf, ok := ret.Get(1).(func(string, string, string) error); ok {
r1 = rf(userID, channelID, rootID)
if rf, ok := ret.Get(1).(func(string, string, string, bool) error); ok {
r1 = rf(userID, channelID, rootID, includeDeleted)
} else {
r1 = ret.Error(1)
}

Просмотреть файл

@@ -2996,10 +2996,10 @@ func (s *TimerLayerDraftStore) Delete(userID string, channelID string, rootID st
return err
}
func (s *TimerLayerDraftStore) Get(userID string, channelID string, rootID string) (*model.Draft, error) {
func (s *TimerLayerDraftStore) Get(userID string, channelID string, rootID string, includeDeleted bool) (*model.Draft, error) {
start := time.Now()
result, err := s.DraftStore.Get(userID, channelID, rootID)
result, err := s.DraftStore.Get(userID, channelID, rootID, includeDeleted)
elapsed := float64(time.Since(start)) / float64(time.Second)
if s.Root.Metrics != nil {