PLT-4378 Slack import when channel name is deleted (#4649)
This fixes the issue where the channel fails to Import from Slack if there is already a channel with the same name on Mattermost that has been deleted.
Этот коммит содержится в:
коммит произвёл
enahum
родитель
57d9d0ad1e
Коммит
f7476b2fb6
@@ -579,6 +579,31 @@ func (s SqlChannelStore) getByName(teamId string, name string, includeDeleted bo
|
||||
return storeChannel
|
||||
}
|
||||
|
||||
func (s SqlChannelStore) GetDeletedByName(teamId string, name string) StoreChannel {
|
||||
storeChannel := make(StoreChannel, 1)
|
||||
|
||||
go func() {
|
||||
result := StoreResult{}
|
||||
|
||||
channel := model.Channel{}
|
||||
|
||||
if err := s.GetReplica().SelectOne(&channel, "SELECT * FROM Channels WHERE (TeamId = :TeamId OR TeamId = '') AND Name = :Name AND DeleteAt != 0", map[string]interface{}{"TeamId": teamId, "Name": name}); err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
result.Err = model.NewLocAppError("SqlChannelStore.GetDeletedByName", "store.sql_channel.get_deleted_by_name.missing.app_error", nil, "teamId="+teamId+", "+"name="+name+", "+err.Error())
|
||||
} else {
|
||||
result.Err = model.NewLocAppError("SqlChannelStore.GetDeletedByName", "store.sql_channel.get_deleted_by_name.existing.app_error", nil, "teamId="+teamId+", "+"name="+name+", "+err.Error())
|
||||
}
|
||||
} else {
|
||||
result.Data = &channel
|
||||
}
|
||||
|
||||
storeChannel <- result
|
||||
close(storeChannel)
|
||||
}()
|
||||
|
||||
return storeChannel
|
||||
}
|
||||
|
||||
func (s SqlChannelStore) SaveMember(member *model.ChannelMember) StoreChannel {
|
||||
storeChannel := make(StoreChannel, 1)
|
||||
|
||||
|
||||
@@ -352,7 +352,8 @@ func TestChannelStoreGetByName(t *testing.T) {
|
||||
o1.Type = model.CHANNEL_OPEN
|
||||
Must(store.Channel().Save(&o1))
|
||||
|
||||
if r1 := <-store.Channel().GetByName(o1.TeamId, o1.Name); r1.Err != nil {
|
||||
r1 := <-store.Channel().GetByName(o1.TeamId, o1.Name)
|
||||
if r1.Err != nil {
|
||||
t.Fatal(r1.Err)
|
||||
} else {
|
||||
if r1.Data.(*model.Channel).ToJson() != o1.ToJson() {
|
||||
@@ -363,6 +364,36 @@ func TestChannelStoreGetByName(t *testing.T) {
|
||||
if err := (<-store.Channel().GetByName(o1.TeamId, "")).Err; err == nil {
|
||||
t.Fatal("Missing id should have failed")
|
||||
}
|
||||
|
||||
Must(store.Channel().Delete(r1.Data.(*model.Channel).Id, model.GetMillis()))
|
||||
|
||||
if err := (<-store.Channel().GetByName(o1.TeamId, "")).Err; err == nil {
|
||||
t.Fatal("Deleted channel should not be returned by GetByName()")
|
||||
}
|
||||
}
|
||||
|
||||
func TestChannelStoreGetDeletedByName(t *testing.T) {
|
||||
Setup()
|
||||
|
||||
o1 := model.Channel{}
|
||||
o1.TeamId = model.NewId()
|
||||
o1.DisplayName = "Name"
|
||||
o1.Name = "a" + model.NewId() + "b"
|
||||
o1.Type = model.CHANNEL_OPEN
|
||||
o1.DeleteAt = model.GetMillis()
|
||||
Must(store.Channel().Save(&o1))
|
||||
|
||||
if r1 := <-store.Channel().GetDeletedByName(o1.TeamId, o1.Name); r1.Err != nil {
|
||||
t.Fatal(r1.Err)
|
||||
} else {
|
||||
if r1.Data.(*model.Channel).ToJson() != o1.ToJson() {
|
||||
t.Fatal("invalid returned channel")
|
||||
}
|
||||
}
|
||||
|
||||
if err := (<-store.Channel().GetDeletedByName(o1.TeamId, "")).Err; err == nil {
|
||||
t.Fatal("Missing id should have failed")
|
||||
}
|
||||
}
|
||||
|
||||
func TestChannelMemberStore(t *testing.T) {
|
||||
|
||||
@@ -93,6 +93,7 @@ type ChannelStore interface {
|
||||
PermanentDeleteByTeam(teamId string) StoreChannel
|
||||
GetByName(team_id string, name string) StoreChannel
|
||||
GetByNameIncludeDeleted(team_id string, name string) StoreChannel
|
||||
GetDeletedByName(team_id string, name string) StoreChannel
|
||||
GetChannels(teamId string, userId string) StoreChannel
|
||||
GetMoreChannels(teamId string, userId string, offset int, limit int) StoreChannel
|
||||
GetChannelCounts(teamId string, userId string) StoreChannel
|
||||
|
||||
Ссылка в новой задаче
Block a user