MM-24876: local mode support for getPost (#14735)

Automatic Merge
Этот коммит содержится в:
Agniva De Sarker
2020-06-12 09:56:35 +05:30
коммит произвёл GitHub
родитель 172eb1853f
Коммит f30a62e303
3 изменённых файлов: 46 добавлений и 21 удалений

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

@@ -304,6 +304,9 @@ func InitLocal(configservice configservice.ConfigService, globalOptionsFunc app.
api.BaseRoutes.Groups = api.BaseRoutes.ApiRoot.PathPrefix("/groups").Subrouter()
api.BaseRoutes.Posts = api.BaseRoutes.ApiRoot.PathPrefix("/posts").Subrouter()
api.BaseRoutes.Post = api.BaseRoutes.Posts.PathPrefix("/{post_id:[A-Za-z0-9]+}").Subrouter()
api.InitUserLocal()
api.InitTeamLocal()
api.InitChannelLocal()
@@ -313,6 +316,7 @@ func InitLocal(configservice configservice.ConfigService, globalOptionsFunc app.
api.InitLicenseLocal()
api.InitBotLocal()
api.InitGroupLocal()
api.InitPostLocal()
root.Handle("/api/v4/{anything:.*}", http.HandlerFunc(api.Handle404))

8
api4/post_local.go Обычный файл
Просмотреть файл

@@ -0,0 +1,8 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package api4
func (api *API) InitPostLocal() {
api.BaseRoutes.Post.Handle("", api.ApiLocal(getPost)).Methods("GET")
}

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

@@ -1862,48 +1862,61 @@ func TestGetPostsForChannelAroundLastUnread(t *testing.T) {
func TestGetPost(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
// TODO: migrate this entirely to the subtest's client
// once the other methods are migrated too.
Client := th.Client
post, resp := Client.GetPost(th.BasicPost.Id, "")
CheckNoError(t, resp)
var privatePost *model.Post
th.TestForAllClients(t, func(t *testing.T, c *model.Client4) {
t.Helper()
require.Equal(t, th.BasicPost.Id, post.Id, "post ids don't match")
post, resp := c.GetPost(th.BasicPost.Id, "")
CheckNoError(t, resp)
post, resp = Client.GetPost(th.BasicPost.Id, resp.Etag)
CheckEtag(t, post, resp)
require.Equal(t, th.BasicPost.Id, post.Id, "post ids don't match")
_, resp = Client.GetPost("", "")
CheckNotFoundStatus(t, resp)
post, resp = c.GetPost(th.BasicPost.Id, resp.Etag)
CheckEtag(t, post, resp)
_, resp = Client.GetPost("junk", "")
CheckBadRequestStatus(t, resp)
_, resp = c.GetPost("", "")
CheckNotFoundStatus(t, resp)
_, resp = Client.GetPost(model.NewId(), "")
CheckNotFoundStatus(t, resp)
_, resp = c.GetPost("junk", "")
CheckBadRequestStatus(t, resp)
Client.RemoveUserFromChannel(th.BasicChannel.Id, th.BasicUser.Id)
_, resp = c.GetPost(model.NewId(), "")
CheckNotFoundStatus(t, resp)
// Channel is public, should be able to read post
_, resp = Client.GetPost(th.BasicPost.Id, "")
CheckNoError(t, resp)
Client.RemoveUserFromChannel(th.BasicChannel.Id, th.BasicUser.Id)
privatePost := th.CreatePostWithClient(Client, th.BasicPrivateChannel)
// Channel is public, should be able to read post
_, resp = c.GetPost(th.BasicPost.Id, "")
CheckNoError(t, resp)
_, resp = Client.GetPost(privatePost.Id, "")
CheckNoError(t, resp)
privatePost = th.CreatePostWithClient(Client, th.BasicPrivateChannel)
_, resp = c.GetPost(privatePost.Id, "")
CheckNoError(t, resp)
})
Client.RemoveUserFromChannel(th.BasicPrivateChannel.Id, th.BasicUser.Id)
// Channel is private, should not be able to read post
_, resp = Client.GetPost(privatePost.Id, "")
_, resp := Client.GetPost(privatePost.Id, "")
CheckForbiddenStatus(t, resp)
// But local client should.
_, resp = th.LocalClient.GetPost(privatePost.Id, "")
CheckNoError(t, resp)
Client.Logout()
// Normal client should get unauthorized, but local client should get 404.
_, resp = Client.GetPost(model.NewId(), "")
CheckUnauthorizedStatus(t, resp)
_, resp = th.SystemAdminClient.GetPost(th.BasicPost.Id, "")
CheckNoError(t, resp)
_, resp = th.LocalClient.GetPost(model.NewId(), "")
CheckNotFoundStatus(t, resp)
}
func TestDeletePost(t *testing.T) {