github.com/coincircle/mattermost-server@v4.8.1-0.20180321182714-9d701c704416+incompatible/store/storetest/post_store.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package storetest 5 6 import ( 7 "fmt" 8 "sort" 9 "strings" 10 "testing" 11 "time" 12 13 "github.com/mattermost/mattermost-server/model" 14 "github.com/mattermost/mattermost-server/store" 15 "github.com/mattermost/mattermost-server/utils" 16 "github.com/stretchr/testify/assert" 17 ) 18 19 func TestPostStore(t *testing.T, ss store.Store) { 20 t.Run("Save", func(t *testing.T) { testPostStoreSave(t, ss) }) 21 t.Run("Get", func(t *testing.T) { testPostStoreGet(t, ss) }) 22 t.Run("GetSingle", func(t *testing.T) { testPostStoreGetSingle(t, ss) }) 23 t.Run("GetEtagCache", func(t *testing.T) { testGetEtagCache(t, ss) }) 24 t.Run("Update", func(t *testing.T) { testPostStoreUpdate(t, ss) }) 25 t.Run("Delete", func(t *testing.T) { testPostStoreDelete(t, ss) }) 26 t.Run("Delete1Level", func(t *testing.T) { testPostStoreDelete1Level(t, ss) }) 27 t.Run("Delete2Level", func(t *testing.T) { testPostStoreDelete2Level(t, ss) }) 28 t.Run("PermDelete1Level", func(t *testing.T) { testPostStorePermDelete1Level(t, ss) }) 29 t.Run("PermDelete1Level2", func(t *testing.T) { testPostStorePermDelete1Level2(t, ss) }) 30 t.Run("GetWithChildren", func(t *testing.T) { testPostStoreGetWithChildren(t, ss) }) 31 t.Run("GetPostsWithDetails", func(t *testing.T) { testPostStoreGetPostsWithDetails(t, ss) }) 32 t.Run("GetPostsBeforeAfter", func(t *testing.T) { testPostStoreGetPostsBeforeAfter(t, ss) }) 33 t.Run("GetPostsSince", func(t *testing.T) { testPostStoreGetPostsSince(t, ss) }) 34 t.Run("Search", func(t *testing.T) { testPostStoreSearch(t, ss) }) 35 t.Run("UserCountsWithPostsByDay", func(t *testing.T) { testUserCountsWithPostsByDay(t, ss) }) 36 t.Run("PostCountsByDay", func(t *testing.T) { testPostCountsByDay(t, ss) }) 37 t.Run("GetFlaggedPostsForTeam", func(t *testing.T) { testPostStoreGetFlaggedPostsForTeam(t, ss) }) 38 t.Run("GetFlaggedPosts", func(t *testing.T) { testPostStoreGetFlaggedPosts(t, ss) }) 39 t.Run("GetFlaggedPostsForChannel", func(t *testing.T) { testPostStoreGetFlaggedPostsForChannel(t, ss) }) 40 t.Run("GetPostsCreatedAt", func(t *testing.T) { testPostStoreGetPostsCreatedAt(t, ss) }) 41 t.Run("Overwrite", func(t *testing.T) { testPostStoreOverwrite(t, ss) }) 42 t.Run("GetPostsByIds", func(t *testing.T) { testPostStoreGetPostsByIds(t, ss) }) 43 t.Run("GetPostsBatchForIndexing", func(t *testing.T) { testPostStoreGetPostsBatchForIndexing(t, ss) }) 44 t.Run("PermanentDeleteBatch", func(t *testing.T) { testPostStorePermanentDeleteBatch(t, ss) }) 45 t.Run("GetOldest", func(t *testing.T) { testPostStoreGetOldest(t, ss) }) 46 } 47 48 func testPostStoreSave(t *testing.T, ss store.Store) { 49 o1 := model.Post{} 50 o1.ChannelId = model.NewId() 51 o1.UserId = model.NewId() 52 o1.Message = "zz" + model.NewId() + "b" 53 54 if err := (<-ss.Post().Save(&o1)).Err; err != nil { 55 t.Fatal("couldn't save item", err) 56 } 57 58 if err := (<-ss.Post().Save(&o1)).Err; err == nil { 59 t.Fatal("shouldn't be able to update from save") 60 } 61 } 62 63 func testPostStoreGet(t *testing.T, ss store.Store) { 64 o1 := &model.Post{} 65 o1.ChannelId = model.NewId() 66 o1.UserId = model.NewId() 67 o1.Message = "zz" + model.NewId() + "b" 68 69 etag1 := (<-ss.Post().GetEtag(o1.ChannelId, false)).Data.(string) 70 if strings.Index(etag1, model.CurrentVersion+".") != 0 { 71 t.Fatal("Invalid Etag") 72 } 73 74 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 75 76 etag2 := (<-ss.Post().GetEtag(o1.ChannelId, false)).Data.(string) 77 if strings.Index(etag2, fmt.Sprintf("%v.%v", model.CurrentVersion, o1.UpdateAt)) != 0 { 78 t.Fatal("Invalid Etag") 79 } 80 81 if r1 := <-ss.Post().Get(o1.Id); r1.Err != nil { 82 t.Fatal(r1.Err) 83 } else { 84 if r1.Data.(*model.PostList).Posts[o1.Id].CreateAt != o1.CreateAt { 85 t.Fatal("invalid returned post") 86 } 87 } 88 89 if err := (<-ss.Post().Get("123")).Err; err == nil { 90 t.Fatal("Missing id should have failed") 91 } 92 93 if err := (<-ss.Post().Get("")).Err; err == nil { 94 t.Fatal("should fail for blank post ids") 95 } 96 } 97 98 func testPostStoreGetSingle(t *testing.T, ss store.Store) { 99 o1 := &model.Post{} 100 o1.ChannelId = model.NewId() 101 o1.UserId = model.NewId() 102 o1.Message = "zz" + model.NewId() + "b" 103 104 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 105 106 if r1 := <-ss.Post().GetSingle(o1.Id); r1.Err != nil { 107 t.Fatal(r1.Err) 108 } else { 109 if r1.Data.(*model.Post).CreateAt != o1.CreateAt { 110 t.Fatal("invalid returned post") 111 } 112 } 113 114 if err := (<-ss.Post().GetSingle("123")).Err; err == nil { 115 t.Fatal("Missing id should have failed") 116 } 117 } 118 119 func testGetEtagCache(t *testing.T, ss store.Store) { 120 o1 := &model.Post{} 121 o1.ChannelId = model.NewId() 122 o1.UserId = model.NewId() 123 o1.Message = "zz" + model.NewId() + "b" 124 125 etag1 := (<-ss.Post().GetEtag(o1.ChannelId, true)).Data.(string) 126 if strings.Index(etag1, model.CurrentVersion+".") != 0 { 127 t.Fatal("Invalid Etag") 128 } 129 130 // This one should come from the cache 131 etag2 := (<-ss.Post().GetEtag(o1.ChannelId, true)).Data.(string) 132 if strings.Index(etag2, model.CurrentVersion+".") != 0 { 133 t.Fatal("Invalid Etag") 134 } 135 136 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 137 138 // We have not invalidated the cache so this should be the same as above 139 etag3 := (<-ss.Post().GetEtag(o1.ChannelId, true)).Data.(string) 140 if strings.Index(etag3, etag2) != 0 { 141 t.Fatal("Invalid Etag") 142 } 143 144 ss.Post().InvalidateLastPostTimeCache(o1.ChannelId) 145 146 // Invalidated cache so we should get a good result 147 etag4 := (<-ss.Post().GetEtag(o1.ChannelId, true)).Data.(string) 148 if strings.Index(etag4, fmt.Sprintf("%v.%v", model.CurrentVersion, o1.UpdateAt)) != 0 { 149 t.Fatal("Invalid Etag") 150 } 151 } 152 153 func testPostStoreUpdate(t *testing.T, ss store.Store) { 154 o1 := &model.Post{} 155 o1.ChannelId = model.NewId() 156 o1.UserId = model.NewId() 157 o1.Message = "zz" + model.NewId() + "AAAAAAAAAAA" 158 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 159 160 o2 := &model.Post{} 161 o2.ChannelId = o1.ChannelId 162 o2.UserId = model.NewId() 163 o2.Message = "zz" + model.NewId() + "CCCCCCCCC" 164 o2.ParentId = o1.Id 165 o2.RootId = o1.Id 166 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 167 168 o3 := &model.Post{} 169 o3.ChannelId = o1.ChannelId 170 o3.UserId = model.NewId() 171 o3.Message = "zz" + model.NewId() + "QQQQQQQQQQ" 172 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) 173 174 ro1 := (<-ss.Post().Get(o1.Id)).Data.(*model.PostList).Posts[o1.Id] 175 ro2 := (<-ss.Post().Get(o1.Id)).Data.(*model.PostList).Posts[o2.Id] 176 ro3 := (<-ss.Post().Get(o3.Id)).Data.(*model.PostList).Posts[o3.Id] 177 178 if ro1.Message != o1.Message { 179 t.Fatal("Failed to save/get") 180 } 181 182 o1a := &model.Post{} 183 *o1a = *ro1 184 o1a.Message = ro1.Message + "BBBBBBBBBB" 185 if result := <-ss.Post().Update(o1a, ro1); result.Err != nil { 186 t.Fatal(result.Err) 187 } 188 189 ro1a := (<-ss.Post().Get(o1.Id)).Data.(*model.PostList).Posts[o1.Id] 190 191 if ro1a.Message != o1a.Message { 192 t.Fatal("Failed to update/get") 193 } 194 195 o2a := &model.Post{} 196 *o2a = *ro2 197 o2a.Message = ro2.Message + "DDDDDDD" 198 if result := <-ss.Post().Update(o2a, ro2); result.Err != nil { 199 t.Fatal(result.Err) 200 } 201 202 ro2a := (<-ss.Post().Get(o1.Id)).Data.(*model.PostList).Posts[o2.Id] 203 204 if ro2a.Message != o2a.Message { 205 t.Fatal("Failed to update/get") 206 } 207 208 o3a := &model.Post{} 209 *o3a = *ro3 210 o3a.Message = ro3.Message + "WWWWWWW" 211 if result := <-ss.Post().Update(o3a, ro3); result.Err != nil { 212 t.Fatal(result.Err) 213 } 214 215 ro3a := (<-ss.Post().Get(o3.Id)).Data.(*model.PostList).Posts[o3.Id] 216 217 if ro3a.Message != o3a.Message && ro3a.Hashtags != o3a.Hashtags { 218 t.Fatal("Failed to update/get") 219 } 220 221 o4 := store.Must(ss.Post().Save(&model.Post{ 222 ChannelId: model.NewId(), 223 UserId: model.NewId(), 224 Message: model.NewId(), 225 Filenames: []string{"test"}, 226 })).(*model.Post) 227 228 ro4 := (<-ss.Post().Get(o4.Id)).Data.(*model.PostList).Posts[o4.Id] 229 230 o4a := &model.Post{} 231 *o4a = *ro4 232 o4a.Filenames = []string{} 233 o4a.FileIds = []string{model.NewId()} 234 if result := <-ss.Post().Update(o4a, ro4); result.Err != nil { 235 t.Fatal(result.Err) 236 } 237 238 if ro4a := store.Must(ss.Post().Get(o4.Id)).(*model.PostList).Posts[o4.Id]; len(ro4a.Filenames) != 0 { 239 t.Fatal("Failed to clear Filenames") 240 } else if len(ro4a.FileIds) != 1 { 241 t.Fatal("Failed to set FileIds") 242 } 243 } 244 245 func testPostStoreDelete(t *testing.T, ss store.Store) { 246 o1 := &model.Post{} 247 o1.ChannelId = model.NewId() 248 o1.UserId = model.NewId() 249 o1.Message = "zz" + model.NewId() + "b" 250 251 etag1 := (<-ss.Post().GetEtag(o1.ChannelId, false)).Data.(string) 252 if strings.Index(etag1, model.CurrentVersion+".") != 0 { 253 t.Fatal("Invalid Etag") 254 } 255 256 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 257 258 if r1 := <-ss.Post().Get(o1.Id); r1.Err != nil { 259 t.Fatal(r1.Err) 260 } else { 261 if r1.Data.(*model.PostList).Posts[o1.Id].CreateAt != o1.CreateAt { 262 t.Fatal("invalid returned post") 263 } 264 } 265 266 if r2 := <-ss.Post().Delete(o1.Id, model.GetMillis()); r2.Err != nil { 267 t.Fatal(r2.Err) 268 } 269 270 if r3 := (<-ss.Post().Get(o1.Id)); r3.Err == nil { 271 t.Log(r3.Data) 272 t.Fatal("Missing id should have failed") 273 } 274 275 etag2 := (<-ss.Post().GetEtag(o1.ChannelId, false)).Data.(string) 276 if strings.Index(etag2, model.CurrentVersion+".") != 0 { 277 t.Fatal("Invalid Etag") 278 } 279 } 280 281 func testPostStoreDelete1Level(t *testing.T, ss store.Store) { 282 o1 := &model.Post{} 283 o1.ChannelId = model.NewId() 284 o1.UserId = model.NewId() 285 o1.Message = "zz" + model.NewId() + "b" 286 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 287 288 o2 := &model.Post{} 289 o2.ChannelId = o1.ChannelId 290 o2.UserId = model.NewId() 291 o2.Message = "zz" + model.NewId() + "b" 292 o2.ParentId = o1.Id 293 o2.RootId = o1.Id 294 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 295 296 if r2 := <-ss.Post().Delete(o1.Id, model.GetMillis()); r2.Err != nil { 297 t.Fatal(r2.Err) 298 } 299 300 if r3 := (<-ss.Post().Get(o1.Id)); r3.Err == nil { 301 t.Fatal("Deleted id should have failed") 302 } 303 304 if r4 := (<-ss.Post().Get(o2.Id)); r4.Err == nil { 305 t.Fatal("Deleted id should have failed") 306 } 307 } 308 309 func testPostStoreDelete2Level(t *testing.T, ss store.Store) { 310 o1 := &model.Post{} 311 o1.ChannelId = model.NewId() 312 o1.UserId = model.NewId() 313 o1.Message = "zz" + model.NewId() + "b" 314 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 315 316 o2 := &model.Post{} 317 o2.ChannelId = o1.ChannelId 318 o2.UserId = model.NewId() 319 o2.Message = "zz" + model.NewId() + "b" 320 o2.ParentId = o1.Id 321 o2.RootId = o1.Id 322 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 323 324 o3 := &model.Post{} 325 o3.ChannelId = o1.ChannelId 326 o3.UserId = model.NewId() 327 o3.Message = "zz" + model.NewId() + "b" 328 o3.ParentId = o2.Id 329 o3.RootId = o1.Id 330 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) 331 332 o4 := &model.Post{} 333 o4.ChannelId = model.NewId() 334 o4.UserId = model.NewId() 335 o4.Message = "zz" + model.NewId() + "b" 336 o4 = (<-ss.Post().Save(o4)).Data.(*model.Post) 337 338 if r2 := <-ss.Post().Delete(o1.Id, model.GetMillis()); r2.Err != nil { 339 t.Fatal(r2.Err) 340 } 341 342 if r3 := (<-ss.Post().Get(o1.Id)); r3.Err == nil { 343 t.Fatal("Deleted id should have failed") 344 } 345 346 if r4 := (<-ss.Post().Get(o2.Id)); r4.Err == nil { 347 t.Fatal("Deleted id should have failed") 348 } 349 350 if r5 := (<-ss.Post().Get(o3.Id)); r5.Err == nil { 351 t.Fatal("Deleted id should have failed") 352 } 353 354 if r6 := <-ss.Post().Get(o4.Id); r6.Err != nil { 355 t.Fatal(r6.Err) 356 } 357 } 358 359 func testPostStorePermDelete1Level(t *testing.T, ss store.Store) { 360 o1 := &model.Post{} 361 o1.ChannelId = model.NewId() 362 o1.UserId = model.NewId() 363 o1.Message = "zz" + model.NewId() + "b" 364 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 365 366 o2 := &model.Post{} 367 o2.ChannelId = o1.ChannelId 368 o2.UserId = model.NewId() 369 o2.Message = "zz" + model.NewId() + "b" 370 o2.ParentId = o1.Id 371 o2.RootId = o1.Id 372 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 373 374 o3 := &model.Post{} 375 o3.ChannelId = model.NewId() 376 o3.UserId = model.NewId() 377 o3.Message = "zz" + model.NewId() + "b" 378 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) 379 380 if r2 := <-ss.Post().PermanentDeleteByUser(o2.UserId); r2.Err != nil { 381 t.Fatal(r2.Err) 382 } 383 384 if r3 := (<-ss.Post().Get(o1.Id)); r3.Err != nil { 385 t.Fatal("Deleted id shouldn't have failed") 386 } 387 388 if r4 := (<-ss.Post().Get(o2.Id)); r4.Err == nil { 389 t.Fatal("Deleted id should have failed") 390 } 391 392 if r2 := <-ss.Post().PermanentDeleteByChannel(o3.ChannelId); r2.Err != nil { 393 t.Fatal(r2.Err) 394 } 395 396 if r3 := (<-ss.Post().Get(o3.Id)); r3.Err == nil { 397 t.Fatal("Deleted id should have failed") 398 } 399 } 400 401 func testPostStorePermDelete1Level2(t *testing.T, ss store.Store) { 402 o1 := &model.Post{} 403 o1.ChannelId = model.NewId() 404 o1.UserId = model.NewId() 405 o1.Message = "zz" + model.NewId() + "b" 406 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 407 408 o2 := &model.Post{} 409 o2.ChannelId = o1.ChannelId 410 o2.UserId = model.NewId() 411 o2.Message = "zz" + model.NewId() + "b" 412 o2.ParentId = o1.Id 413 o2.RootId = o1.Id 414 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 415 416 o3 := &model.Post{} 417 o3.ChannelId = model.NewId() 418 o3.UserId = model.NewId() 419 o3.Message = "zz" + model.NewId() + "b" 420 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) 421 422 if r2 := <-ss.Post().PermanentDeleteByUser(o1.UserId); r2.Err != nil { 423 t.Fatal(r2.Err) 424 } 425 426 if r3 := (<-ss.Post().Get(o1.Id)); r3.Err == nil { 427 t.Fatal("Deleted id should have failed") 428 } 429 430 if r4 := (<-ss.Post().Get(o2.Id)); r4.Err == nil { 431 t.Fatal("Deleted id should have failed") 432 } 433 434 if r5 := (<-ss.Post().Get(o3.Id)); r5.Err != nil { 435 t.Fatal("Deleted id shouldn't have failed") 436 } 437 } 438 439 func testPostStoreGetWithChildren(t *testing.T, ss store.Store) { 440 o1 := &model.Post{} 441 o1.ChannelId = model.NewId() 442 o1.UserId = model.NewId() 443 o1.Message = "zz" + model.NewId() + "b" 444 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 445 446 o2 := &model.Post{} 447 o2.ChannelId = o1.ChannelId 448 o2.UserId = model.NewId() 449 o2.Message = "zz" + model.NewId() + "b" 450 o2.ParentId = o1.Id 451 o2.RootId = o1.Id 452 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 453 454 o3 := &model.Post{} 455 o3.ChannelId = o1.ChannelId 456 o3.UserId = model.NewId() 457 o3.Message = "zz" + model.NewId() + "b" 458 o3.ParentId = o2.Id 459 o3.RootId = o1.Id 460 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) 461 462 if r1 := <-ss.Post().Get(o1.Id); r1.Err != nil { 463 t.Fatal(r1.Err) 464 } else { 465 pl := r1.Data.(*model.PostList) 466 if len(pl.Posts) != 3 { 467 t.Fatal("invalid returned post") 468 } 469 } 470 471 store.Must(ss.Post().Delete(o3.Id, model.GetMillis())) 472 473 if r2 := <-ss.Post().Get(o1.Id); r2.Err != nil { 474 t.Fatal(r2.Err) 475 } else { 476 pl := r2.Data.(*model.PostList) 477 if len(pl.Posts) != 2 { 478 t.Fatal("invalid returned post") 479 } 480 } 481 482 store.Must(ss.Post().Delete(o2.Id, model.GetMillis())) 483 484 if r3 := <-ss.Post().Get(o1.Id); r3.Err != nil { 485 t.Fatal(r3.Err) 486 } else { 487 pl := r3.Data.(*model.PostList) 488 if len(pl.Posts) != 1 { 489 t.Fatal("invalid returned post") 490 } 491 } 492 } 493 494 func testPostStoreGetPostsWithDetails(t *testing.T, ss store.Store) { 495 assertPosts := func(expected []*model.Post, actual map[string]*model.Post) { 496 expectedIds := make([]string, 0, len(expected)) 497 expectedMessages := make([]string, 0, len(expected)) 498 for _, post := range expected { 499 expectedIds = append(expectedIds, post.Id) 500 expectedMessages = append(expectedMessages, post.Message) 501 } 502 sort.Strings(expectedIds) 503 sort.Strings(expectedMessages) 504 505 actualIds := make([]string, 0, len(actual)) 506 actualMessages := make([]string, 0, len(actual)) 507 for _, post := range actual { 508 actualIds = append(actualIds, post.Id) 509 actualMessages = append(actualMessages, post.Message) 510 } 511 sort.Strings(actualIds) 512 sort.Strings(actualMessages) 513 514 if assert.Equal(t, expectedIds, actualIds) { 515 assert.Equal(t, expectedMessages, actualMessages) 516 } 517 } 518 519 root1 := &model.Post{} 520 root1.ChannelId = model.NewId() 521 root1.UserId = model.NewId() 522 root1.Message = "zz" + model.NewId() + "b" 523 root1 = (<-ss.Post().Save(root1)).Data.(*model.Post) 524 time.Sleep(2 * time.Millisecond) 525 526 root1Reply1 := &model.Post{} 527 root1Reply1.ChannelId = root1.ChannelId 528 root1Reply1.UserId = model.NewId() 529 root1Reply1.Message = "zz" + model.NewId() + "b" 530 root1Reply1.ParentId = root1.Id 531 root1Reply1.RootId = root1.Id 532 root1Reply1 = (<-ss.Post().Save(root1Reply1)).Data.(*model.Post) 533 time.Sleep(2 * time.Millisecond) 534 535 root1Reply2 := &model.Post{} 536 root1Reply2.ChannelId = root1.ChannelId 537 root1Reply2.UserId = model.NewId() 538 root1Reply2.Message = "zz" + model.NewId() + "b" 539 root1Reply2.ParentId = root1.Id 540 root1Reply2.RootId = root1.Id 541 root1Reply2 = (<-ss.Post().Save(root1Reply2)).Data.(*model.Post) 542 time.Sleep(2 * time.Millisecond) 543 544 root1Reply3 := &model.Post{} 545 root1Reply3.ChannelId = root1.ChannelId 546 root1Reply3.UserId = model.NewId() 547 root1Reply3.Message = "zz" + model.NewId() + "b" 548 root1Reply3.ParentId = root1.Id 549 root1Reply3.RootId = root1.Id 550 root1Reply3 = (<-ss.Post().Save(root1Reply3)).Data.(*model.Post) 551 time.Sleep(2 * time.Millisecond) 552 553 root2 := &model.Post{} 554 root2.ChannelId = root1.ChannelId 555 root2.UserId = model.NewId() 556 root2.Message = "zz" + model.NewId() + "b" 557 root2 = (<-ss.Post().Save(root2)).Data.(*model.Post) 558 time.Sleep(2 * time.Millisecond) 559 560 root2Reply1 := &model.Post{} 561 root2Reply1.ChannelId = root1.ChannelId 562 root2Reply1.UserId = model.NewId() 563 root2Reply1.Message = "zz" + model.NewId() + "b" 564 root2Reply1.ParentId = root2.Id 565 root2Reply1.RootId = root2.Id 566 root2Reply1 = (<-ss.Post().Save(root2Reply1)).Data.(*model.Post) 567 568 r1 := (<-ss.Post().GetPosts(root1.ChannelId, 0, 4, false)).Data.(*model.PostList) 569 570 expectedOrder := []string{ 571 root2Reply1.Id, 572 root2.Id, 573 root1Reply3.Id, 574 root1Reply2.Id, 575 } 576 577 expectedPosts := []*model.Post{ 578 root1, 579 root1Reply1, 580 root1Reply2, 581 root1Reply3, 582 root2, 583 root2Reply1, 584 } 585 586 assert.Equal(t, expectedOrder, r1.Order) 587 assertPosts(expectedPosts, r1.Posts) 588 589 r2 := (<-ss.Post().GetPosts(root1.ChannelId, 0, 4, true)).Data.(*model.PostList) 590 assert.Equal(t, expectedOrder, r2.Order) 591 assertPosts(expectedPosts, r2.Posts) 592 593 // Run once to fill cache 594 <-ss.Post().GetPosts(root1.ChannelId, 0, 30, true) 595 expectedOrder = []string{ 596 root2Reply1.Id, 597 root2.Id, 598 root1Reply3.Id, 599 root1Reply2.Id, 600 root1Reply1.Id, 601 root1.Id, 602 } 603 604 root3 := &model.Post{} 605 root3.ChannelId = root1.ChannelId 606 root3.UserId = model.NewId() 607 root3.Message = "zz" + model.NewId() + "b" 608 root3 = (<-ss.Post().Save(root3)).Data.(*model.Post) 609 610 // Response should be the same despite the new post since we hit the cache 611 r3 := (<-ss.Post().GetPosts(root1.ChannelId, 0, 30, true)).Data.(*model.PostList) 612 assert.Equal(t, expectedOrder, r3.Order) 613 assertPosts(expectedPosts, r3.Posts) 614 615 ss.Post().InvalidateLastPostTimeCache(root1.ChannelId) 616 617 // Cache was invalidated, we should get all the posts 618 r4 := (<-ss.Post().GetPosts(root1.ChannelId, 0, 30, true)).Data.(*model.PostList) 619 expectedOrder = []string{ 620 root3.Id, 621 root2Reply1.Id, 622 root2.Id, 623 root1Reply3.Id, 624 root1Reply2.Id, 625 root1Reply1.Id, 626 root1.Id, 627 } 628 expectedPosts = []*model.Post{ 629 root1, 630 root1Reply1, 631 root1Reply2, 632 root1Reply3, 633 root2, 634 root2Reply1, 635 root3, 636 } 637 638 assert.Equal(t, expectedOrder, r4.Order) 639 assertPosts(expectedPosts, r4.Posts) 640 641 // Replies past the window should be included if the root post itself is in the window 642 root3Reply1 := &model.Post{} 643 root3Reply1.ChannelId = root1.ChannelId 644 root3Reply1.UserId = model.NewId() 645 root3Reply1.Message = "zz" + model.NewId() + "b" 646 root3Reply1.ParentId = root3.Id 647 root3Reply1.RootId = root3.Id 648 root3Reply1 = (<-ss.Post().Save(root3Reply1)).Data.(*model.Post) 649 650 r5 := (<-ss.Post().GetPosts(root1.ChannelId, 1, 5, false)).Data.(*model.PostList) 651 expectedOrder = []string{ 652 root3.Id, 653 root2Reply1.Id, 654 root2.Id, 655 root1Reply3.Id, 656 root1Reply2.Id, 657 } 658 expectedPosts = []*model.Post{ 659 root1, 660 root1Reply1, 661 root1Reply2, 662 root1Reply3, 663 root2, 664 root2Reply1, 665 root3, 666 root3Reply1, 667 } 668 669 assert.Equal(t, expectedOrder, r5.Order) 670 assertPosts(expectedPosts, r5.Posts) 671 } 672 673 func testPostStoreGetPostsBeforeAfter(t *testing.T, ss store.Store) { 674 o0 := &model.Post{} 675 o0.ChannelId = model.NewId() 676 o0.UserId = model.NewId() 677 o0.Message = "zz" + model.NewId() + "b" 678 o0 = (<-ss.Post().Save(o0)).Data.(*model.Post) 679 time.Sleep(2 * time.Millisecond) 680 681 o1 := &model.Post{} 682 o1.ChannelId = model.NewId() 683 o1.UserId = model.NewId() 684 o1.Message = "zz" + model.NewId() + "b" 685 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 686 time.Sleep(2 * time.Millisecond) 687 688 o2 := &model.Post{} 689 o2.ChannelId = o1.ChannelId 690 o2.UserId = model.NewId() 691 o2.Message = "zz" + model.NewId() + "b" 692 o2.ParentId = o1.Id 693 o2.RootId = o1.Id 694 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 695 time.Sleep(2 * time.Millisecond) 696 697 o2a := &model.Post{} 698 o2a.ChannelId = o1.ChannelId 699 o2a.UserId = model.NewId() 700 o2a.Message = "zz" + model.NewId() + "b" 701 o2a.ParentId = o1.Id 702 o2a.RootId = o1.Id 703 o2a = (<-ss.Post().Save(o2a)).Data.(*model.Post) 704 time.Sleep(2 * time.Millisecond) 705 706 o3 := &model.Post{} 707 o3.ChannelId = o1.ChannelId 708 o3.UserId = model.NewId() 709 o3.Message = "zz" + model.NewId() + "b" 710 o3.ParentId = o1.Id 711 o3.RootId = o1.Id 712 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) 713 time.Sleep(2 * time.Millisecond) 714 715 o4 := &model.Post{} 716 o4.ChannelId = o1.ChannelId 717 o4.UserId = model.NewId() 718 o4.Message = "zz" + model.NewId() + "b" 719 o4 = (<-ss.Post().Save(o4)).Data.(*model.Post) 720 time.Sleep(2 * time.Millisecond) 721 722 o5 := &model.Post{} 723 o5.ChannelId = o1.ChannelId 724 o5.UserId = model.NewId() 725 o5.Message = "zz" + model.NewId() + "b" 726 o5.ParentId = o4.Id 727 o5.RootId = o4.Id 728 o5 = (<-ss.Post().Save(o5)).Data.(*model.Post) 729 730 r1 := (<-ss.Post().GetPostsBefore(o1.ChannelId, o1.Id, 4, 0)).Data.(*model.PostList) 731 732 if len(r1.Posts) != 0 { 733 t.Fatal("Wrong size") 734 } 735 736 r2 := (<-ss.Post().GetPostsAfter(o1.ChannelId, o1.Id, 4, 0)).Data.(*model.PostList) 737 738 if r2.Order[0] != o4.Id { 739 t.Fatal("invalid order") 740 } 741 742 if r2.Order[1] != o3.Id { 743 t.Fatal("invalid order") 744 } 745 746 if r2.Order[2] != o2a.Id { 747 t.Fatal("invalid order") 748 } 749 750 if r2.Order[3] != o2.Id { 751 t.Fatal("invalid order") 752 } 753 754 if len(r2.Posts) != 5 { 755 t.Fatal("wrong size") 756 } 757 758 r3 := (<-ss.Post().GetPostsBefore(o3.ChannelId, o3.Id, 2, 0)).Data.(*model.PostList) 759 760 if r3.Order[0] != o2a.Id { 761 t.Fatal("invalid order") 762 } 763 764 if r3.Order[1] != o2.Id { 765 t.Fatal("invalid order") 766 } 767 768 if len(r3.Posts) != 3 { 769 t.Fatal("wrong size") 770 } 771 772 if r3.Posts[o1.Id].Message != o1.Message { 773 t.Fatal("Missing parent") 774 } 775 } 776 777 func testPostStoreGetPostsSince(t *testing.T, ss store.Store) { 778 o0 := &model.Post{} 779 o0.ChannelId = model.NewId() 780 o0.UserId = model.NewId() 781 o0.Message = "zz" + model.NewId() + "b" 782 o0 = (<-ss.Post().Save(o0)).Data.(*model.Post) 783 time.Sleep(2 * time.Millisecond) 784 785 o1 := &model.Post{} 786 o1.ChannelId = model.NewId() 787 o1.UserId = model.NewId() 788 o1.Message = "zz" + model.NewId() + "b" 789 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 790 time.Sleep(2 * time.Millisecond) 791 792 o2 := &model.Post{} 793 o2.ChannelId = o1.ChannelId 794 o2.UserId = model.NewId() 795 o2.Message = "zz" + model.NewId() + "b" 796 o2.ParentId = o1.Id 797 o2.RootId = o1.Id 798 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 799 time.Sleep(2 * time.Millisecond) 800 801 o2a := &model.Post{} 802 o2a.ChannelId = o1.ChannelId 803 o2a.UserId = model.NewId() 804 o2a.Message = "zz" + model.NewId() + "b" 805 o2a.ParentId = o1.Id 806 o2a.RootId = o1.Id 807 o2a = (<-ss.Post().Save(o2a)).Data.(*model.Post) 808 time.Sleep(2 * time.Millisecond) 809 810 o3 := &model.Post{} 811 o3.ChannelId = o1.ChannelId 812 o3.UserId = model.NewId() 813 o3.Message = "zz" + model.NewId() + "b" 814 o3.ParentId = o1.Id 815 o3.RootId = o1.Id 816 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) 817 time.Sleep(2 * time.Millisecond) 818 819 o4 := &model.Post{} 820 o4.ChannelId = o1.ChannelId 821 o4.UserId = model.NewId() 822 o4.Message = "zz" + model.NewId() + "b" 823 o4 = (<-ss.Post().Save(o4)).Data.(*model.Post) 824 time.Sleep(2 * time.Millisecond) 825 826 o5 := &model.Post{} 827 o5.ChannelId = o1.ChannelId 828 o5.UserId = model.NewId() 829 o5.Message = "zz" + model.NewId() + "b" 830 o5.ParentId = o4.Id 831 o5.RootId = o4.Id 832 o5 = (<-ss.Post().Save(o5)).Data.(*model.Post) 833 834 r1 := (<-ss.Post().GetPostsSince(o1.ChannelId, o1.CreateAt, false)).Data.(*model.PostList) 835 836 if r1.Order[0] != o5.Id { 837 t.Fatal("invalid order") 838 } 839 840 if r1.Order[1] != o4.Id { 841 t.Fatal("invalid order") 842 } 843 844 if r1.Order[2] != o3.Id { 845 t.Fatal("invalid order") 846 } 847 848 if r1.Order[3] != o2a.Id { 849 t.Fatal("invalid order") 850 } 851 852 if len(r1.Posts) != 6 { 853 t.Fatal("wrong size") 854 } 855 856 if r1.Posts[o1.Id].Message != o1.Message { 857 t.Fatal("Missing parent") 858 } 859 860 r2 := (<-ss.Post().GetPostsSince(o1.ChannelId, o5.UpdateAt, true)).Data.(*model.PostList) 861 862 if len(r2.Order) != 0 { 863 t.Fatal("wrong size ", len(r2.Posts)) 864 } 865 } 866 867 func testPostStoreSearch(t *testing.T, ss store.Store) { 868 teamId := model.NewId() 869 userId := model.NewId() 870 871 c1 := &model.Channel{} 872 c1.TeamId = teamId 873 c1.DisplayName = "Channel1" 874 c1.Name = "zz" + model.NewId() + "b" 875 c1.Type = model.CHANNEL_OPEN 876 c1 = (<-ss.Channel().Save(c1, -1)).Data.(*model.Channel) 877 878 m1 := model.ChannelMember{} 879 m1.ChannelId = c1.Id 880 m1.UserId = userId 881 m1.NotifyProps = model.GetDefaultChannelNotifyProps() 882 store.Must(ss.Channel().SaveMember(&m1)) 883 884 c2 := &model.Channel{} 885 c2.TeamId = teamId 886 c2.DisplayName = "Channel1" 887 c2.Name = "zz" + model.NewId() + "b" 888 c2.Type = model.CHANNEL_OPEN 889 c2 = (<-ss.Channel().Save(c2, -1)).Data.(*model.Channel) 890 891 o1 := &model.Post{} 892 o1.ChannelId = c1.Id 893 o1.UserId = model.NewId() 894 o1.Message = "corey mattermost new york" 895 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 896 897 o1a := &model.Post{} 898 o1a.ChannelId = c1.Id 899 o1a.UserId = model.NewId() 900 o1a.Message = "corey mattermost new york" 901 o1a.Type = model.POST_JOIN_CHANNEL 902 o1a = (<-ss.Post().Save(o1a)).Data.(*model.Post) 903 904 o2 := &model.Post{} 905 o2.ChannelId = c1.Id 906 o2.UserId = model.NewId() 907 o2.Message = "New Jersey is where John is from" 908 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 909 910 o3 := &model.Post{} 911 o3.ChannelId = c2.Id 912 o3.UserId = model.NewId() 913 o3.Message = "New Jersey is where John is from corey new york" 914 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) 915 916 o4 := &model.Post{} 917 o4.ChannelId = c1.Id 918 o4.UserId = model.NewId() 919 o4.Hashtags = "#hashtag" 920 o4.Message = "(message)blargh" 921 o4 = (<-ss.Post().Save(o4)).Data.(*model.Post) 922 923 o5 := &model.Post{} 924 o5.ChannelId = c1.Id 925 o5.UserId = model.NewId() 926 o5.Hashtags = "#secret #howdy" 927 o5 = (<-ss.Post().Save(o5)).Data.(*model.Post) 928 929 r1 := (<-ss.Post().Search(teamId, userId, &model.SearchParams{Terms: "corey", IsHashtag: false})).Data.(*model.PostList) 930 if len(r1.Order) != 1 || r1.Order[0] != o1.Id { 931 t.Fatal("returned wrong search result") 932 } 933 934 r3 := (<-ss.Post().Search(teamId, userId, &model.SearchParams{Terms: "new", IsHashtag: false})).Data.(*model.PostList) 935 if len(r3.Order) != 2 || (r3.Order[0] != o1.Id && r3.Order[1] != o1.Id) { 936 t.Fatal("returned wrong search result") 937 } 938 939 r4 := (<-ss.Post().Search(teamId, userId, &model.SearchParams{Terms: "john", IsHashtag: false})).Data.(*model.PostList) 940 if len(r4.Order) != 1 || r4.Order[0] != o2.Id { 941 t.Fatal("returned wrong search result") 942 } 943 944 r5 := (<-ss.Post().Search(teamId, userId, &model.SearchParams{Terms: "matter*", IsHashtag: false})).Data.(*model.PostList) 945 if len(r5.Order) != 1 || r5.Order[0] != o1.Id { 946 t.Fatal("returned wrong search result") 947 } 948 949 r6 := (<-ss.Post().Search(teamId, userId, &model.SearchParams{Terms: "#hashtag", IsHashtag: true})).Data.(*model.PostList) 950 if len(r6.Order) != 1 || r6.Order[0] != o4.Id { 951 t.Fatal("returned wrong search result") 952 } 953 954 r7 := (<-ss.Post().Search(teamId, userId, &model.SearchParams{Terms: "#secret", IsHashtag: true})).Data.(*model.PostList) 955 if len(r7.Order) != 1 || r7.Order[0] != o5.Id { 956 t.Fatal("returned wrong search result") 957 } 958 959 r8 := (<-ss.Post().Search(teamId, userId, &model.SearchParams{Terms: "@thisshouldmatchnothing", IsHashtag: true})).Data.(*model.PostList) 960 if len(r8.Order) != 0 { 961 t.Fatal("returned wrong search result") 962 } 963 964 r9 := (<-ss.Post().Search(teamId, userId, &model.SearchParams{Terms: "mattermost jersey", IsHashtag: false})).Data.(*model.PostList) 965 if len(r9.Order) != 0 { 966 t.Fatal("returned wrong search result") 967 } 968 969 r9a := (<-ss.Post().Search(teamId, userId, &model.SearchParams{Terms: "corey new york", IsHashtag: false})).Data.(*model.PostList) 970 if len(r9a.Order) != 1 { 971 t.Fatal("returned wrong search result") 972 } 973 974 r10 := (<-ss.Post().Search(teamId, userId, &model.SearchParams{Terms: "matter* jer*", IsHashtag: false})).Data.(*model.PostList) 975 if len(r10.Order) != 0 { 976 t.Fatal("returned wrong search result") 977 } 978 979 r11 := (<-ss.Post().Search(teamId, userId, &model.SearchParams{Terms: "message blargh", IsHashtag: false})).Data.(*model.PostList) 980 if len(r11.Order) != 1 { 981 t.Fatal("returned wrong search result") 982 } 983 984 r12 := (<-ss.Post().Search(teamId, userId, &model.SearchParams{Terms: "blargh>", IsHashtag: false})).Data.(*model.PostList) 985 if len(r12.Order) != 1 { 986 t.Fatal("returned wrong search result") 987 } 988 989 r13 := (<-ss.Post().Search(teamId, userId, &model.SearchParams{Terms: "Jersey corey", IsHashtag: false, OrTerms: true})).Data.(*model.PostList) 990 if len(r13.Order) != 2 { 991 t.Fatal("returned wrong search result") 992 } 993 } 994 995 func testUserCountsWithPostsByDay(t *testing.T, ss store.Store) { 996 t1 := &model.Team{} 997 t1.DisplayName = "DisplayName" 998 t1.Name = "zz" + model.NewId() + "b" 999 t1.Email = model.NewId() + "@nowhere.com" 1000 t1.Type = model.TEAM_OPEN 1001 t1 = store.Must(ss.Team().Save(t1)).(*model.Team) 1002 1003 c1 := &model.Channel{} 1004 c1.TeamId = t1.Id 1005 c1.DisplayName = "Channel2" 1006 c1.Name = "zz" + model.NewId() + "b" 1007 c1.Type = model.CHANNEL_OPEN 1008 c1 = store.Must(ss.Channel().Save(c1, -1)).(*model.Channel) 1009 1010 o1 := &model.Post{} 1011 o1.ChannelId = c1.Id 1012 o1.UserId = model.NewId() 1013 o1.CreateAt = utils.MillisFromTime(utils.Yesterday()) 1014 o1.Message = "zz" + model.NewId() + "b" 1015 o1 = store.Must(ss.Post().Save(o1)).(*model.Post) 1016 1017 o1a := &model.Post{} 1018 o1a.ChannelId = c1.Id 1019 o1a.UserId = model.NewId() 1020 o1a.CreateAt = o1.CreateAt 1021 o1a.Message = "zz" + model.NewId() + "b" 1022 o1a = store.Must(ss.Post().Save(o1a)).(*model.Post) 1023 1024 o2 := &model.Post{} 1025 o2.ChannelId = c1.Id 1026 o2.UserId = model.NewId() 1027 o2.CreateAt = o1.CreateAt - (1000 * 60 * 60 * 24) 1028 o2.Message = "zz" + model.NewId() + "b" 1029 o2 = store.Must(ss.Post().Save(o2)).(*model.Post) 1030 1031 o2a := &model.Post{} 1032 o2a.ChannelId = c1.Id 1033 o2a.UserId = o2.UserId 1034 o2a.CreateAt = o1.CreateAt - (1000 * 60 * 60 * 24) 1035 o2a.Message = "zz" + model.NewId() + "b" 1036 o2a = store.Must(ss.Post().Save(o2a)).(*model.Post) 1037 1038 if r1 := <-ss.Post().AnalyticsUserCountsWithPostsByDay(t1.Id); r1.Err != nil { 1039 t.Fatal(r1.Err) 1040 } else { 1041 row1 := r1.Data.(model.AnalyticsRows)[0] 1042 if row1.Value != 2 { 1043 t.Fatal("wrong value") 1044 } 1045 1046 row2 := r1.Data.(model.AnalyticsRows)[1] 1047 if row2.Value != 1 { 1048 t.Fatal("wrong value") 1049 } 1050 } 1051 } 1052 1053 func testPostCountsByDay(t *testing.T, ss store.Store) { 1054 t1 := &model.Team{} 1055 t1.DisplayName = "DisplayName" 1056 t1.Name = "zz" + model.NewId() + "b" 1057 t1.Email = model.NewId() + "@nowhere.com" 1058 t1.Type = model.TEAM_OPEN 1059 t1 = store.Must(ss.Team().Save(t1)).(*model.Team) 1060 1061 c1 := &model.Channel{} 1062 c1.TeamId = t1.Id 1063 c1.DisplayName = "Channel2" 1064 c1.Name = "zz" + model.NewId() + "b" 1065 c1.Type = model.CHANNEL_OPEN 1066 c1 = store.Must(ss.Channel().Save(c1, -1)).(*model.Channel) 1067 1068 o1 := &model.Post{} 1069 o1.ChannelId = c1.Id 1070 o1.UserId = model.NewId() 1071 o1.CreateAt = utils.MillisFromTime(utils.Yesterday()) 1072 o1.Message = "zz" + model.NewId() + "b" 1073 o1 = store.Must(ss.Post().Save(o1)).(*model.Post) 1074 1075 o1a := &model.Post{} 1076 o1a.ChannelId = c1.Id 1077 o1a.UserId = model.NewId() 1078 o1a.CreateAt = o1.CreateAt 1079 o1a.Message = "zz" + model.NewId() + "b" 1080 o1a = store.Must(ss.Post().Save(o1a)).(*model.Post) 1081 1082 o2 := &model.Post{} 1083 o2.ChannelId = c1.Id 1084 o2.UserId = model.NewId() 1085 o2.CreateAt = o1.CreateAt - (1000 * 60 * 60 * 24 * 2) 1086 o2.Message = "zz" + model.NewId() + "b" 1087 o2 = store.Must(ss.Post().Save(o2)).(*model.Post) 1088 1089 o2a := &model.Post{} 1090 o2a.ChannelId = c1.Id 1091 o2a.UserId = o2.UserId 1092 o2a.CreateAt = o1.CreateAt - (1000 * 60 * 60 * 24 * 2) 1093 o2a.Message = "zz" + model.NewId() + "b" 1094 o2a = store.Must(ss.Post().Save(o2a)).(*model.Post) 1095 1096 time.Sleep(1 * time.Second) 1097 1098 if r1 := <-ss.Post().AnalyticsPostCountsByDay(t1.Id); r1.Err != nil { 1099 t.Fatal(r1.Err) 1100 } else { 1101 row1 := r1.Data.(model.AnalyticsRows)[0] 1102 if row1.Value != 2 { 1103 t.Fatal(row1) 1104 } 1105 1106 row2 := r1.Data.(model.AnalyticsRows)[1] 1107 if row2.Value != 2 { 1108 t.Fatal("wrong value") 1109 } 1110 } 1111 1112 if r1 := <-ss.Post().AnalyticsPostCount(t1.Id, false, false); r1.Err != nil { 1113 t.Fatal(r1.Err) 1114 } else { 1115 if r1.Data.(int64) != 4 { 1116 t.Fatal("wrong value") 1117 } 1118 } 1119 } 1120 1121 func testPostStoreGetFlaggedPostsForTeam(t *testing.T, ss store.Store) { 1122 c1 := &model.Channel{} 1123 c1.TeamId = model.NewId() 1124 c1.DisplayName = "Channel1" 1125 c1.Name = "zz" + model.NewId() + "b" 1126 c1.Type = model.CHANNEL_OPEN 1127 c1 = store.Must(ss.Channel().Save(c1, -1)).(*model.Channel) 1128 1129 o1 := &model.Post{} 1130 o1.ChannelId = c1.Id 1131 o1.UserId = model.NewId() 1132 o1.Message = "zz" + model.NewId() + "b" 1133 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 1134 time.Sleep(2 * time.Millisecond) 1135 1136 o2 := &model.Post{} 1137 o2.ChannelId = o1.ChannelId 1138 o2.UserId = model.NewId() 1139 o2.Message = "zz" + model.NewId() + "b" 1140 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 1141 time.Sleep(2 * time.Millisecond) 1142 1143 o3 := &model.Post{} 1144 o3.ChannelId = o1.ChannelId 1145 o3.UserId = model.NewId() 1146 o3.Message = "zz" + model.NewId() + "b" 1147 o3.DeleteAt = 1 1148 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) 1149 time.Sleep(2 * time.Millisecond) 1150 1151 o4 := &model.Post{} 1152 o4.ChannelId = model.NewId() 1153 o4.UserId = model.NewId() 1154 o4.Message = "zz" + model.NewId() + "b" 1155 o4 = (<-ss.Post().Save(o4)).Data.(*model.Post) 1156 time.Sleep(2 * time.Millisecond) 1157 1158 c2 := &model.Channel{} 1159 c2.DisplayName = "DMChannel1" 1160 c2.Name = "zz" + model.NewId() + "b" 1161 c2.Type = model.CHANNEL_DIRECT 1162 1163 m1 := &model.ChannelMember{} 1164 m1.ChannelId = c2.Id 1165 m1.UserId = o1.UserId 1166 m1.NotifyProps = model.GetDefaultChannelNotifyProps() 1167 1168 m2 := &model.ChannelMember{} 1169 m2.ChannelId = c2.Id 1170 m2.UserId = model.NewId() 1171 m2.NotifyProps = model.GetDefaultChannelNotifyProps() 1172 1173 c2 = store.Must(ss.Channel().SaveDirectChannel(c2, m1, m2)).(*model.Channel) 1174 1175 o5 := &model.Post{} 1176 o5.ChannelId = c2.Id 1177 o5.UserId = m2.UserId 1178 o5.Message = "zz" + model.NewId() + "b" 1179 o5 = (<-ss.Post().Save(o5)).Data.(*model.Post) 1180 time.Sleep(2 * time.Millisecond) 1181 1182 r1 := (<-ss.Post().GetFlaggedPosts(o1.ChannelId, 0, 2)).Data.(*model.PostList) 1183 1184 if len(r1.Order) != 0 { 1185 t.Fatal("should be empty") 1186 } 1187 1188 preferences := model.Preferences{ 1189 { 1190 UserId: o1.UserId, 1191 Category: model.PREFERENCE_CATEGORY_FLAGGED_POST, 1192 Name: o1.Id, 1193 Value: "true", 1194 }, 1195 } 1196 1197 store.Must(ss.Preference().Save(&preferences)) 1198 1199 r2 := (<-ss.Post().GetFlaggedPostsForTeam(o1.UserId, c1.TeamId, 0, 2)).Data.(*model.PostList) 1200 1201 if len(r2.Order) != 1 { 1202 t.Fatal("should have 1 post") 1203 } 1204 1205 preferences = model.Preferences{ 1206 { 1207 UserId: o1.UserId, 1208 Category: model.PREFERENCE_CATEGORY_FLAGGED_POST, 1209 Name: o2.Id, 1210 Value: "true", 1211 }, 1212 } 1213 1214 store.Must(ss.Preference().Save(&preferences)) 1215 1216 r3 := (<-ss.Post().GetFlaggedPostsForTeam(o1.UserId, c1.TeamId, 0, 1)).Data.(*model.PostList) 1217 1218 if len(r3.Order) != 1 { 1219 t.Fatal("should have 1 post") 1220 } 1221 1222 r3 = (<-ss.Post().GetFlaggedPostsForTeam(o1.UserId, c1.TeamId, 1, 1)).Data.(*model.PostList) 1223 1224 if len(r3.Order) != 1 { 1225 t.Fatal("should have 1 post") 1226 } 1227 1228 r3 = (<-ss.Post().GetFlaggedPostsForTeam(o1.UserId, c1.TeamId, 1000, 10)).Data.(*model.PostList) 1229 1230 if len(r3.Order) != 0 { 1231 t.Fatal("should be empty") 1232 } 1233 1234 r4 := (<-ss.Post().GetFlaggedPostsForTeam(o1.UserId, c1.TeamId, 0, 2)).Data.(*model.PostList) 1235 1236 if len(r4.Order) != 2 { 1237 t.Fatal("should have 2 posts") 1238 } 1239 1240 preferences = model.Preferences{ 1241 { 1242 UserId: o1.UserId, 1243 Category: model.PREFERENCE_CATEGORY_FLAGGED_POST, 1244 Name: o3.Id, 1245 Value: "true", 1246 }, 1247 } 1248 1249 store.Must(ss.Preference().Save(&preferences)) 1250 1251 r4 = (<-ss.Post().GetFlaggedPostsForTeam(o1.UserId, c1.TeamId, 0, 2)).Data.(*model.PostList) 1252 1253 if len(r4.Order) != 2 { 1254 t.Fatal("should have 2 posts") 1255 } 1256 1257 preferences = model.Preferences{ 1258 { 1259 UserId: o1.UserId, 1260 Category: model.PREFERENCE_CATEGORY_FLAGGED_POST, 1261 Name: o4.Id, 1262 Value: "true", 1263 }, 1264 } 1265 store.Must(ss.Preference().Save(&preferences)) 1266 1267 r4 = (<-ss.Post().GetFlaggedPostsForTeam(o1.UserId, c1.TeamId, 0, 2)).Data.(*model.PostList) 1268 1269 if len(r4.Order) != 2 { 1270 t.Fatal("should have 2 posts") 1271 } 1272 1273 r4 = (<-ss.Post().GetFlaggedPostsForTeam(o1.UserId, model.NewId(), 0, 2)).Data.(*model.PostList) 1274 1275 if len(r4.Order) != 0 { 1276 t.Fatal("should have 0 posts") 1277 } 1278 1279 preferences = model.Preferences{ 1280 { 1281 UserId: o1.UserId, 1282 Category: model.PREFERENCE_CATEGORY_FLAGGED_POST, 1283 Name: o5.Id, 1284 Value: "true", 1285 }, 1286 } 1287 store.Must(ss.Preference().Save(&preferences)) 1288 1289 r4 = (<-ss.Post().GetFlaggedPostsForTeam(o1.UserId, c1.TeamId, 0, 10)).Data.(*model.PostList) 1290 1291 if len(r4.Order) != 3 { 1292 t.Fatal("should have 3 posts") 1293 } 1294 } 1295 1296 func testPostStoreGetFlaggedPosts(t *testing.T, ss store.Store) { 1297 o1 := &model.Post{} 1298 o1.ChannelId = model.NewId() 1299 o1.UserId = model.NewId() 1300 o1.Message = "zz" + model.NewId() + "b" 1301 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 1302 time.Sleep(2 * time.Millisecond) 1303 1304 o2 := &model.Post{} 1305 o2.ChannelId = o1.ChannelId 1306 o2.UserId = model.NewId() 1307 o2.Message = "zz" + model.NewId() + "b" 1308 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 1309 time.Sleep(2 * time.Millisecond) 1310 1311 o3 := &model.Post{} 1312 o3.ChannelId = o1.ChannelId 1313 o3.UserId = model.NewId() 1314 o3.Message = "zz" + model.NewId() + "b" 1315 o3.DeleteAt = 1 1316 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) 1317 time.Sleep(2 * time.Millisecond) 1318 1319 r1 := (<-ss.Post().GetFlaggedPosts(o1.UserId, 0, 2)).Data.(*model.PostList) 1320 1321 if len(r1.Order) != 0 { 1322 t.Fatal("should be empty") 1323 } 1324 1325 preferences := model.Preferences{ 1326 { 1327 UserId: o1.UserId, 1328 Category: model.PREFERENCE_CATEGORY_FLAGGED_POST, 1329 Name: o1.Id, 1330 Value: "true", 1331 }, 1332 } 1333 1334 store.Must(ss.Preference().Save(&preferences)) 1335 1336 r2 := (<-ss.Post().GetFlaggedPosts(o1.UserId, 0, 2)).Data.(*model.PostList) 1337 1338 if len(r2.Order) != 1 { 1339 t.Fatal("should have 1 post") 1340 } 1341 1342 preferences = model.Preferences{ 1343 { 1344 UserId: o1.UserId, 1345 Category: model.PREFERENCE_CATEGORY_FLAGGED_POST, 1346 Name: o2.Id, 1347 Value: "true", 1348 }, 1349 } 1350 1351 store.Must(ss.Preference().Save(&preferences)) 1352 1353 r3 := (<-ss.Post().GetFlaggedPosts(o1.UserId, 0, 1)).Data.(*model.PostList) 1354 1355 if len(r3.Order) != 1 { 1356 t.Fatal("should have 1 post") 1357 } 1358 1359 r3 = (<-ss.Post().GetFlaggedPosts(o1.UserId, 1, 1)).Data.(*model.PostList) 1360 1361 if len(r3.Order) != 1 { 1362 t.Fatal("should have 1 post") 1363 } 1364 1365 r3 = (<-ss.Post().GetFlaggedPosts(o1.UserId, 1000, 10)).Data.(*model.PostList) 1366 1367 if len(r3.Order) != 0 { 1368 t.Fatal("should be empty") 1369 } 1370 1371 r4 := (<-ss.Post().GetFlaggedPosts(o1.UserId, 0, 2)).Data.(*model.PostList) 1372 1373 if len(r4.Order) != 2 { 1374 t.Fatal("should have 2 posts") 1375 } 1376 1377 preferences = model.Preferences{ 1378 { 1379 UserId: o1.UserId, 1380 Category: model.PREFERENCE_CATEGORY_FLAGGED_POST, 1381 Name: o3.Id, 1382 Value: "true", 1383 }, 1384 } 1385 1386 store.Must(ss.Preference().Save(&preferences)) 1387 1388 r4 = (<-ss.Post().GetFlaggedPosts(o1.UserId, 0, 2)).Data.(*model.PostList) 1389 1390 if len(r4.Order) != 2 { 1391 t.Fatal("should have 2 posts") 1392 } 1393 } 1394 1395 func testPostStoreGetFlaggedPostsForChannel(t *testing.T, ss store.Store) { 1396 o1 := &model.Post{} 1397 o1.ChannelId = model.NewId() 1398 o1.UserId = model.NewId() 1399 o1.Message = "zz" + model.NewId() + "b" 1400 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 1401 time.Sleep(2 * time.Millisecond) 1402 1403 o2 := &model.Post{} 1404 o2.ChannelId = o1.ChannelId 1405 o2.UserId = model.NewId() 1406 o2.Message = "zz" + model.NewId() + "b" 1407 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 1408 time.Sleep(2 * time.Millisecond) 1409 1410 // deleted post 1411 o3 := &model.Post{} 1412 o3.ChannelId = model.NewId() 1413 o3.UserId = o1.ChannelId 1414 o3.Message = "zz" + model.NewId() + "b" 1415 o3.DeleteAt = 1 1416 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) 1417 time.Sleep(2 * time.Millisecond) 1418 1419 o4 := &model.Post{} 1420 o4.ChannelId = model.NewId() 1421 o4.UserId = model.NewId() 1422 o4.Message = "zz" + model.NewId() + "b" 1423 o4 = (<-ss.Post().Save(o4)).Data.(*model.Post) 1424 time.Sleep(2 * time.Millisecond) 1425 1426 r := (<-ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 0, 10)).Data.(*model.PostList) 1427 1428 if len(r.Order) != 0 { 1429 t.Fatal("should be empty") 1430 } 1431 1432 preference := model.Preference{ 1433 UserId: o1.UserId, 1434 Category: model.PREFERENCE_CATEGORY_FLAGGED_POST, 1435 Name: o1.Id, 1436 Value: "true", 1437 } 1438 1439 store.Must(ss.Preference().Save(&model.Preferences{preference})) 1440 1441 r = (<-ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 0, 10)).Data.(*model.PostList) 1442 1443 if len(r.Order) != 1 { 1444 t.Fatal("should have 1 post") 1445 } 1446 1447 preference.Name = o2.Id 1448 store.Must(ss.Preference().Save(&model.Preferences{preference})) 1449 1450 preference.Name = o3.Id 1451 store.Must(ss.Preference().Save(&model.Preferences{preference})) 1452 1453 r = (<-ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 0, 1)).Data.(*model.PostList) 1454 1455 if len(r.Order) != 1 { 1456 t.Fatal("should have 1 post") 1457 } 1458 1459 r = (<-ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 1, 1)).Data.(*model.PostList) 1460 1461 if len(r.Order) != 1 { 1462 t.Fatal("should have 1 post") 1463 } 1464 1465 r = (<-ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 1000, 10)).Data.(*model.PostList) 1466 1467 if len(r.Order) != 0 { 1468 t.Fatal("should be empty") 1469 } 1470 1471 r = (<-ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 0, 10)).Data.(*model.PostList) 1472 1473 if len(r.Order) != 2 { 1474 t.Fatal("should have 2 posts") 1475 } 1476 1477 preference.Name = o4.Id 1478 store.Must(ss.Preference().Save(&model.Preferences{preference})) 1479 1480 r = (<-ss.Post().GetFlaggedPostsForChannel(o1.UserId, o4.ChannelId, 0, 10)).Data.(*model.PostList) 1481 1482 if len(r.Order) != 1 { 1483 t.Fatal("should have 1 post") 1484 } 1485 } 1486 1487 func testPostStoreGetPostsCreatedAt(t *testing.T, ss store.Store) { 1488 createTime := model.GetMillis() + 1 1489 1490 o0 := &model.Post{} 1491 o0.ChannelId = model.NewId() 1492 o0.UserId = model.NewId() 1493 o0.Message = "zz" + model.NewId() + "b" 1494 o0.CreateAt = createTime 1495 o0 = (<-ss.Post().Save(o0)).Data.(*model.Post) 1496 1497 o1 := &model.Post{} 1498 o1.ChannelId = o0.ChannelId 1499 o1.UserId = model.NewId() 1500 o1.Message = "zz" + model.NewId() + "b" 1501 o1.CreateAt = createTime 1502 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 1503 1504 o2 := &model.Post{} 1505 o2.ChannelId = o1.ChannelId 1506 o2.UserId = model.NewId() 1507 o2.Message = "zz" + model.NewId() + "b" 1508 o2.ParentId = o1.Id 1509 o2.RootId = o1.Id 1510 o2.CreateAt = createTime + 1 1511 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 1512 1513 o3 := &model.Post{} 1514 o3.ChannelId = model.NewId() 1515 o3.UserId = model.NewId() 1516 o3.Message = "zz" + model.NewId() + "b" 1517 o3.CreateAt = createTime 1518 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) 1519 1520 r1 := (<-ss.Post().GetPostsCreatedAt(o1.ChannelId, createTime)).Data.([]*model.Post) 1521 assert.Equal(t, 2, len(r1)) 1522 } 1523 1524 func testPostStoreOverwrite(t *testing.T, ss store.Store) { 1525 o1 := &model.Post{} 1526 o1.ChannelId = model.NewId() 1527 o1.UserId = model.NewId() 1528 o1.Message = "zz" + model.NewId() + "AAAAAAAAAAA" 1529 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 1530 1531 o2 := &model.Post{} 1532 o2.ChannelId = o1.ChannelId 1533 o2.UserId = model.NewId() 1534 o2.Message = "zz" + model.NewId() + "CCCCCCCCC" 1535 o2.ParentId = o1.Id 1536 o2.RootId = o1.Id 1537 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 1538 1539 o3 := &model.Post{} 1540 o3.ChannelId = o1.ChannelId 1541 o3.UserId = model.NewId() 1542 o3.Message = "zz" + model.NewId() + "QQQQQQQQQQ" 1543 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) 1544 1545 ro1 := (<-ss.Post().Get(o1.Id)).Data.(*model.PostList).Posts[o1.Id] 1546 ro2 := (<-ss.Post().Get(o1.Id)).Data.(*model.PostList).Posts[o2.Id] 1547 ro3 := (<-ss.Post().Get(o3.Id)).Data.(*model.PostList).Posts[o3.Id] 1548 1549 if ro1.Message != o1.Message { 1550 t.Fatal("Failed to save/get") 1551 } 1552 1553 o1a := &model.Post{} 1554 *o1a = *ro1 1555 o1a.Message = ro1.Message + "BBBBBBBBBB" 1556 if result := <-ss.Post().Overwrite(o1a); result.Err != nil { 1557 t.Fatal(result.Err) 1558 } 1559 1560 ro1a := (<-ss.Post().Get(o1.Id)).Data.(*model.PostList).Posts[o1.Id] 1561 1562 if ro1a.Message != o1a.Message { 1563 t.Fatal("Failed to overwrite/get") 1564 } 1565 1566 o2a := &model.Post{} 1567 *o2a = *ro2 1568 o2a.Message = ro2.Message + "DDDDDDD" 1569 if result := <-ss.Post().Overwrite(o2a); result.Err != nil { 1570 t.Fatal(result.Err) 1571 } 1572 1573 ro2a := (<-ss.Post().Get(o1.Id)).Data.(*model.PostList).Posts[o2.Id] 1574 1575 if ro2a.Message != o2a.Message { 1576 t.Fatal("Failed to overwrite/get") 1577 } 1578 1579 o3a := &model.Post{} 1580 *o3a = *ro3 1581 o3a.Message = ro3.Message + "WWWWWWW" 1582 if result := <-ss.Post().Overwrite(o3a); result.Err != nil { 1583 t.Fatal(result.Err) 1584 } 1585 1586 ro3a := (<-ss.Post().Get(o3.Id)).Data.(*model.PostList).Posts[o3.Id] 1587 1588 if ro3a.Message != o3a.Message && ro3a.Hashtags != o3a.Hashtags { 1589 t.Fatal("Failed to overwrite/get") 1590 } 1591 1592 o4 := store.Must(ss.Post().Save(&model.Post{ 1593 ChannelId: model.NewId(), 1594 UserId: model.NewId(), 1595 Message: model.NewId(), 1596 Filenames: []string{"test"}, 1597 })).(*model.Post) 1598 1599 ro4 := (<-ss.Post().Get(o4.Id)).Data.(*model.PostList).Posts[o4.Id] 1600 1601 o4a := &model.Post{} 1602 *o4a = *ro4 1603 o4a.Filenames = []string{} 1604 o4a.FileIds = []string{model.NewId()} 1605 if result := <-ss.Post().Overwrite(o4a); result.Err != nil { 1606 t.Fatal(result.Err) 1607 } 1608 1609 if ro4a := store.Must(ss.Post().Get(o4.Id)).(*model.PostList).Posts[o4.Id]; len(ro4a.Filenames) != 0 { 1610 t.Fatal("Failed to clear Filenames") 1611 } else if len(ro4a.FileIds) != 1 { 1612 t.Fatal("Failed to set FileIds") 1613 } 1614 } 1615 1616 func testPostStoreGetPostsByIds(t *testing.T, ss store.Store) { 1617 o1 := &model.Post{} 1618 o1.ChannelId = model.NewId() 1619 o1.UserId = model.NewId() 1620 o1.Message = "zz" + model.NewId() + "AAAAAAAAAAA" 1621 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 1622 1623 o2 := &model.Post{} 1624 o2.ChannelId = o1.ChannelId 1625 o2.UserId = model.NewId() 1626 o2.Message = "zz" + model.NewId() + "CCCCCCCCC" 1627 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 1628 1629 o3 := &model.Post{} 1630 o3.ChannelId = o1.ChannelId 1631 o3.UserId = model.NewId() 1632 o3.Message = "zz" + model.NewId() + "QQQQQQQQQQ" 1633 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) 1634 1635 ro1 := (<-ss.Post().Get(o1.Id)).Data.(*model.PostList).Posts[o1.Id] 1636 ro2 := (<-ss.Post().Get(o2.Id)).Data.(*model.PostList).Posts[o2.Id] 1637 ro3 := (<-ss.Post().Get(o3.Id)).Data.(*model.PostList).Posts[o3.Id] 1638 1639 postIds := []string{ 1640 ro1.Id, 1641 ro2.Id, 1642 ro3.Id, 1643 } 1644 1645 if ro4 := store.Must(ss.Post().GetPostsByIds(postIds)).([]*model.Post); len(ro4) != 3 { 1646 t.Fatalf("Expected 3 posts in results. Got %v", len(ro4)) 1647 } 1648 1649 store.Must(ss.Post().Delete(ro1.Id, model.GetMillis())) 1650 1651 if ro5 := store.Must(ss.Post().GetPostsByIds(postIds)).([]*model.Post); len(ro5) != 2 { 1652 t.Fatalf("Expected 2 posts in results. Got %v", len(ro5)) 1653 } 1654 } 1655 1656 func testPostStoreGetPostsBatchForIndexing(t *testing.T, ss store.Store) { 1657 c1 := &model.Channel{} 1658 c1.TeamId = model.NewId() 1659 c1.DisplayName = "Channel1" 1660 c1.Name = "zz" + model.NewId() + "b" 1661 c1.Type = model.CHANNEL_OPEN 1662 c1 = (<-ss.Channel().Save(c1, -1)).Data.(*model.Channel) 1663 1664 c2 := &model.Channel{} 1665 c2.TeamId = model.NewId() 1666 c2.DisplayName = "Channel2" 1667 c2.Name = "zz" + model.NewId() + "b" 1668 c2.Type = model.CHANNEL_OPEN 1669 c2 = (<-ss.Channel().Save(c2, -1)).Data.(*model.Channel) 1670 1671 o1 := &model.Post{} 1672 o1.ChannelId = c1.Id 1673 o1.UserId = model.NewId() 1674 o1.Message = "zz" + model.NewId() + "AAAAAAAAAAA" 1675 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 1676 1677 o2 := &model.Post{} 1678 o2.ChannelId = c2.Id 1679 o2.UserId = model.NewId() 1680 o2.Message = "zz" + model.NewId() + "CCCCCCCCC" 1681 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 1682 1683 o3 := &model.Post{} 1684 o3.ChannelId = c1.Id 1685 o3.UserId = model.NewId() 1686 o3.ParentId = o1.Id 1687 o3.RootId = o1.Id 1688 o3.Message = "zz" + model.NewId() + "QQQQQQQQQQ" 1689 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) 1690 1691 if r := store.Must(ss.Post().GetPostsBatchForIndexing(o1.CreateAt, model.GetMillis()+100000, 100)).([]*model.PostForIndexing); len(r) != 3 { 1692 t.Fatalf("Expected 3 posts in results. Got %v", len(r)) 1693 } else { 1694 for _, p := range r { 1695 if p.Id == o1.Id { 1696 if p.TeamId != c1.TeamId { 1697 t.Fatalf("Unexpected team ID") 1698 } 1699 if p.ParentCreateAt != nil { 1700 t.Fatalf("Unexpected parent create at") 1701 } 1702 } else if p.Id == o2.Id { 1703 if p.TeamId != c2.TeamId { 1704 t.Fatalf("Unexpected team ID") 1705 } 1706 if p.ParentCreateAt != nil { 1707 t.Fatalf("Unexpected parent create at") 1708 } 1709 } else if p.Id == o3.Id { 1710 if p.TeamId != c1.TeamId { 1711 t.Fatalf("Unexpected team ID") 1712 } 1713 if *p.ParentCreateAt != o1.CreateAt { 1714 t.Fatalf("Unexpected parent create at") 1715 } 1716 } else { 1717 t.Fatalf("unexpected post returned") 1718 } 1719 } 1720 } 1721 } 1722 1723 func testPostStorePermanentDeleteBatch(t *testing.T, ss store.Store) { 1724 o1 := &model.Post{} 1725 o1.ChannelId = model.NewId() 1726 o1.UserId = model.NewId() 1727 o1.Message = "zz" + model.NewId() + "AAAAAAAAAAA" 1728 o1.CreateAt = 1000 1729 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 1730 1731 o2 := &model.Post{} 1732 o2.ChannelId = model.NewId() 1733 o2.UserId = model.NewId() 1734 o2.Message = "zz" + model.NewId() + "AAAAAAAAAAA" 1735 o2.CreateAt = 1000 1736 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 1737 1738 o3 := &model.Post{} 1739 o3.ChannelId = model.NewId() 1740 o3.UserId = model.NewId() 1741 o3.Message = "zz" + model.NewId() + "AAAAAAAAAAA" 1742 o3.CreateAt = 100000 1743 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) 1744 1745 store.Must(ss.Post().PermanentDeleteBatch(2000, 1000)) 1746 1747 if p := <-ss.Post().Get(o1.Id); p.Err == nil { 1748 t.Fatalf("Should have not found post 1 after purge") 1749 } 1750 1751 if p := <-ss.Post().Get(o2.Id); p.Err == nil { 1752 t.Fatalf("Should have not found post 2 after purge") 1753 } 1754 1755 if p := <-ss.Post().Get(o3.Id); p.Err != nil { 1756 t.Fatalf("Should have found post 3 after purge") 1757 } 1758 } 1759 1760 func testPostStoreGetOldest(t *testing.T, ss store.Store) { 1761 o0 := &model.Post{} 1762 o0.ChannelId = model.NewId() 1763 o0.UserId = model.NewId() 1764 o0.Message = "zz" + model.NewId() + "b" 1765 o0.CreateAt = 3 1766 o0 = (<-ss.Post().Save(o0)).Data.(*model.Post) 1767 1768 o1 := &model.Post{} 1769 o1.ChannelId = o0.Id 1770 o1.UserId = model.NewId() 1771 o1.Message = "zz" + model.NewId() + "b" 1772 o1.CreateAt = 2 1773 o1 = (<-ss.Post().Save(o1)).Data.(*model.Post) 1774 1775 o2 := &model.Post{} 1776 o2.ChannelId = o1.ChannelId 1777 o2.UserId = model.NewId() 1778 o2.Message = "zz" + model.NewId() + "b" 1779 o2.CreateAt = 1 1780 o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) 1781 1782 r1 := (<-ss.Post().GetOldest()).Data.(*model.Post) 1783 1784 assert.EqualValues(t, o2.Id, r1.Id) 1785 }