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