MM-37721: Add prop for post preview before saving record. (#18361)
* MM-37721: Add prop for post preview before saving record. * MM-37721: Test fix. * MM-37721: Adds test. * MM-37721: Fixes vet. Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
f9bd7cce8e
Коммит
acec8db7c5
11
app/post.go
11
app/post.go
@@ -297,6 +297,12 @@ func (a *App) CreatePost(c *request.Context, post *model.Post, channel *model.Ch
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
post = a.PreparePostForClient(post, true, false)
|
||||||
|
previewPost := post.GetPreviewPost()
|
||||||
|
if previewPost != nil {
|
||||||
|
post.AddProp(model.PostPropsPreviewedPost, previewPost.PostID)
|
||||||
|
}
|
||||||
|
|
||||||
rpost, nErr := a.Srv().Store.Post().Save(post)
|
rpost, nErr := a.Srv().Store.Post().Save(post)
|
||||||
if nErr != nil {
|
if nErr != nil {
|
||||||
var appErr *model.AppError
|
var appErr *model.AppError
|
||||||
@@ -345,11 +351,6 @@ func (a *App) CreatePost(c *request.Context, post *model.Post, channel *model.Ch
|
|||||||
// to be done when we send the post over the websocket in handlePostEvents
|
// to be done when we send the post over the websocket in handlePostEvents
|
||||||
rpost = a.PreparePostForClient(rpost, true, false)
|
rpost = a.PreparePostForClient(rpost, true, false)
|
||||||
|
|
||||||
rpost, nErr = a.addPostPreviewProp(rpost)
|
|
||||||
if nErr != nil {
|
|
||||||
return nil, model.NewAppError("CreatePost", "app.post.save.app_error", nil, nErr.Error(), http.StatusInternalServerError)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure poster is following the thread
|
// Make sure poster is following the thread
|
||||||
if *a.Config().ServiceSettings.ThreadAutoFollow && rpost.RootId != "" {
|
if *a.Config().ServiceSettings.ThreadAutoFollow && rpost.RootId != "" {
|
||||||
_, err := a.Srv().Store.Thread().MaintainMembership(user.Id, rpost.RootId, store.ThreadMembershipOpts{
|
_, err := a.Srv().Store.Thread().MaintainMembership(user.Id, rpost.RootId, store.ThreadMembershipOpts{
|
||||||
|
|||||||
@@ -427,17 +427,17 @@ func TestPostChannelMentions(t *testing.T) {
|
|||||||
CreateAt: 0,
|
CreateAt: 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
result, err := th.App.CreatePostAsUser(th.Context, post, "", true)
|
post, err = th.App.CreatePostAsUser(th.Context, post, "", true)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
assert.Equal(t, map[string]interface{}{
|
assert.Equal(t, map[string]interface{}{
|
||||||
"mention-test": map[string]interface{}{
|
"mention-test": map[string]interface{}{
|
||||||
"display_name": "Mention Test",
|
"display_name": "Mention Test",
|
||||||
"team_name": th.BasicTeam.Name,
|
"team_name": th.BasicTeam.Name,
|
||||||
},
|
},
|
||||||
}, result.GetProp("channel_mentions"))
|
}, post.GetProp("channel_mentions"))
|
||||||
|
|
||||||
post.Message = fmt.Sprintf("goodbye, ~%v!", channelToMention.Name)
|
post.Message = fmt.Sprintf("goodbye, ~%v!", channelToMention.Name)
|
||||||
result, err = th.App.UpdatePost(th.Context, post, false)
|
result, err := th.App.UpdatePost(th.Context, post, false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
assert.Equal(t, map[string]interface{}{
|
assert.Equal(t, map[string]interface{}{
|
||||||
"mention-test": map[string]interface{}{
|
"mention-test": map[string]interface{}{
|
||||||
@@ -786,6 +786,44 @@ func TestCreatePost(t *testing.T) {
|
|||||||
|
|
||||||
assert.Equal(t, previewPost.GetProps(), model.StringInterface{"previewed_post": referencedPost.Id})
|
assert.Equal(t, previewPost.GetProps(), model.StringInterface{"previewed_post": referencedPost.Id})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("creates a single record for a permalink preview post", func(t *testing.T) {
|
||||||
|
th := Setup(t).InitBasic()
|
||||||
|
defer th.TearDown()
|
||||||
|
|
||||||
|
channelForPreview := th.CreateChannel(th.BasicTeam)
|
||||||
|
|
||||||
|
referencedPost := &model.Post{
|
||||||
|
ChannelId: th.BasicChannel.Id,
|
||||||
|
Message: "hello world",
|
||||||
|
UserId: th.BasicUser.Id,
|
||||||
|
}
|
||||||
|
referencedPost, err := th.App.CreatePost(th.Context, referencedPost, th.BasicChannel, false, false)
|
||||||
|
require.Nil(t, err)
|
||||||
|
|
||||||
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
|
*cfg.ServiceSettings.SiteURL = "http://foobar.com"
|
||||||
|
*cfg.ServiceSettings.EnablePermalinkPreviews = true
|
||||||
|
})
|
||||||
|
|
||||||
|
permalink := fmt.Sprintf("%s/%s/pl/%s", *th.App.Config().ServiceSettings.SiteURL, th.BasicTeam.Name, referencedPost.Id)
|
||||||
|
|
||||||
|
previewPost := &model.Post{
|
||||||
|
ChannelId: channelForPreview.Id,
|
||||||
|
Message: permalink,
|
||||||
|
UserId: th.BasicUser.Id,
|
||||||
|
}
|
||||||
|
|
||||||
|
previewPost, err = th.App.CreatePost(th.Context, previewPost, channelForPreview, false, false)
|
||||||
|
require.Nil(t, err)
|
||||||
|
|
||||||
|
sqlStore := th.GetSqlStore()
|
||||||
|
sql := fmt.Sprintf("select count(*) from Posts where Id = '%[1]s' or OriginalId = '%[1]s';", previewPost.Id)
|
||||||
|
val, err2 := sqlStore.GetMaster().SelectInt(sql)
|
||||||
|
require.NoError(t, err2)
|
||||||
|
|
||||||
|
require.EqualValues(t, int64(1), val)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPatchPost(t *testing.T) {
|
func TestPatchPost(t *testing.T) {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user