PLT-2674 Private Group should not have Leave option when only one member remains (#2888)

Этот коммит содержится в:
enahum
2016-05-10 09:24:52 -03:00
коммит произвёл Christopher Speller
родитель 4f39b8b2e4
Коммит 45b22f312d
6 изменённых файлов: 42 добавлений и 17 удалений

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

@@ -576,6 +576,7 @@ func leave(c *Context, w http.ResponseWriter, r *http.Request) {
sc := Srv.Store.Channel().Get(id)
uc := Srv.Store.User().Get(c.Session.UserId)
ccm := Srv.Store.Channel().GetMemberCount(id)
if cresult := <-sc; cresult.Err != nil {
c.Err = cresult.Err
@@ -583,9 +584,13 @@ func leave(c *Context, w http.ResponseWriter, r *http.Request) {
} else if uresult := <-uc; uresult.Err != nil {
c.Err = cresult.Err
return
} else if ccmresult := <-ccm; ccmresult.Err != nil {
c.Err = ccmresult.Err
return
} else {
channel := cresult.Data.(*model.Channel)
user := uresult.Data.(*model.User)
membersCount := ccmresult.Data.(int64)
if !c.HasPermissionsToTeam(channel.TeamId, "leave") {
return
@@ -597,6 +602,12 @@ func leave(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
if channel.Type == model.CHANNEL_PRIVATE && membersCount == 1 {
c.Err = model.NewLocAppError("leave", "api.channel.leave.last_member.app_error", nil, "userId="+user.Id)
c.Err.StatusCode = http.StatusBadRequest
return
}
if channel.Name == model.DEFAULT_CHANNEL {
c.Err = model.NewLocAppError("leave", "api.channel.leave.default.app_error", map[string]interface{}{"Channel": model.DEFAULT_CHANNEL}, "")
c.Err.StatusCode = http.StatusBadRequest

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

@@ -485,8 +485,10 @@ func TestLeaveChannel(t *testing.T) {
Client.Must(Client.JoinChannel(channel1.Id))
// No error if you leave a channel you cannot see
Client.Must(Client.LeaveChannel(channel3.Id))
// Cannot leave a the private group if you are the only member
if _, err := Client.LeaveChannel(channel3.Id); err == nil {
t.Fatal("should have errored, cannot leave private group if only one member")
}
rchannel := Client.Must(Client.CreateDirectChannel(th.BasicUser.Id)).Data.(*model.Channel)