github.com/levb/mattermost-server@v5.3.1+incompatible/store/storetest/file_info_store.go (about) 1 // Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package storetest 5 6 import ( 7 "fmt" 8 "testing" 9 10 "github.com/mattermost/mattermost-server/model" 11 "github.com/mattermost/mattermost-server/store" 12 ) 13 14 func TestFileInfoStore(t *testing.T, ss store.Store) { 15 t.Run("FileInfoSaveGet", func(t *testing.T) { testFileInfoSaveGet(t, ss) }) 16 t.Run("FileInfoSaveGetByPath", func(t *testing.T) { testFileInfoSaveGetByPath(t, ss) }) 17 t.Run("FileInfoGetForPost", func(t *testing.T) { testFileInfoGetForPost(t, ss) }) 18 t.Run("FileInfoGetForUser", func(t *testing.T) { testFileInfoGetForUser(t, ss) }) 19 t.Run("FileInfoAttachToPost", func(t *testing.T) { testFileInfoAttachToPost(t, ss) }) 20 t.Run("FileInfoDeleteForPost", func(t *testing.T) { testFileInfoDeleteForPost(t, ss) }) 21 t.Run("FileInfoPermanentDelete", func(t *testing.T) { testFileInfoPermanentDelete(t, ss) }) 22 t.Run("FileInfoPermanentDeleteBatch", func(t *testing.T) { testFileInfoPermanentDeleteBatch(t, ss) }) 23 t.Run("FileInfoPermanentDeleteByUser", func(t *testing.T) { testFileInfoPermanentDeleteByUser(t, ss) }) 24 } 25 26 func testFileInfoSaveGet(t *testing.T, ss store.Store) { 27 info := &model.FileInfo{ 28 CreatorId: model.NewId(), 29 Path: "file.txt", 30 } 31 32 if result := <-ss.FileInfo().Save(info); result.Err != nil { 33 t.Fatal(result.Err) 34 } else if returned := result.Data.(*model.FileInfo); len(returned.Id) == 0 { 35 t.Fatal("should've assigned an id to FileInfo") 36 } else { 37 info = returned 38 } 39 defer func() { 40 <-ss.FileInfo().PermanentDelete(info.Id) 41 }() 42 43 if result := <-ss.FileInfo().Get(info.Id); result.Err != nil { 44 t.Fatal(result.Err) 45 } else if returned := result.Data.(*model.FileInfo); returned.Id != info.Id { 46 t.Log(info) 47 t.Log(returned) 48 t.Fatal("should've returned correct FileInfo") 49 } 50 51 info2 := store.Must(ss.FileInfo().Save(&model.FileInfo{ 52 CreatorId: model.NewId(), 53 Path: "file.txt", 54 DeleteAt: 123, 55 })).(*model.FileInfo) 56 57 if result := <-ss.FileInfo().Get(info2.Id); result.Err == nil { 58 t.Fatal("shouldn't have gotten deleted file") 59 } 60 defer func() { 61 <-ss.FileInfo().PermanentDelete(info2.Id) 62 }() 63 } 64 65 func testFileInfoSaveGetByPath(t *testing.T, ss store.Store) { 66 info := &model.FileInfo{ 67 CreatorId: model.NewId(), 68 Path: fmt.Sprintf("%v/file.txt", model.NewId()), 69 } 70 71 if result := <-ss.FileInfo().Save(info); result.Err != nil { 72 t.Fatal(result.Err) 73 } else if returned := result.Data.(*model.FileInfo); len(returned.Id) == 0 { 74 t.Fatal("should've assigned an id to FileInfo") 75 } else { 76 info = returned 77 } 78 defer func() { 79 <-ss.FileInfo().PermanentDelete(info.Id) 80 }() 81 82 if result := <-ss.FileInfo().GetByPath(info.Path); result.Err != nil { 83 t.Fatal(result.Err) 84 } else if returned := result.Data.(*model.FileInfo); returned.Id != info.Id { 85 t.Log(info) 86 t.Log(returned) 87 t.Fatal("should've returned correct FileInfo") 88 } 89 90 info2 := store.Must(ss.FileInfo().Save(&model.FileInfo{ 91 CreatorId: model.NewId(), 92 Path: "file.txt", 93 DeleteAt: 123, 94 })).(*model.FileInfo) 95 96 if result := <-ss.FileInfo().GetByPath(info2.Id); result.Err == nil { 97 t.Fatal("shouldn't have gotten deleted file") 98 } 99 defer func() { 100 <-ss.FileInfo().PermanentDelete(info2.Id) 101 }() 102 } 103 104 func testFileInfoGetForPost(t *testing.T, ss store.Store) { 105 userId := model.NewId() 106 postId := model.NewId() 107 108 infos := []*model.FileInfo{ 109 { 110 PostId: postId, 111 CreatorId: userId, 112 Path: "file.txt", 113 }, 114 { 115 PostId: postId, 116 CreatorId: userId, 117 Path: "file.txt", 118 }, 119 { 120 PostId: postId, 121 CreatorId: userId, 122 Path: "file.txt", 123 DeleteAt: 123, 124 }, 125 { 126 PostId: model.NewId(), 127 CreatorId: userId, 128 Path: "file.txt", 129 }, 130 } 131 132 for i, info := range infos { 133 infos[i] = store.Must(ss.FileInfo().Save(info)).(*model.FileInfo) 134 defer func(id string) { 135 <-ss.FileInfo().PermanentDelete(id) 136 }(infos[i].Id) 137 } 138 139 if result := <-ss.FileInfo().GetForPost(postId, true, false); result.Err != nil { 140 t.Fatal(result.Err) 141 } else if returned := result.Data.([]*model.FileInfo); len(returned) != 2 { 142 t.Fatal("should've returned exactly 2 file infos") 143 } 144 145 if result := <-ss.FileInfo().GetForPost(postId, false, false); result.Err != nil { 146 t.Fatal(result.Err) 147 } else if returned := result.Data.([]*model.FileInfo); len(returned) != 2 { 148 t.Fatal("should've returned exactly 2 file infos") 149 } 150 151 if result := <-ss.FileInfo().GetForPost(postId, true, true); result.Err != nil { 152 t.Fatal(result.Err) 153 } else if returned := result.Data.([]*model.FileInfo); len(returned) != 2 { 154 t.Fatal("should've returned exactly 2 file infos") 155 } 156 } 157 158 func testFileInfoGetForUser(t *testing.T, ss store.Store) { 159 userId := model.NewId() 160 userId2 := model.NewId() 161 postId := model.NewId() 162 163 infos := []*model.FileInfo{ 164 { 165 PostId: postId, 166 CreatorId: userId, 167 Path: "file.txt", 168 }, 169 { 170 PostId: postId, 171 CreatorId: userId, 172 Path: "file.txt", 173 }, 174 { 175 PostId: postId, 176 CreatorId: userId, 177 Path: "file.txt", 178 }, 179 { 180 PostId: model.NewId(), 181 CreatorId: userId2, 182 Path: "file.txt", 183 }, 184 } 185 186 for i, info := range infos { 187 infos[i] = store.Must(ss.FileInfo().Save(info)).(*model.FileInfo) 188 defer func(id string) { 189 <-ss.FileInfo().PermanentDelete(id) 190 }(infos[i].Id) 191 } 192 193 if result := <-ss.FileInfo().GetForUser(userId); result.Err != nil { 194 t.Fatal(result.Err) 195 } else if returned := result.Data.([]*model.FileInfo); len(returned) != 3 { 196 t.Fatal("should've returned exactly 3 file infos") 197 } 198 199 if result := <-ss.FileInfo().GetForUser(userId2); result.Err != nil { 200 t.Fatal(result.Err) 201 } else if returned := result.Data.([]*model.FileInfo); len(returned) != 1 { 202 t.Fatal("should've returned exactly 1 file infos") 203 } 204 } 205 206 func testFileInfoAttachToPost(t *testing.T, ss store.Store) { 207 userId := model.NewId() 208 postId := model.NewId() 209 210 info1 := store.Must(ss.FileInfo().Save(&model.FileInfo{ 211 CreatorId: userId, 212 Path: "file.txt", 213 })).(*model.FileInfo) 214 defer func() { 215 <-ss.FileInfo().PermanentDelete(info1.Id) 216 }() 217 218 if len(info1.PostId) != 0 { 219 t.Fatal("file shouldn't have a PostId") 220 } 221 222 if result := <-ss.FileInfo().AttachToPost(info1.Id, postId); result.Err != nil { 223 t.Fatal(result.Err) 224 } else { 225 info1 = store.Must(ss.FileInfo().Get(info1.Id)).(*model.FileInfo) 226 } 227 228 if len(info1.PostId) == 0 { 229 t.Fatal("file should now have a PostId") 230 } 231 232 info2 := store.Must(ss.FileInfo().Save(&model.FileInfo{ 233 CreatorId: userId, 234 Path: "file.txt", 235 })).(*model.FileInfo) 236 defer func() { 237 <-ss.FileInfo().PermanentDelete(info2.Id) 238 }() 239 240 if result := <-ss.FileInfo().AttachToPost(info2.Id, postId); result.Err != nil { 241 t.Fatal(result.Err) 242 } else { 243 info2 = store.Must(ss.FileInfo().Get(info2.Id)).(*model.FileInfo) 244 } 245 246 if result := <-ss.FileInfo().GetForPost(postId, true, false); result.Err != nil { 247 t.Fatal(result.Err) 248 } else if infos := result.Data.([]*model.FileInfo); len(infos) != 2 { 249 t.Fatal("should've returned exactly 2 file infos") 250 } 251 } 252 253 func testFileInfoDeleteForPost(t *testing.T, ss store.Store) { 254 userId := model.NewId() 255 postId := model.NewId() 256 257 infos := []*model.FileInfo{ 258 { 259 PostId: postId, 260 CreatorId: userId, 261 Path: "file.txt", 262 }, 263 { 264 PostId: postId, 265 CreatorId: userId, 266 Path: "file.txt", 267 }, 268 { 269 PostId: postId, 270 CreatorId: userId, 271 Path: "file.txt", 272 DeleteAt: 123, 273 }, 274 { 275 PostId: model.NewId(), 276 CreatorId: userId, 277 Path: "file.txt", 278 }, 279 } 280 281 for i, info := range infos { 282 infos[i] = store.Must(ss.FileInfo().Save(info)).(*model.FileInfo) 283 defer func(id string) { 284 <-ss.FileInfo().PermanentDelete(id) 285 }(infos[i].Id) 286 } 287 288 if result := <-ss.FileInfo().DeleteForPost(postId); result.Err != nil { 289 t.Fatal(result.Err) 290 } 291 292 if infos := store.Must(ss.FileInfo().GetForPost(postId, true, false)).([]*model.FileInfo); len(infos) != 0 { 293 t.Fatal("shouldn't have returned any file infos") 294 } 295 } 296 297 func testFileInfoPermanentDelete(t *testing.T, ss store.Store) { 298 info := store.Must(ss.FileInfo().Save(&model.FileInfo{ 299 PostId: model.NewId(), 300 CreatorId: model.NewId(), 301 Path: "file.txt", 302 })).(*model.FileInfo) 303 304 if result := <-ss.FileInfo().PermanentDelete(info.Id); result.Err != nil { 305 t.Fatal(result.Err) 306 } 307 } 308 309 func testFileInfoPermanentDeleteBatch(t *testing.T, ss store.Store) { 310 postId := model.NewId() 311 312 store.Must(ss.FileInfo().Save(&model.FileInfo{ 313 PostId: postId, 314 CreatorId: model.NewId(), 315 Path: "file.txt", 316 CreateAt: 1000, 317 })) 318 319 store.Must(ss.FileInfo().Save(&model.FileInfo{ 320 PostId: postId, 321 CreatorId: model.NewId(), 322 Path: "file.txt", 323 CreateAt: 1200, 324 })) 325 326 store.Must(ss.FileInfo().Save(&model.FileInfo{ 327 PostId: postId, 328 CreatorId: model.NewId(), 329 Path: "file.txt", 330 CreateAt: 2000, 331 })) 332 333 if result := <-ss.FileInfo().GetForPost(postId, true, false); result.Err != nil { 334 t.Fatal(result.Err) 335 } else if len(result.Data.([]*model.FileInfo)) != 3 { 336 t.Fatal("Expected 3 fileInfos") 337 } 338 339 store.Must(ss.FileInfo().PermanentDeleteBatch(1500, 1000)) 340 341 if result := <-ss.FileInfo().GetForPost(postId, true, false); result.Err != nil { 342 t.Fatal(result.Err) 343 } else if len(result.Data.([]*model.FileInfo)) != 1 { 344 t.Fatal("Expected 3 fileInfos") 345 } 346 } 347 348 func testFileInfoPermanentDeleteByUser(t *testing.T, ss store.Store) { 349 userId := model.NewId() 350 postId := model.NewId() 351 352 store.Must(ss.FileInfo().Save(&model.FileInfo{ 353 PostId: postId, 354 CreatorId: userId, 355 Path: "file.txt", 356 })) 357 358 if result := <-ss.FileInfo().PermanentDeleteByUser(userId); result.Err != nil { 359 t.Fatal(result.Err) 360 } 361 }