github.com/gigforks/mattermost-server@v4.9.1-0.20180619094218-800d97fa55d0+incompatible/store/storetest/compliance_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 "testing" 8 "time" 9 10 "github.com/mattermost/mattermost-server/model" 11 "github.com/mattermost/mattermost-server/store" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func TestComplianceStore(t *testing.T, ss store.Store) { 16 t.Run("", func(t *testing.T) { testComplianceStore(t, ss) }) 17 t.Run("ComplianceExport", func(t *testing.T) { testComplianceExport(t, ss) }) 18 t.Run("ComplianceExportDirectMessages", func(t *testing.T) { testComplianceExportDirectMessages(t, ss) }) 19 t.Run("MessageExportPublicChannel", func(t *testing.T) { testMessageExportPublicChannel(t, ss) }) 20 t.Run("MessageExportPrivateChannel", func(t *testing.T) { testMessageExportPrivateChannel(t, ss) }) 21 t.Run("MessageExportDirectMessageChannel", func(t *testing.T) { testMessageExportDirectMessageChannel(t, ss) }) 22 t.Run("MessageExportGroupMessageChannel", func(t *testing.T) { testMessageExportGroupMessageChannel(t, ss) }) 23 } 24 25 func testComplianceStore(t *testing.T, ss store.Store) { 26 compliance1 := &model.Compliance{Desc: "Audit for federal subpoena case #22443", UserId: model.NewId(), Status: model.COMPLIANCE_STATUS_FAILED, StartAt: model.GetMillis() - 1, EndAt: model.GetMillis() + 1, Type: model.COMPLIANCE_TYPE_ADHOC} 27 store.Must(ss.Compliance().Save(compliance1)) 28 time.Sleep(100 * time.Millisecond) 29 30 compliance2 := &model.Compliance{Desc: "Audit for federal subpoena case #11458", UserId: model.NewId(), Status: model.COMPLIANCE_STATUS_RUNNING, StartAt: model.GetMillis() - 1, EndAt: model.GetMillis() + 1, Type: model.COMPLIANCE_TYPE_ADHOC} 31 store.Must(ss.Compliance().Save(compliance2)) 32 time.Sleep(100 * time.Millisecond) 33 34 c := ss.Compliance().GetAll(0, 1000) 35 result := <-c 36 compliances := result.Data.(model.Compliances) 37 38 if compliances[0].Status != model.COMPLIANCE_STATUS_RUNNING && compliance2.Id != compliances[0].Id { 39 t.Fatal() 40 } 41 42 compliance2.Status = model.COMPLIANCE_STATUS_FAILED 43 store.Must(ss.Compliance().Update(compliance2)) 44 45 c = ss.Compliance().GetAll(0, 1000) 46 result = <-c 47 compliances = result.Data.(model.Compliances) 48 49 if compliances[0].Status != model.COMPLIANCE_STATUS_FAILED && compliance2.Id != compliances[0].Id { 50 t.Fatal() 51 } 52 53 c = ss.Compliance().GetAll(0, 1) 54 result = <-c 55 compliances = result.Data.(model.Compliances) 56 57 if len(compliances) != 1 { 58 t.Fatal("should only have returned 1") 59 } 60 61 c = ss.Compliance().GetAll(1, 1) 62 result = <-c 63 compliances = result.Data.(model.Compliances) 64 65 if len(compliances) != 1 { 66 t.Fatal("should only have returned 1") 67 } 68 69 rc2 := (<-ss.Compliance().Get(compliance2.Id)).Data.(*model.Compliance) 70 if rc2.Status != compliance2.Status { 71 t.Fatal() 72 } 73 } 74 75 func testComplianceExport(t *testing.T, ss store.Store) { 76 time.Sleep(100 * time.Millisecond) 77 78 t1 := &model.Team{} 79 t1.DisplayName = "DisplayName" 80 t1.Name = "zz" + model.NewId() + "b" 81 t1.Email = model.NewId() + "@nowhere.com" 82 t1.Type = model.TEAM_OPEN 83 t1 = store.Must(ss.Team().Save(t1)).(*model.Team) 84 85 u1 := &model.User{} 86 u1.Email = model.NewId() 87 u1.Username = model.NewId() 88 u1 = store.Must(ss.User().Save(u1)).(*model.User) 89 store.Must(ss.Team().SaveMember(&model.TeamMember{TeamId: t1.Id, UserId: u1.Id}, -1)) 90 91 u2 := &model.User{} 92 u2.Email = model.NewId() 93 u2.Username = model.NewId() 94 u2 = store.Must(ss.User().Save(u2)).(*model.User) 95 store.Must(ss.Team().SaveMember(&model.TeamMember{TeamId: t1.Id, UserId: u2.Id}, -1)) 96 97 c1 := &model.Channel{} 98 c1.TeamId = t1.Id 99 c1.DisplayName = "Channel2" 100 c1.Name = "zz" + model.NewId() + "b" 101 c1.Type = model.CHANNEL_OPEN 102 c1 = store.Must(ss.Channel().Save(c1, -1)).(*model.Channel) 103 104 o1 := &model.Post{} 105 o1.ChannelId = c1.Id 106 o1.UserId = u1.Id 107 o1.CreateAt = model.GetMillis() 108 o1.Message = "zz" + model.NewId() + "b" 109 o1 = store.Must(ss.Post().Save(o1)).(*model.Post) 110 111 o1a := &model.Post{} 112 o1a.ChannelId = c1.Id 113 o1a.UserId = u1.Id 114 o1a.CreateAt = o1.CreateAt + 10 115 o1a.Message = "zz" + model.NewId() + "b" 116 o1a = store.Must(ss.Post().Save(o1a)).(*model.Post) 117 118 o2 := &model.Post{} 119 o2.ChannelId = c1.Id 120 o2.UserId = u1.Id 121 o2.CreateAt = o1.CreateAt + 20 122 o2.Message = "zz" + model.NewId() + "b" 123 o2 = store.Must(ss.Post().Save(o2)).(*model.Post) 124 125 o2a := &model.Post{} 126 o2a.ChannelId = c1.Id 127 o2a.UserId = u2.Id 128 o2a.CreateAt = o1.CreateAt + 30 129 o2a.Message = "zz" + model.NewId() + "b" 130 o2a = store.Must(ss.Post().Save(o2a)).(*model.Post) 131 132 time.Sleep(100 * time.Millisecond) 133 134 cr1 := &model.Compliance{Desc: "test" + model.NewId(), StartAt: o1.CreateAt - 1, EndAt: o2a.CreateAt + 1} 135 if r1 := <-ss.Compliance().ComplianceExport(cr1); r1.Err != nil { 136 t.Fatal(r1.Err) 137 } else { 138 cposts := r1.Data.([]*model.CompliancePost) 139 140 if len(cposts) != 4 { 141 t.Fatal("return wrong results length") 142 } 143 144 if cposts[0].PostId != o1.Id { 145 t.Fatal("Wrong sort") 146 } 147 148 if cposts[3].PostId != o2a.Id { 149 t.Fatal("Wrong sort") 150 } 151 } 152 153 cr2 := &model.Compliance{Desc: "test" + model.NewId(), StartAt: o1.CreateAt - 1, EndAt: o2a.CreateAt + 1, Emails: u2.Email} 154 if r1 := <-ss.Compliance().ComplianceExport(cr2); r1.Err != nil { 155 t.Fatal(r1.Err) 156 } else { 157 cposts := r1.Data.([]*model.CompliancePost) 158 159 if len(cposts) != 1 { 160 t.Fatal("return wrong results length") 161 } 162 163 if cposts[0].PostId != o2a.Id { 164 t.Fatal("Wrong sort") 165 } 166 } 167 168 cr3 := &model.Compliance{Desc: "test" + model.NewId(), StartAt: o1.CreateAt - 1, EndAt: o2a.CreateAt + 1, Emails: u2.Email + ", " + u1.Email} 169 if r1 := <-ss.Compliance().ComplianceExport(cr3); r1.Err != nil { 170 t.Fatal(r1.Err) 171 } else { 172 cposts := r1.Data.([]*model.CompliancePost) 173 174 if len(cposts) != 4 { 175 t.Fatal("return wrong results length") 176 } 177 178 if cposts[0].PostId != o1.Id { 179 t.Fatal("Wrong sort") 180 } 181 182 if cposts[3].PostId != o2a.Id { 183 t.Fatal("Wrong sort") 184 } 185 } 186 187 cr4 := &model.Compliance{Desc: "test" + model.NewId(), StartAt: o1.CreateAt - 1, EndAt: o2a.CreateAt + 1, Keywords: o2a.Message} 188 if r1 := <-ss.Compliance().ComplianceExport(cr4); r1.Err != nil { 189 t.Fatal(r1.Err) 190 } else { 191 cposts := r1.Data.([]*model.CompliancePost) 192 193 if len(cposts) != 1 { 194 t.Fatal("return wrong results length") 195 } 196 197 if cposts[0].PostId != o2a.Id { 198 t.Fatal("Wrong sort") 199 } 200 } 201 202 cr5 := &model.Compliance{Desc: "test" + model.NewId(), StartAt: o1.CreateAt - 1, EndAt: o2a.CreateAt + 1, Keywords: o2a.Message + " " + o1.Message} 203 if r1 := <-ss.Compliance().ComplianceExport(cr5); r1.Err != nil { 204 t.Fatal(r1.Err) 205 } else { 206 cposts := r1.Data.([]*model.CompliancePost) 207 208 if len(cposts) != 2 { 209 t.Fatal("return wrong results length") 210 } 211 212 if cposts[0].PostId != o1.Id { 213 t.Fatal("Wrong sort") 214 } 215 } 216 217 cr6 := &model.Compliance{Desc: "test" + model.NewId(), StartAt: o1.CreateAt - 1, EndAt: o2a.CreateAt + 1, Emails: u2.Email + ", " + u1.Email, Keywords: o2a.Message + " " + o1.Message} 218 if r1 := <-ss.Compliance().ComplianceExport(cr6); r1.Err != nil { 219 t.Fatal(r1.Err) 220 } else { 221 cposts := r1.Data.([]*model.CompliancePost) 222 223 if len(cposts) != 2 { 224 t.Fatal("return wrong results length") 225 } 226 227 if cposts[0].PostId != o1.Id { 228 t.Fatal("Wrong sort") 229 } 230 231 if cposts[1].PostId != o2a.Id { 232 t.Fatal("Wrong sort") 233 } 234 } 235 } 236 237 func testComplianceExportDirectMessages(t *testing.T, ss store.Store) { 238 time.Sleep(100 * time.Millisecond) 239 240 t1 := &model.Team{} 241 t1.DisplayName = "DisplayName" 242 t1.Name = "zz" + model.NewId() + "b" 243 t1.Email = model.NewId() + "@nowhere.com" 244 t1.Type = model.TEAM_OPEN 245 t1 = store.Must(ss.Team().Save(t1)).(*model.Team) 246 247 u1 := &model.User{} 248 u1.Email = model.NewId() 249 u1.Username = model.NewId() 250 u1 = store.Must(ss.User().Save(u1)).(*model.User) 251 store.Must(ss.Team().SaveMember(&model.TeamMember{TeamId: t1.Id, UserId: u1.Id}, -1)) 252 253 u2 := &model.User{} 254 u2.Email = model.NewId() 255 u2.Username = model.NewId() 256 u2 = store.Must(ss.User().Save(u2)).(*model.User) 257 store.Must(ss.Team().SaveMember(&model.TeamMember{TeamId: t1.Id, UserId: u2.Id}, -1)) 258 259 c1 := &model.Channel{} 260 c1.TeamId = t1.Id 261 c1.DisplayName = "Channel2" 262 c1.Name = "zz" + model.NewId() + "b" 263 c1.Type = model.CHANNEL_OPEN 264 c1 = store.Must(ss.Channel().Save(c1, -1)).(*model.Channel) 265 266 cDM := store.Must(ss.Channel().CreateDirectChannel(u1.Id, u2.Id)).(*model.Channel) 267 268 o1 := &model.Post{} 269 o1.ChannelId = c1.Id 270 o1.UserId = u1.Id 271 o1.CreateAt = model.GetMillis() 272 o1.Message = "zz" + model.NewId() + "b" 273 o1 = store.Must(ss.Post().Save(o1)).(*model.Post) 274 275 o1a := &model.Post{} 276 o1a.ChannelId = c1.Id 277 o1a.UserId = u1.Id 278 o1a.CreateAt = o1.CreateAt + 10 279 o1a.Message = "zz" + model.NewId() + "b" 280 o1a = store.Must(ss.Post().Save(o1a)).(*model.Post) 281 282 o2 := &model.Post{} 283 o2.ChannelId = c1.Id 284 o2.UserId = u1.Id 285 o2.CreateAt = o1.CreateAt + 20 286 o2.Message = "zz" + model.NewId() + "b" 287 o2 = store.Must(ss.Post().Save(o2)).(*model.Post) 288 289 o2a := &model.Post{} 290 o2a.ChannelId = c1.Id 291 o2a.UserId = u2.Id 292 o2a.CreateAt = o1.CreateAt + 30 293 o2a.Message = "zz" + model.NewId() + "b" 294 o2a = store.Must(ss.Post().Save(o2a)).(*model.Post) 295 296 o3 := &model.Post{} 297 o3.ChannelId = cDM.Id 298 o3.UserId = u1.Id 299 o3.CreateAt = o1.CreateAt + 40 300 o3.Message = "zz" + model.NewId() + "b" 301 o3 = store.Must(ss.Post().Save(o3)).(*model.Post) 302 303 time.Sleep(100 * time.Millisecond) 304 305 cr1 := &model.Compliance{Desc: "test" + model.NewId(), StartAt: o1.CreateAt - 1, EndAt: o3.CreateAt + 1, Emails: u1.Email} 306 if r1 := <-ss.Compliance().ComplianceExport(cr1); r1.Err != nil { 307 t.Fatal(r1.Err) 308 } else { 309 cposts := r1.Data.([]*model.CompliancePost) 310 311 if len(cposts) != 4 { 312 t.Fatal("return wrong results length") 313 } 314 315 if cposts[0].PostId != o1.Id { 316 t.Fatal("Wrong sort") 317 } 318 319 if cposts[len(cposts)-1].PostId != o3.Id { 320 t.Fatal("Wrong sort") 321 } 322 } 323 } 324 325 func testMessageExportPublicChannel(t *testing.T, ss store.Store) { 326 // get the starting number of message export entries 327 startTime := model.GetMillis() 328 var numMessageExports = 0 329 if r1 := <-ss.Compliance().MessageExport(startTime-10, 10); r1.Err != nil { 330 t.Fatal(r1.Err) 331 } else { 332 messages := r1.Data.([]*model.MessageExport) 333 numMessageExports = len(messages) 334 } 335 336 // need a team 337 team := &model.Team{ 338 DisplayName: "DisplayName", 339 Name: "zz" + model.NewId() + "b", 340 Email: model.NewId() + "@nowhere.com", 341 Type: model.TEAM_OPEN, 342 } 343 team = store.Must(ss.Team().Save(team)).(*model.Team) 344 345 // and two users that are a part of that team 346 user1 := &model.User{ 347 Email: model.NewId(), 348 Username: model.NewId(), 349 } 350 user1 = store.Must(ss.User().Save(user1)).(*model.User) 351 store.Must(ss.Team().SaveMember(&model.TeamMember{ 352 TeamId: team.Id, 353 UserId: user1.Id, 354 }, -1)) 355 356 user2 := &model.User{ 357 Email: model.NewId(), 358 Username: model.NewId(), 359 } 360 user2 = store.Must(ss.User().Save(user2)).(*model.User) 361 store.Must(ss.Team().SaveMember(&model.TeamMember{ 362 TeamId: team.Id, 363 UserId: user2.Id, 364 }, -1)) 365 366 // need a public channel 367 channel := &model.Channel{ 368 TeamId: team.Id, 369 Name: model.NewId(), 370 DisplayName: "Public Channel", 371 Type: model.CHANNEL_OPEN, 372 } 373 channel = store.Must(ss.Channel().Save(channel, -1)).(*model.Channel) 374 375 // user1 posts twice in the public channel 376 post1 := &model.Post{ 377 ChannelId: channel.Id, 378 UserId: user1.Id, 379 CreateAt: startTime, 380 Message: "zz" + model.NewId() + "a", 381 } 382 post1 = store.Must(ss.Post().Save(post1)).(*model.Post) 383 384 post2 := &model.Post{ 385 ChannelId: channel.Id, 386 UserId: user1.Id, 387 CreateAt: startTime + 10, 388 Message: "zz" + model.NewId() + "b", 389 } 390 post2 = store.Must(ss.Post().Save(post2)).(*model.Post) 391 392 // fetch the message exports for both posts that user1 sent 393 messageExportMap := map[string]model.MessageExport{} 394 if r1 := <-ss.Compliance().MessageExport(startTime-10, 10); r1.Err != nil { 395 t.Fatal(r1.Err) 396 } else { 397 messages := r1.Data.([]*model.MessageExport) 398 assert.Equal(t, numMessageExports+2, len(messages)) 399 400 for _, v := range messages { 401 messageExportMap[*v.PostId] = *v 402 } 403 } 404 405 // post1 was made by user1 in channel1 and team1 406 assert.Equal(t, post1.Id, *messageExportMap[post1.Id].PostId) 407 assert.Equal(t, post1.CreateAt, *messageExportMap[post1.Id].PostCreateAt) 408 assert.Equal(t, post1.Message, *messageExportMap[post1.Id].PostMessage) 409 assert.Equal(t, channel.Id, *messageExportMap[post1.Id].ChannelId) 410 assert.Equal(t, channel.DisplayName, *messageExportMap[post1.Id].ChannelDisplayName) 411 assert.Equal(t, user1.Id, *messageExportMap[post1.Id].UserId) 412 assert.Equal(t, user1.Email, *messageExportMap[post1.Id].UserEmail) 413 assert.Equal(t, user1.Username, *messageExportMap[post1.Id].Username) 414 415 // post2 was made by user1 in channel1 and team1 416 assert.Equal(t, post2.Id, *messageExportMap[post2.Id].PostId) 417 assert.Equal(t, post2.CreateAt, *messageExportMap[post2.Id].PostCreateAt) 418 assert.Equal(t, post2.Message, *messageExportMap[post2.Id].PostMessage) 419 assert.Equal(t, channel.Id, *messageExportMap[post2.Id].ChannelId) 420 assert.Equal(t, channel.DisplayName, *messageExportMap[post2.Id].ChannelDisplayName) 421 assert.Equal(t, user1.Id, *messageExportMap[post2.Id].UserId) 422 assert.Equal(t, user1.Email, *messageExportMap[post2.Id].UserEmail) 423 assert.Equal(t, user1.Username, *messageExportMap[post2.Id].Username) 424 } 425 426 func testMessageExportPrivateChannel(t *testing.T, ss store.Store) { 427 // get the starting number of message export entries 428 startTime := model.GetMillis() 429 var numMessageExports = 0 430 if r1 := <-ss.Compliance().MessageExport(startTime-10, 10); r1.Err != nil { 431 t.Fatal(r1.Err) 432 } else { 433 messages := r1.Data.([]*model.MessageExport) 434 numMessageExports = len(messages) 435 } 436 437 // need a team 438 team := &model.Team{ 439 DisplayName: "DisplayName", 440 Name: "zz" + model.NewId() + "b", 441 Email: model.NewId() + "@nowhere.com", 442 Type: model.TEAM_OPEN, 443 } 444 team = store.Must(ss.Team().Save(team)).(*model.Team) 445 446 // and two users that are a part of that team 447 user1 := &model.User{ 448 Email: model.NewId(), 449 Username: model.NewId(), 450 } 451 user1 = store.Must(ss.User().Save(user1)).(*model.User) 452 store.Must(ss.Team().SaveMember(&model.TeamMember{ 453 TeamId: team.Id, 454 UserId: user1.Id, 455 }, -1)) 456 457 user2 := &model.User{ 458 Email: model.NewId(), 459 Username: model.NewId(), 460 } 461 user2 = store.Must(ss.User().Save(user2)).(*model.User) 462 store.Must(ss.Team().SaveMember(&model.TeamMember{ 463 TeamId: team.Id, 464 UserId: user2.Id, 465 }, -1)) 466 467 // need a private channel 468 channel := &model.Channel{ 469 TeamId: team.Id, 470 Name: model.NewId(), 471 DisplayName: "Private Channel", 472 Type: model.CHANNEL_PRIVATE, 473 } 474 channel = store.Must(ss.Channel().Save(channel, -1)).(*model.Channel) 475 476 // user1 posts twice in the private channel 477 post1 := &model.Post{ 478 ChannelId: channel.Id, 479 UserId: user1.Id, 480 CreateAt: startTime, 481 Message: "zz" + model.NewId() + "a", 482 } 483 post1 = store.Must(ss.Post().Save(post1)).(*model.Post) 484 485 post2 := &model.Post{ 486 ChannelId: channel.Id, 487 UserId: user1.Id, 488 CreateAt: startTime + 10, 489 Message: "zz" + model.NewId() + "b", 490 } 491 post2 = store.Must(ss.Post().Save(post2)).(*model.Post) 492 493 // fetch the message exports for both posts that user1 sent 494 messageExportMap := map[string]model.MessageExport{} 495 if r1 := <-ss.Compliance().MessageExport(startTime-10, 10); r1.Err != nil { 496 t.Fatal(r1.Err) 497 } else { 498 messages := r1.Data.([]*model.MessageExport) 499 assert.Equal(t, numMessageExports+2, len(messages)) 500 501 for _, v := range messages { 502 messageExportMap[*v.PostId] = *v 503 } 504 } 505 506 // post1 was made by user1 in channel1 and team1 507 assert.Equal(t, post1.Id, *messageExportMap[post1.Id].PostId) 508 assert.Equal(t, post1.CreateAt, *messageExportMap[post1.Id].PostCreateAt) 509 assert.Equal(t, post1.Message, *messageExportMap[post1.Id].PostMessage) 510 assert.Equal(t, channel.Id, *messageExportMap[post1.Id].ChannelId) 511 assert.Equal(t, channel.DisplayName, *messageExportMap[post1.Id].ChannelDisplayName) 512 assert.Equal(t, channel.Type, *messageExportMap[post1.Id].ChannelType) 513 assert.Equal(t, user1.Id, *messageExportMap[post1.Id].UserId) 514 assert.Equal(t, user1.Email, *messageExportMap[post1.Id].UserEmail) 515 assert.Equal(t, user1.Username, *messageExportMap[post1.Id].Username) 516 517 // post2 was made by user1 in channel1 and team1 518 assert.Equal(t, post2.Id, *messageExportMap[post2.Id].PostId) 519 assert.Equal(t, post2.CreateAt, *messageExportMap[post2.Id].PostCreateAt) 520 assert.Equal(t, post2.Message, *messageExportMap[post2.Id].PostMessage) 521 assert.Equal(t, channel.Id, *messageExportMap[post2.Id].ChannelId) 522 assert.Equal(t, channel.DisplayName, *messageExportMap[post2.Id].ChannelDisplayName) 523 assert.Equal(t, channel.Type, *messageExportMap[post2.Id].ChannelType) 524 assert.Equal(t, user1.Id, *messageExportMap[post2.Id].UserId) 525 assert.Equal(t, user1.Email, *messageExportMap[post2.Id].UserEmail) 526 assert.Equal(t, user1.Username, *messageExportMap[post2.Id].Username) 527 } 528 529 func testMessageExportDirectMessageChannel(t *testing.T, ss store.Store) { 530 // get the starting number of message export entries 531 startTime := model.GetMillis() 532 var numMessageExports = 0 533 if r1 := <-ss.Compliance().MessageExport(startTime-10, 10); r1.Err != nil { 534 t.Fatal(r1.Err) 535 } else { 536 messages := r1.Data.([]*model.MessageExport) 537 numMessageExports = len(messages) 538 } 539 540 // need a team 541 team := &model.Team{ 542 DisplayName: "DisplayName", 543 Name: "zz" + model.NewId() + "b", 544 Email: model.NewId() + "@nowhere.com", 545 Type: model.TEAM_OPEN, 546 } 547 team = store.Must(ss.Team().Save(team)).(*model.Team) 548 549 // and two users that are a part of that team 550 user1 := &model.User{ 551 Email: model.NewId(), 552 Username: model.NewId(), 553 } 554 user1 = store.Must(ss.User().Save(user1)).(*model.User) 555 store.Must(ss.Team().SaveMember(&model.TeamMember{ 556 TeamId: team.Id, 557 UserId: user1.Id, 558 }, -1)) 559 560 user2 := &model.User{ 561 Email: model.NewId(), 562 Username: model.NewId(), 563 } 564 user2 = store.Must(ss.User().Save(user2)).(*model.User) 565 store.Must(ss.Team().SaveMember(&model.TeamMember{ 566 TeamId: team.Id, 567 UserId: user2.Id, 568 }, -1)) 569 570 // as well as a DM channel between those users 571 directMessageChannel := store.Must(ss.Channel().CreateDirectChannel(user1.Id, user2.Id)).(*model.Channel) 572 573 // user1 also sends a DM to user2 574 post := &model.Post{ 575 ChannelId: directMessageChannel.Id, 576 UserId: user1.Id, 577 CreateAt: startTime + 20, 578 Message: "zz" + model.NewId() + "c", 579 } 580 post = store.Must(ss.Post().Save(post)).(*model.Post) 581 582 // fetch the message export for the post that user1 sent 583 messageExportMap := map[string]model.MessageExport{} 584 if r1 := <-ss.Compliance().MessageExport(startTime-10, 10); r1.Err != nil { 585 t.Fatal(r1.Err) 586 } else { 587 messages := r1.Data.([]*model.MessageExport) 588 assert.Equal(t, numMessageExports+1, len(messages)) 589 590 for _, v := range messages { 591 messageExportMap[*v.PostId] = *v 592 } 593 } 594 595 // post is a DM between user1 and user2 596 // there is no channel display name for direct messages, so we sub in the string "Direct Message" instead 597 assert.Equal(t, post.Id, *messageExportMap[post.Id].PostId) 598 assert.Equal(t, post.CreateAt, *messageExportMap[post.Id].PostCreateAt) 599 assert.Equal(t, post.Message, *messageExportMap[post.Id].PostMessage) 600 assert.Equal(t, directMessageChannel.Id, *messageExportMap[post.Id].ChannelId) 601 assert.Equal(t, "Direct Message", *messageExportMap[post.Id].ChannelDisplayName) 602 assert.Equal(t, user1.Id, *messageExportMap[post.Id].UserId) 603 assert.Equal(t, user1.Email, *messageExportMap[post.Id].UserEmail) 604 assert.Equal(t, user1.Username, *messageExportMap[post.Id].Username) 605 } 606 607 func testMessageExportGroupMessageChannel(t *testing.T, ss store.Store) { 608 // get the starting number of message export entries 609 startTime := model.GetMillis() 610 var numMessageExports = 0 611 if r1 := <-ss.Compliance().MessageExport(startTime-10, 10); r1.Err != nil { 612 t.Fatal(r1.Err) 613 } else { 614 messages := r1.Data.([]*model.MessageExport) 615 numMessageExports = len(messages) 616 } 617 618 // need a team 619 team := &model.Team{ 620 DisplayName: "DisplayName", 621 Name: "zz" + model.NewId() + "b", 622 Email: model.NewId() + "@nowhere.com", 623 Type: model.TEAM_OPEN, 624 } 625 team = store.Must(ss.Team().Save(team)).(*model.Team) 626 627 // and three users that are a part of that team 628 user1 := &model.User{ 629 Email: model.NewId(), 630 Username: model.NewId(), 631 } 632 user1 = store.Must(ss.User().Save(user1)).(*model.User) 633 store.Must(ss.Team().SaveMember(&model.TeamMember{ 634 TeamId: team.Id, 635 UserId: user1.Id, 636 }, -1)) 637 638 user2 := &model.User{ 639 Email: model.NewId(), 640 Username: model.NewId(), 641 } 642 user2 = store.Must(ss.User().Save(user2)).(*model.User) 643 store.Must(ss.Team().SaveMember(&model.TeamMember{ 644 TeamId: team.Id, 645 UserId: user2.Id, 646 }, -1)) 647 648 user3 := &model.User{ 649 Email: model.NewId(), 650 Username: model.NewId(), 651 } 652 user3 = store.Must(ss.User().Save(user3)).(*model.User) 653 store.Must(ss.Team().SaveMember(&model.TeamMember{ 654 TeamId: team.Id, 655 UserId: user3.Id, 656 }, -1)) 657 658 // can't create a group channel directly, because importing app creates an import cycle, so we have to fake it 659 groupMessageChannel := &model.Channel{ 660 TeamId: team.Id, 661 Name: model.NewId(), 662 Type: model.CHANNEL_GROUP, 663 } 664 groupMessageChannel = store.Must(ss.Channel().Save(groupMessageChannel, -1)).(*model.Channel) 665 666 // user1 posts in the GM 667 post := &model.Post{ 668 ChannelId: groupMessageChannel.Id, 669 UserId: user1.Id, 670 CreateAt: startTime + 20, 671 Message: "zz" + model.NewId() + "c", 672 } 673 post = store.Must(ss.Post().Save(post)).(*model.Post) 674 675 // fetch the message export for the post that user1 sent 676 messageExportMap := map[string]model.MessageExport{} 677 if r1 := <-ss.Compliance().MessageExport(startTime-10, 10); r1.Err != nil { 678 t.Fatal(r1.Err) 679 } else { 680 messages := r1.Data.([]*model.MessageExport) 681 assert.Equal(t, numMessageExports+1, len(messages)) 682 683 for _, v := range messages { 684 messageExportMap[*v.PostId] = *v 685 } 686 } 687 688 // post is a DM between user1 and user2 689 // there is no channel display name for direct messages, so we sub in the string "Direct Message" instead 690 assert.Equal(t, post.Id, *messageExportMap[post.Id].PostId) 691 assert.Equal(t, post.CreateAt, *messageExportMap[post.Id].PostCreateAt) 692 assert.Equal(t, post.Message, *messageExportMap[post.Id].PostMessage) 693 assert.Equal(t, groupMessageChannel.Id, *messageExportMap[post.Id].ChannelId) 694 assert.Equal(t, "Group Message", *messageExportMap[post.Id].ChannelDisplayName) 695 assert.Equal(t, user1.Id, *messageExportMap[post.Id].UserId) 696 assert.Equal(t, user1.Email, *messageExportMap[post.Id].UserEmail) 697 assert.Equal(t, user1.Username, *messageExportMap[post.Id].Username) 698 }