Add TestPinMessageInCommunityChat, adjust pin permissions
Also check pin post permission a bit earlier for the sender, with canPost() in sendPinMessage(), even though there is a later check down the line in dispatchMessage(). Fixes #4138
This commit is contained in:
parent
74396b461d
commit
4744ee899e
|
@ -498,6 +498,82 @@ func (s *MessengerCommunitiesSuite) TestPostToCommunityChat() {
|
||||||
s.Require().True(found)
|
s.Require().True(found)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *MessengerCommunitiesSuite) TestPinMessageInCommunityChat() {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
|
// Create a community
|
||||||
|
description := &requests.CreateCommunity{
|
||||||
|
Membership: protobuf.CommunityPermissions_AUTO_ACCEPT,
|
||||||
|
Name: "status",
|
||||||
|
Color: "#ffffff",
|
||||||
|
Description: "status community description",
|
||||||
|
PinMessageAllMembersEnabled: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := s.owner.CreateCommunity(description, true)
|
||||||
|
s.Require().NoError(err)
|
||||||
|
s.Require().NotNil(response)
|
||||||
|
s.Require().Len(response.Communities(), 1)
|
||||||
|
|
||||||
|
community := response.Communities()[0]
|
||||||
|
s.Require().NotNil(community)
|
||||||
|
s.Require().Equal(community.AllowsAllMembersToPinMessage(), true)
|
||||||
|
|
||||||
|
// Create a community chat
|
||||||
|
orgChat := &protobuf.CommunityChat{
|
||||||
|
Permissions: &protobuf.CommunityPermissions{
|
||||||
|
Access: protobuf.CommunityPermissions_AUTO_ACCEPT,
|
||||||
|
},
|
||||||
|
Identity: &protobuf.ChatIdentity{
|
||||||
|
DisplayName: "status-core",
|
||||||
|
Emoji: "😎",
|
||||||
|
Description: "status-core community chat",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
response, err = s.owner.CreateCommunityChat(community.ID(), orgChat)
|
||||||
|
s.Require().NoError(err)
|
||||||
|
s.Require().NotNil(response)
|
||||||
|
s.Require().Len(response.Communities(), 1)
|
||||||
|
s.Require().Len(response.Chats(), 1)
|
||||||
|
chat := response.Chats()[0]
|
||||||
|
s.Require().NotNil(chat)
|
||||||
|
|
||||||
|
s.advertiseCommunityTo(community, s.owner, s.bob)
|
||||||
|
s.joinCommunity(community, s.owner, s.bob)
|
||||||
|
|
||||||
|
inputMessage := common.NewMessage()
|
||||||
|
inputMessage.ChatId = chat.ID
|
||||||
|
inputMessage.ContentType = protobuf.ChatMessage_TEXT_PLAIN
|
||||||
|
inputMessage.Text = "message to be pinned"
|
||||||
|
|
||||||
|
sendResponse, err := s.bob.SendChatMessage(ctx, inputMessage)
|
||||||
|
s.Require().NoError(err)
|
||||||
|
s.Require().Len(sendResponse.Messages(), 1)
|
||||||
|
|
||||||
|
// bob should be able to pin the message
|
||||||
|
pinMessage := common.NewPinMessage()
|
||||||
|
pinMessage.ChatId = chat.ID
|
||||||
|
pinMessage.MessageId = inputMessage.ID
|
||||||
|
pinMessage.Pinned = true
|
||||||
|
sendResponse, err = s.bob.SendPinMessage(ctx, pinMessage)
|
||||||
|
s.Require().NoError(err)
|
||||||
|
s.Require().Len(sendResponse.PinMessages(), 1)
|
||||||
|
|
||||||
|
// alice does not fully join the community,
|
||||||
|
// so she should not be able to send the pin message
|
||||||
|
s.advertiseCommunityTo(community, s.owner, s.alice)
|
||||||
|
response, err = s.alice.SpectateCommunity(community.ID())
|
||||||
|
s.Require().NotNil(response)
|
||||||
|
s.Require().NoError(err)
|
||||||
|
failedPinMessage := common.NewPinMessage()
|
||||||
|
failedPinMessage.ChatId = chat.ID
|
||||||
|
failedPinMessage.MessageId = inputMessage.ID
|
||||||
|
failedPinMessage.Pinned = true
|
||||||
|
sendResponse, err = s.alice.SendPinMessage(ctx, failedPinMessage)
|
||||||
|
s.Require().Nil(sendResponse)
|
||||||
|
s.Require().Error(err, "can't pin message")
|
||||||
|
}
|
||||||
|
|
||||||
func (s *MessengerCommunitiesSuite) TestImportCommunity() {
|
func (s *MessengerCommunitiesSuite) TestImportCommunity() {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
|
|
|
@ -36,11 +36,16 @@ func (m *Messenger) sendPinMessage(ctx context.Context, message *common.PinMessa
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
hasPermission := community.IsPrivilegedMember(&m.identity.PublicKey)
|
hasPermission := community.IsPrivilegedMember(&m.identity.PublicKey)
|
||||||
pinMessageAllowed := community.AllowsAllMembersToPinMessage()
|
pinMessageAllowed := community.AllowsAllMembersToPinMessage()
|
||||||
|
canPost, err := community.CanPost(&m.identity.PublicKey, chat.CommunityChatID(), nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
if !pinMessageAllowed && !hasPermission {
|
if !canPost && !pinMessageAllowed && !hasPermission {
|
||||||
return nil, errors.New("member can't pin message")
|
return nil, errors.New("can't pin message")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue