* Initial implementation of a CopyFileInfos function that creates new FileInfo objects copied from provided FileIds with the provided user as the creator and not linked to a post yet. This can subsequently be used to copy existing attachments from another post to attach to a new post without having to re-upload the actual files

* added a unit test for the CopyFileInfos function

* resolving pull request suggestions
Этот коммит содержится в:
dmitrysamuylovpharo
2018-08-02 10:37:31 -04:00
коммит произвёл Harrison Healey
родитель b728b16f90
Коммит 7a731d2bd1
6 изменённых файлов: 127 добавлений и 0 удалений

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

@@ -604,3 +604,33 @@ func (a *App) GetFileInfo(fileId string) (*model.FileInfo, *model.AppError) {
return result.Data.(*model.FileInfo), nil
}
}
func (a *App) CopyFileInfos(userId string, fileIds []string) ([]string, *model.AppError) {
newFileIds := []string{}
now := model.GetMillis()
for _, fileId := range fileIds {
fileInfo := &model.FileInfo{}
if result := <-a.Srv.Store.FileInfo().Get(fileId); result.Err != nil {
return nil, result.Err
} else {
fileInfo = result.Data.(*model.FileInfo)
}
fileInfo.Id = model.NewId()
fileInfo.CreatorId = userId
fileInfo.CreateAt = now
fileInfo.UpdateAt = now
fileInfo.PostId = ""
if result := <-a.Srv.Store.FileInfo().Save(fileInfo); result.Err != nil {
return newFileIds, result.Err
}
newFileIds = append(newFileIds, fileInfo.Id)
}
return newFileIds, nil
}

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

@@ -161,3 +161,34 @@ func TestMigrateFilenamesToFileInfos(t *testing.T) {
infos = th.App.MigrateFilenamesToFileInfos(rpost)
assert.Equal(t, 1, len(infos))
}
func TestCopyFileInfos(t *testing.T) {
th := Setup().InitBasic()
defer th.TearDown()
teamId := model.NewId()
channelId := model.NewId()
userId := model.NewId()
filename := "test"
data := []byte("abcd")
info1, err := th.App.DoUploadFile(time.Date(2007, 2, 4, 1, 2, 3, 4, time.Local), teamId, channelId, userId, filename, data)
require.Nil(t, err)
defer func() {
<-th.App.Srv.Store.FileInfo().PermanentDelete(info1.Id)
th.App.RemoveFile(info1.Path)
}()
infoIds, err := th.App.CopyFileInfos(userId, []string{info1.Id})
require.Nil(t, err)
info2, err := th.App.GetFileInfo(infoIds[0])
require.Nil(t, err)
defer func() {
<-th.App.Srv.Store.FileInfo().PermanentDelete(info2.Id)
th.App.RemoveFile(info2.Path)
}()
assert.NotEqual(t, info1.Id, info2.Id, "should not be equal")
assert.Equal(t, info2.PostId, "", "should be empty string")
}

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

@@ -275,6 +275,10 @@ func (api *PluginAPI) UpdatePost(post *model.Post) (*model.Post, *model.AppError
return api.app.UpdatePost(post, false)
}
func (api *PluginAPI) CopyFileInfos(userId string, fileIds []string) ([]string, *model.AppError) {
return api.app.CopyFileInfos(userId, fileIds)
}
func (api *PluginAPI) KVSet(key string, value []byte) *model.AppError {
return api.app.SetPluginKey(api.id, key, value)
}