github.com/mattermost/mattermost-server/v5@v5.39.3/store/storetest/shared_channel_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 "strconv" 8 "testing" 9 "time" 10 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 14 "github.com/mattermost/mattermost-server/v5/model" 15 "github.com/mattermost/mattermost-server/v5/store" 16 ) 17 18 func TestSharedChannelStore(t *testing.T, ss store.Store, s SqlStore) { 19 t.Run("SaveSharedChannel", func(t *testing.T) { testSaveSharedChannel(t, ss) }) 20 t.Run("GetSharedChannel", func(t *testing.T) { testGetSharedChannel(t, ss) }) 21 t.Run("HasSharedChannel", func(t *testing.T) { testHasSharedChannel(t, ss) }) 22 t.Run("GetSharedChannels", func(t *testing.T) { testGetSharedChannels(t, ss) }) 23 t.Run("UpdateSharedChannel", func(t *testing.T) { testUpdateSharedChannel(t, ss) }) 24 t.Run("DeleteSharedChannel", func(t *testing.T) { testDeleteSharedChannel(t, ss) }) 25 26 t.Run("SaveSharedChannelRemote", func(t *testing.T) { testSaveSharedChannelRemote(t, ss) }) 27 t.Run("UpdateSharedChannelRemote", func(t *testing.T) { testUpdateSharedChannelRemote(t, ss) }) 28 t.Run("GetSharedChannelRemote", func(t *testing.T) { testGetSharedChannelRemote(t, ss) }) 29 t.Run("GetSharedChannelRemoteByIds", func(t *testing.T) { testGetSharedChannelRemoteByIds(t, ss) }) 30 t.Run("GetSharedChannelRemotes", func(t *testing.T) { testGetSharedChannelRemotes(t, ss) }) 31 t.Run("HasRemote", func(t *testing.T) { testHasRemote(t, ss) }) 32 t.Run("GetRemoteForUser", func(t *testing.T) { testGetRemoteForUser(t, ss) }) 33 t.Run("UpdateSharedChannelRemoteNextSyncAt", func(t *testing.T) { testUpdateSharedChannelRemoteCursor(t, ss) }) 34 t.Run("DeleteSharedChannelRemote", func(t *testing.T) { testDeleteSharedChannelRemote(t, ss) }) 35 36 t.Run("SaveSharedChannelUser", func(t *testing.T) { testSaveSharedChannelUser(t, ss) }) 37 t.Run("GetSharedChannelSingleUser", func(t *testing.T) { testGetSingleSharedChannelUser(t, ss) }) 38 t.Run("GetSharedChannelUser", func(t *testing.T) { testGetSharedChannelUser(t, ss) }) 39 t.Run("GetSharedChannelUsersForSync", func(t *testing.T) { testGetSharedChannelUsersForSync(t, ss) }) 40 t.Run("UpdateSharedChannelUserLastSyncAt", func(t *testing.T) { testUpdateSharedChannelUserLastSyncAt(t, ss) }) 41 42 t.Run("SaveSharedChannelAttachment", func(t *testing.T) { testSaveSharedChannelAttachment(t, ss) }) 43 t.Run("UpsertSharedChannelAttachment", func(t *testing.T) { testUpsertSharedChannelAttachment(t, ss) }) 44 t.Run("GetSharedChannelAttachment", func(t *testing.T) { testGetSharedChannelAttachment(t, ss) }) 45 t.Run("UpdateSharedChannelAttachmentLastSyncAt", func(t *testing.T) { testUpdateSharedChannelAttachmentLastSyncAt(t, ss) }) 46 } 47 48 func testSaveSharedChannel(t *testing.T, ss store.Store) { 49 t.Run("Save shared channel (home)", func(t *testing.T) { 50 channel, err := createTestChannel(ss, "test_save") 51 require.NoError(t, err) 52 53 sc := &model.SharedChannel{ 54 ChannelId: channel.Id, 55 TeamId: channel.TeamId, 56 CreatorId: model.NewId(), 57 ShareName: "testshare", 58 Home: true, 59 } 60 61 scSaved, err := ss.SharedChannel().Save(sc) 62 require.NoError(t, err, "couldn't save shared channel") 63 64 require.Equal(t, sc.ChannelId, scSaved.ChannelId) 65 require.Equal(t, sc.TeamId, scSaved.TeamId) 66 require.Equal(t, sc.CreatorId, scSaved.CreatorId) 67 68 // ensure channel's Shared flag is set 69 channelMod, err := ss.Channel().Get(channel.Id, false) 70 require.NoError(t, err) 71 require.True(t, channelMod.IsShared()) 72 }) 73 74 t.Run("Save shared channel (remote)", func(t *testing.T) { 75 channel, err := createTestChannel(ss, "test_save2") 76 require.NoError(t, err) 77 78 sc := &model.SharedChannel{ 79 ChannelId: channel.Id, 80 TeamId: channel.TeamId, 81 CreatorId: model.NewId(), 82 ShareName: "testshare", 83 RemoteId: model.NewId(), 84 } 85 86 scSaved, err := ss.SharedChannel().Save(sc) 87 require.NoError(t, err, "couldn't save shared channel", err) 88 89 require.Equal(t, sc.ChannelId, scSaved.ChannelId) 90 require.Equal(t, sc.TeamId, scSaved.TeamId) 91 require.Equal(t, sc.CreatorId, scSaved.CreatorId) 92 93 // ensure channel's Shared flag is set 94 channelMod, err := ss.Channel().Get(channel.Id, false) 95 require.NoError(t, err) 96 require.True(t, channelMod.IsShared()) 97 }) 98 99 t.Run("Save invalid shared channel", func(t *testing.T) { 100 sc := &model.SharedChannel{ 101 ChannelId: "", 102 TeamId: model.NewId(), 103 CreatorId: model.NewId(), 104 ShareName: "testshare", 105 Home: true, 106 } 107 108 _, err := ss.SharedChannel().Save(sc) 109 require.Error(t, err, "should error saving invalid shared channel", err) 110 }) 111 112 t.Run("Save with invalid channel id", func(t *testing.T) { 113 sc := &model.SharedChannel{ 114 ChannelId: model.NewId(), 115 TeamId: model.NewId(), 116 CreatorId: model.NewId(), 117 ShareName: "testshare", 118 RemoteId: model.NewId(), 119 } 120 121 _, err := ss.SharedChannel().Save(sc) 122 require.Error(t, err, "expected error for invalid channel id") 123 }) 124 } 125 126 func testGetSharedChannel(t *testing.T, ss store.Store) { 127 channel, err := createTestChannel(ss, "test_get") 128 require.NoError(t, err) 129 130 sc := &model.SharedChannel{ 131 ChannelId: channel.Id, 132 TeamId: channel.TeamId, 133 CreatorId: model.NewId(), 134 ShareName: "testshare", 135 Home: true, 136 } 137 138 scSaved, err := ss.SharedChannel().Save(sc) 139 require.NoError(t, err, "couldn't save shared channel", err) 140 141 t.Run("Get existing shared channel", func(t *testing.T) { 142 sc, err := ss.SharedChannel().Get(scSaved.ChannelId) 143 require.NoError(t, err, "couldn't get shared channel", err) 144 145 require.Equal(t, sc.ChannelId, scSaved.ChannelId) 146 require.Equal(t, sc.TeamId, scSaved.TeamId) 147 require.Equal(t, sc.CreatorId, scSaved.CreatorId) 148 }) 149 150 t.Run("Get non-existent shared channel", func(t *testing.T) { 151 sc, err := ss.SharedChannel().Get(model.NewId()) 152 require.Error(t, err) 153 require.Nil(t, sc) 154 }) 155 } 156 157 func testHasSharedChannel(t *testing.T, ss store.Store) { 158 channel, err := createTestChannel(ss, "test_get") 159 require.NoError(t, err) 160 161 sc := &model.SharedChannel{ 162 ChannelId: channel.Id, 163 TeamId: channel.TeamId, 164 CreatorId: model.NewId(), 165 ShareName: "testshare", 166 Home: true, 167 } 168 169 scSaved, err := ss.SharedChannel().Save(sc) 170 require.NoError(t, err, "couldn't save shared channel", err) 171 172 t.Run("Get existing shared channel", func(t *testing.T) { 173 exists, err := ss.SharedChannel().HasChannel(scSaved.ChannelId) 174 require.NoError(t, err, "couldn't get shared channel", err) 175 assert.True(t, exists) 176 }) 177 178 t.Run("Get non-existent shared channel", func(t *testing.T) { 179 exists, err := ss.SharedChannel().HasChannel(model.NewId()) 180 require.NoError(t, err) 181 assert.False(t, exists) 182 }) 183 } 184 185 func testGetSharedChannels(t *testing.T, ss store.Store) { 186 require.NoError(t, clearSharedChannels(ss)) 187 188 creator := model.NewId() 189 team1 := model.NewId() 190 team2 := model.NewId() 191 rid := model.NewId() 192 193 data := []model.SharedChannel{ 194 {CreatorId: creator, TeamId: team1, ShareName: "test1", Home: true}, 195 {CreatorId: creator, TeamId: team1, ShareName: "test2", Home: false, RemoteId: rid}, 196 {CreatorId: creator, TeamId: team1, ShareName: "test3", Home: false, RemoteId: rid}, 197 {CreatorId: creator, TeamId: team1, ShareName: "test4", Home: true}, 198 {CreatorId: creator, TeamId: team2, ShareName: "test5", Home: true}, 199 {CreatorId: creator, TeamId: team2, ShareName: "test6", Home: false, RemoteId: rid}, 200 {CreatorId: creator, TeamId: team2, ShareName: "test7", Home: false, RemoteId: rid}, 201 {CreatorId: creator, TeamId: team2, ShareName: "test8", Home: true}, 202 {CreatorId: creator, TeamId: team2, ShareName: "test9", Home: true}, 203 } 204 205 for i, sc := range data { 206 channel, err := createTestChannel(ss, "test_get2_"+strconv.Itoa(i)) 207 require.NoError(t, err) 208 209 sc.ChannelId = channel.Id 210 211 _, err = ss.SharedChannel().Save(&sc) 212 require.NoError(t, err, "error saving shared channel") 213 } 214 215 t.Run("Get shared channels home only", func(t *testing.T) { 216 opts := model.SharedChannelFilterOpts{ 217 ExcludeRemote: true, 218 CreatorId: creator, 219 } 220 221 count, err := ss.SharedChannel().GetAllCount(opts) 222 require.NoError(t, err, "error getting shared channels count") 223 224 home, err := ss.SharedChannel().GetAll(0, 100, opts) 225 require.NoError(t, err, "error getting shared channels") 226 227 require.Equal(t, int(count), len(home)) 228 require.Len(t, home, 5, "should be 5 home channels") 229 for _, sc := range home { 230 require.True(t, sc.Home, "should be home channel") 231 } 232 }) 233 234 t.Run("Get shared channels remote only", func(t *testing.T) { 235 opts := model.SharedChannelFilterOpts{ 236 ExcludeHome: true, 237 } 238 239 count, err := ss.SharedChannel().GetAllCount(opts) 240 require.NoError(t, err, "error getting shared channels count") 241 242 remotes, err := ss.SharedChannel().GetAll(0, 100, opts) 243 require.NoError(t, err, "error getting shared channels") 244 245 require.Equal(t, int(count), len(remotes)) 246 require.Len(t, remotes, 4, "should be 4 remote channels") 247 for _, sc := range remotes { 248 require.False(t, sc.Home, "should be remote channel") 249 } 250 }) 251 252 t.Run("Get shared channels bad opts", func(t *testing.T) { 253 opts := model.SharedChannelFilterOpts{ 254 ExcludeHome: true, 255 ExcludeRemote: true, 256 } 257 _, err := ss.SharedChannel().GetAll(0, 100, opts) 258 require.Error(t, err, "error expected") 259 }) 260 261 t.Run("Get shared channels by team", func(t *testing.T) { 262 opts := model.SharedChannelFilterOpts{ 263 TeamId: team1, 264 } 265 266 count, err := ss.SharedChannel().GetAllCount(opts) 267 require.NoError(t, err, "error getting shared channels count") 268 269 remotes, err := ss.SharedChannel().GetAll(0, 100, opts) 270 require.NoError(t, err, "error getting shared channels") 271 272 require.Equal(t, int(count), len(remotes)) 273 require.Len(t, remotes, 4, "should be 4 matching channels") 274 for _, sc := range remotes { 275 require.Equal(t, team1, sc.TeamId) 276 } 277 }) 278 279 t.Run("Get shared channels invalid pagnation", func(t *testing.T) { 280 opts := model.SharedChannelFilterOpts{ 281 TeamId: team1, 282 } 283 284 _, err := ss.SharedChannel().GetAll(-1, 100, opts) 285 require.Error(t, err) 286 287 _, err = ss.SharedChannel().GetAll(0, -100, opts) 288 require.Error(t, err) 289 }) 290 } 291 292 func testUpdateSharedChannel(t *testing.T, ss store.Store) { 293 channel, err := createTestChannel(ss, "test_update") 294 require.NoError(t, err) 295 296 sc := &model.SharedChannel{ 297 ChannelId: channel.Id, 298 TeamId: channel.TeamId, 299 CreatorId: model.NewId(), 300 ShareName: "testshare", 301 Home: true, 302 } 303 304 scSaved, err := ss.SharedChannel().Save(sc) 305 require.NoError(t, err, "couldn't save shared channel", err) 306 307 t.Run("Update existing shared channel", func(t *testing.T) { 308 id := model.NewId() 309 scMod := scSaved // copy struct (contains basic types only) 310 scMod.ShareName = "newname" 311 scMod.ShareDisplayName = "For testing" 312 scMod.ShareHeader = "This is a header." 313 scMod.RemoteId = id 314 315 scUpdated, err := ss.SharedChannel().Update(scMod) 316 require.NoError(t, err, "couldn't update shared channel", err) 317 318 require.Equal(t, "newname", scUpdated.ShareName) 319 require.Equal(t, "For testing", scUpdated.ShareDisplayName) 320 require.Equal(t, "This is a header.", scUpdated.ShareHeader) 321 require.Equal(t, id, scUpdated.RemoteId) 322 }) 323 324 t.Run("Update non-existent shared channel", func(t *testing.T) { 325 sc := &model.SharedChannel{ 326 ChannelId: model.NewId(), 327 TeamId: model.NewId(), 328 CreatorId: model.NewId(), 329 ShareName: "missingshare", 330 } 331 _, err := ss.SharedChannel().Update(sc) 332 require.Error(t, err, "should error when updating non-existent shared channel", err) 333 }) 334 } 335 336 func testDeleteSharedChannel(t *testing.T, ss store.Store) { 337 channel, err := createTestChannel(ss, "test_delete") 338 require.NoError(t, err) 339 340 sc := &model.SharedChannel{ 341 ChannelId: channel.Id, 342 TeamId: channel.TeamId, 343 CreatorId: model.NewId(), 344 ShareName: "testshare", 345 RemoteId: model.NewId(), 346 } 347 348 _, err = ss.SharedChannel().Save(sc) 349 require.NoError(t, err, "couldn't save shared channel", err) 350 351 // add some remotes 352 for i := 0; i < 10; i++ { 353 remote := &model.SharedChannelRemote{ 354 ChannelId: channel.Id, 355 CreatorId: model.NewId(), 356 RemoteId: model.NewId(), 357 } 358 _, err := ss.SharedChannel().SaveRemote(remote) 359 require.NoError(t, err, "couldn't add remote", err) 360 } 361 362 t.Run("Delete existing shared channel", func(t *testing.T) { 363 deleted, err := ss.SharedChannel().Delete(channel.Id) 364 require.NoError(t, err, "delete existing shared channel should not error", err) 365 require.True(t, deleted, "expected true from delete shared channel") 366 367 sc, err := ss.SharedChannel().Get(channel.Id) 368 require.Error(t, err) 369 require.Nil(t, sc) 370 371 // make sure the remotes were deleted. 372 remotes, err := ss.SharedChannel().GetRemotes(model.SharedChannelRemoteFilterOpts{ChannelId: channel.Id}) 373 require.NoError(t, err) 374 require.Len(t, remotes, 0, "expected empty remotes list") 375 376 // ensure channel's Shared flag is unset 377 channelMod, err := ss.Channel().Get(channel.Id, false) 378 require.NoError(t, err) 379 require.False(t, channelMod.IsShared()) 380 }) 381 382 t.Run("Delete non-existent shared channel", func(t *testing.T) { 383 deleted, err := ss.SharedChannel().Delete(model.NewId()) 384 require.NoError(t, err, "delete non-existent shared channel should not error", err) 385 require.False(t, deleted, "expected false from delete shared channel") 386 }) 387 } 388 389 func testSaveSharedChannelRemote(t *testing.T, ss store.Store) { 390 t.Run("Save shared channel remote", func(t *testing.T) { 391 channel, err := createTestChannel(ss, "test_save_remote") 392 require.NoError(t, err) 393 394 remote := &model.SharedChannelRemote{ 395 ChannelId: channel.Id, 396 CreatorId: model.NewId(), 397 RemoteId: model.NewId(), 398 } 399 400 remoteSaved, err := ss.SharedChannel().SaveRemote(remote) 401 require.NoError(t, err, "couldn't save shared channel remote", err) 402 403 require.Equal(t, remote.ChannelId, remoteSaved.ChannelId) 404 require.Equal(t, remote.CreatorId, remoteSaved.CreatorId) 405 }) 406 407 t.Run("Save invalid shared channel remote", func(t *testing.T) { 408 remote := &model.SharedChannelRemote{ 409 ChannelId: "", 410 CreatorId: model.NewId(), 411 RemoteId: model.NewId(), 412 } 413 414 _, err := ss.SharedChannel().SaveRemote(remote) 415 require.Error(t, err, "should error saving invalid remote", err) 416 }) 417 418 t.Run("Save shared channel remote with invalid channel id", func(t *testing.T) { 419 remote := &model.SharedChannelRemote{ 420 ChannelId: model.NewId(), 421 CreatorId: model.NewId(), 422 RemoteId: model.NewId(), 423 } 424 425 _, err := ss.SharedChannel().SaveRemote(remote) 426 require.Error(t, err, "expected error for invalid channel id") 427 }) 428 } 429 430 func testUpdateSharedChannelRemote(t *testing.T, ss store.Store) { 431 t.Run("Update shared channel remote", func(t *testing.T) { 432 channel, err := createTestChannel(ss, "test_update_remote") 433 require.NoError(t, err) 434 435 remote := &model.SharedChannelRemote{ 436 ChannelId: channel.Id, 437 CreatorId: model.NewId(), 438 RemoteId: model.NewId(), 439 } 440 441 remoteSaved, err := ss.SharedChannel().SaveRemote(remote) 442 require.NoError(t, err, "couldn't save shared channel remote", err) 443 444 remoteSaved.IsInviteAccepted = true 445 remoteSaved.IsInviteConfirmed = true 446 447 remoteUpdated, err := ss.SharedChannel().UpdateRemote(remoteSaved) 448 require.NoError(t, err, "couldn't update shared channel remote", err) 449 450 require.Equal(t, true, remoteUpdated.IsInviteAccepted) 451 require.Equal(t, true, remoteUpdated.IsInviteConfirmed) 452 }) 453 454 t.Run("Update invalid shared channel remote", func(t *testing.T) { 455 remote := &model.SharedChannelRemote{ 456 ChannelId: "", 457 CreatorId: model.NewId(), 458 RemoteId: model.NewId(), 459 } 460 461 _, err := ss.SharedChannel().UpdateRemote(remote) 462 require.Error(t, err, "should error updating invalid remote", err) 463 }) 464 465 t.Run("Update shared channel remote with invalid channel id", func(t *testing.T) { 466 remote := &model.SharedChannelRemote{ 467 ChannelId: model.NewId(), 468 CreatorId: model.NewId(), 469 RemoteId: model.NewId(), 470 } 471 472 _, err := ss.SharedChannel().UpdateRemote(remote) 473 require.Error(t, err, "expected error for invalid channel id") 474 }) 475 } 476 477 func testGetSharedChannelRemote(t *testing.T, ss store.Store) { 478 channel, err := createTestChannel(ss, "test_remote_get") 479 require.NoError(t, err) 480 481 remote := &model.SharedChannelRemote{ 482 ChannelId: channel.Id, 483 CreatorId: model.NewId(), 484 RemoteId: model.NewId(), 485 } 486 487 remoteSaved, err := ss.SharedChannel().SaveRemote(remote) 488 require.NoError(t, err, "couldn't save remote", err) 489 490 t.Run("Get existing shared channel remote", func(t *testing.T) { 491 r, err := ss.SharedChannel().GetRemote(remoteSaved.Id) 492 require.NoError(t, err, "could not get shared channel remote", err) 493 494 require.Equal(t, remoteSaved.Id, r.Id) 495 require.Equal(t, remoteSaved.ChannelId, r.ChannelId) 496 require.Equal(t, remoteSaved.CreatorId, r.CreatorId) 497 require.Equal(t, remoteSaved.RemoteId, r.RemoteId) 498 }) 499 500 t.Run("Get non-existent shared channel remote", func(t *testing.T) { 501 r, err := ss.SharedChannel().GetRemote(model.NewId()) 502 require.Error(t, err) 503 require.Nil(t, r) 504 }) 505 } 506 507 func testGetSharedChannelRemoteByIds(t *testing.T, ss store.Store) { 508 channel, err := createTestChannel(ss, "test_remote_get_by_ids") 509 require.NoError(t, err) 510 511 remote := &model.SharedChannelRemote{ 512 ChannelId: channel.Id, 513 CreatorId: model.NewId(), 514 RemoteId: model.NewId(), 515 } 516 517 remoteSaved, err := ss.SharedChannel().SaveRemote(remote) 518 require.NoError(t, err, "could not save remote", err) 519 520 t.Run("Get existing shared channel remote by ids", func(t *testing.T) { 521 r, err := ss.SharedChannel().GetRemoteByIds(remoteSaved.ChannelId, remoteSaved.RemoteId) 522 require.NoError(t, err, "couldn't get shared channel remote by ids", err) 523 524 require.Equal(t, remoteSaved.Id, r.Id) 525 require.Equal(t, remoteSaved.ChannelId, r.ChannelId) 526 require.Equal(t, remoteSaved.CreatorId, r.CreatorId) 527 require.Equal(t, remoteSaved.RemoteId, r.RemoteId) 528 }) 529 530 t.Run("Get non-existent shared channel remote by ids", func(t *testing.T) { 531 r, err := ss.SharedChannel().GetRemoteByIds(model.NewId(), model.NewId()) 532 require.Error(t, err) 533 require.Nil(t, r) 534 }) 535 } 536 537 func testGetSharedChannelRemotes(t *testing.T, ss store.Store) { 538 channel, err := createTestChannel(ss, "test_remotes_get2") 539 require.NoError(t, err) 540 541 creator := model.NewId() 542 remoteId := model.NewId() 543 544 data := []model.SharedChannelRemote{ 545 {ChannelId: channel.Id, CreatorId: creator, RemoteId: model.NewId(), IsInviteConfirmed: true}, 546 {ChannelId: channel.Id, CreatorId: creator, RemoteId: model.NewId(), IsInviteConfirmed: true}, 547 {ChannelId: channel.Id, CreatorId: creator, RemoteId: model.NewId(), IsInviteConfirmed: true}, 548 {CreatorId: creator, RemoteId: remoteId, IsInviteConfirmed: true}, 549 {CreatorId: creator, RemoteId: remoteId, IsInviteConfirmed: true}, 550 {CreatorId: creator, RemoteId: remoteId}, 551 } 552 553 for i, r := range data { 554 if r.ChannelId == "" { 555 c, err := createTestChannel(ss, "test_remotes_get2_"+strconv.Itoa(i)) 556 require.NoError(t, err) 557 r.ChannelId = c.Id 558 } 559 _, err := ss.SharedChannel().SaveRemote(&r) 560 require.NoError(t, err, "error saving shared channel remote") 561 } 562 563 t.Run("Get shared channel remotes by channel_id", func(t *testing.T) { 564 opts := model.SharedChannelRemoteFilterOpts{ 565 ChannelId: channel.Id, 566 } 567 remotes, err := ss.SharedChannel().GetRemotes(opts) 568 require.NoError(t, err, "should not error", err) 569 require.Len(t, remotes, 3) 570 for _, r := range remotes { 571 require.Equal(t, channel.Id, r.ChannelId) 572 } 573 }) 574 575 t.Run("Get shared channel remotes by invalid channel_id", func(t *testing.T) { 576 opts := model.SharedChannelRemoteFilterOpts{ 577 ChannelId: model.NewId(), 578 } 579 remotes, err := ss.SharedChannel().GetRemotes(opts) 580 require.NoError(t, err, "should not error", err) 581 require.Len(t, remotes, 0) 582 }) 583 584 t.Run("Get shared channel remotes by remote_id", func(t *testing.T) { 585 opts := model.SharedChannelRemoteFilterOpts{ 586 RemoteId: remoteId, 587 } 588 remotes, err := ss.SharedChannel().GetRemotes(opts) 589 require.NoError(t, err, "should not error", err) 590 require.Len(t, remotes, 2) // only confirmed invitations 591 for _, r := range remotes { 592 require.Equal(t, remoteId, r.RemoteId) 593 require.True(t, r.IsInviteConfirmed) 594 } 595 }) 596 597 t.Run("Get shared channel remotes by invalid remote_id", func(t *testing.T) { 598 opts := model.SharedChannelRemoteFilterOpts{ 599 RemoteId: model.NewId(), 600 } 601 remotes, err := ss.SharedChannel().GetRemotes(opts) 602 require.NoError(t, err, "should not error", err) 603 require.Len(t, remotes, 0) 604 }) 605 606 t.Run("Get shared channel remotes by remote_id including unconfirmed", func(t *testing.T) { 607 opts := model.SharedChannelRemoteFilterOpts{ 608 RemoteId: remoteId, 609 InclUnconfirmed: true, 610 } 611 remotes, err := ss.SharedChannel().GetRemotes(opts) 612 require.NoError(t, err, "should not error", err) 613 require.Len(t, remotes, 3) 614 for _, r := range remotes { 615 require.Equal(t, remoteId, r.RemoteId) 616 } 617 }) 618 } 619 620 func testHasRemote(t *testing.T, ss store.Store) { 621 channel, err := createTestChannel(ss, "test_remotes_get2") 622 require.NoError(t, err) 623 624 remote1 := model.NewId() 625 remote2 := model.NewId() 626 627 creator := model.NewId() 628 data := []model.SharedChannelRemote{ 629 {ChannelId: channel.Id, CreatorId: creator, RemoteId: remote1}, 630 {ChannelId: channel.Id, CreatorId: creator, RemoteId: remote2}, 631 } 632 633 for _, r := range data { 634 _, err := ss.SharedChannel().SaveRemote(&r) 635 require.NoError(t, err, "error saving shared channel remote") 636 } 637 638 t.Run("has remote", func(t *testing.T) { 639 has, err := ss.SharedChannel().HasRemote(channel.Id, remote1) 640 require.NoError(t, err) 641 assert.True(t, has) 642 643 has, err = ss.SharedChannel().HasRemote(channel.Id, remote2) 644 require.NoError(t, err) 645 assert.True(t, has) 646 }) 647 648 t.Run("wrong channel id ", func(t *testing.T) { 649 has, err := ss.SharedChannel().HasRemote(model.NewId(), remote1) 650 require.NoError(t, err) 651 assert.False(t, has) 652 }) 653 654 t.Run("wrong remote id", func(t *testing.T) { 655 has, err := ss.SharedChannel().HasRemote(channel.Id, model.NewId()) 656 require.NoError(t, err) 657 assert.False(t, has) 658 }) 659 } 660 661 func testGetRemoteForUser(t *testing.T, ss store.Store) { 662 // add remotes, and users to simulated shared channels. 663 teamId := model.NewId() 664 channel, err := createSharedTestChannel(ss, "share_test_channel", true) 665 require.NoError(t, err) 666 remotes := []*model.RemoteCluster{ 667 {RemoteId: model.NewId(), SiteURL: model.NewId(), CreatorId: model.NewId(), RemoteTeamId: teamId, Name: "Test_Remote_1"}, 668 {RemoteId: model.NewId(), SiteURL: model.NewId(), CreatorId: model.NewId(), RemoteTeamId: teamId, Name: "Test_Remote_2"}, 669 {RemoteId: model.NewId(), SiteURL: model.NewId(), CreatorId: model.NewId(), RemoteTeamId: teamId, Name: "Test_Remote_3"}, 670 } 671 var channelRemotes []*model.SharedChannelRemote 672 for _, rc := range remotes { 673 _, err := ss.RemoteCluster().Save(rc) 674 require.NoError(t, err) 675 676 scr := &model.SharedChannelRemote{Id: model.NewId(), CreatorId: rc.CreatorId, ChannelId: channel.Id, RemoteId: rc.RemoteId} 677 scr, err = ss.SharedChannel().SaveRemote(scr) 678 require.NoError(t, err) 679 channelRemotes = append(channelRemotes, scr) 680 } 681 users := []string{model.NewId(), model.NewId(), model.NewId()} 682 for _, id := range users { 683 member := &model.ChannelMember{ 684 ChannelId: channel.Id, 685 UserId: id, 686 NotifyProps: model.GetDefaultChannelNotifyProps(), 687 SchemeGuest: false, 688 SchemeUser: true, 689 } 690 _, err := ss.Channel().SaveMember(member) 691 require.NoError(t, err) 692 } 693 694 t.Run("user is member", func(t *testing.T) { 695 for _, rc := range remotes { 696 for _, userId := range users { 697 rcFound, err := ss.SharedChannel().GetRemoteForUser(rc.RemoteId, userId) 698 assert.NoError(t, err, "remote should be found for user") 699 assert.Equal(t, rc.RemoteId, rcFound.RemoteId, "remoteIds should match") 700 } 701 } 702 }) 703 704 t.Run("user is not a member", func(t *testing.T) { 705 for _, rc := range remotes { 706 rcFound, err := ss.SharedChannel().GetRemoteForUser(rc.RemoteId, model.NewId()) 707 assert.Error(t, err, "remote should not be found for user") 708 assert.Nil(t, rcFound) 709 } 710 }) 711 712 t.Run("unknown remote id", func(t *testing.T) { 713 rcFound, err := ss.SharedChannel().GetRemoteForUser(model.NewId(), users[0]) 714 assert.Error(t, err, "remote should not be found for unknown remote id") 715 assert.Nil(t, rcFound) 716 }) 717 } 718 719 func testUpdateSharedChannelRemoteCursor(t *testing.T, ss store.Store) { 720 channel, err := createTestChannel(ss, "test_remote_update_next_sync_at") 721 require.NoError(t, err) 722 723 remote := &model.SharedChannelRemote{ 724 ChannelId: channel.Id, 725 CreatorId: model.NewId(), 726 RemoteId: model.NewId(), 727 } 728 729 remoteSaved, err := ss.SharedChannel().SaveRemote(remote) 730 require.NoError(t, err, "couldn't save remote", err) 731 732 future := model.GetMillis() + 3600000 // 1 hour in the future 733 postID := model.NewId() 734 735 cursor := model.GetPostsSinceForSyncCursor{ 736 LastPostUpdateAt: future, 737 LastPostId: postID, 738 } 739 740 t.Run("Update NextSyncAt for remote", func(t *testing.T) { 741 err := ss.SharedChannel().UpdateRemoteCursor(remoteSaved.Id, cursor) 742 require.NoError(t, err, "update NextSyncAt should not error", err) 743 744 r, err := ss.SharedChannel().GetRemote(remoteSaved.Id) 745 require.NoError(t, err) 746 require.Equal(t, future, r.LastPostUpdateAt) 747 require.Equal(t, postID, r.LastPostId) 748 }) 749 750 t.Run("Update NextSyncAt for non-existent shared channel remote", func(t *testing.T) { 751 err := ss.SharedChannel().UpdateRemoteCursor(model.NewId(), cursor) 752 require.Error(t, err, "update non-existent remote should error", err) 753 }) 754 } 755 756 func testDeleteSharedChannelRemote(t *testing.T, ss store.Store) { 757 channel, err := createTestChannel(ss, "test_remote_delete") 758 require.NoError(t, err) 759 760 remote := &model.SharedChannelRemote{ 761 ChannelId: channel.Id, 762 CreatorId: model.NewId(), 763 RemoteId: model.NewId(), 764 } 765 766 remoteSaved, err := ss.SharedChannel().SaveRemote(remote) 767 require.NoError(t, err, "couldn't save remote", err) 768 769 t.Run("Delete existing shared channel remote", func(t *testing.T) { 770 deleted, err := ss.SharedChannel().DeleteRemote(remoteSaved.Id) 771 require.NoError(t, err, "delete existing remote should not error", err) 772 require.True(t, deleted, "expected true from delete remote") 773 774 r, err := ss.SharedChannel().GetRemote(remoteSaved.Id) 775 require.Error(t, err) 776 require.Nil(t, r) 777 }) 778 779 t.Run("Delete non-existent shared channel remote", func(t *testing.T) { 780 deleted, err := ss.SharedChannel().DeleteRemote(model.NewId()) 781 require.NoError(t, err, "delete non-existent remote should not error", err) 782 require.False(t, deleted, "expected false from delete remote") 783 }) 784 } 785 786 func createTestChannel(ss store.Store, name string) (*model.Channel, error) { 787 channel, err := createSharedTestChannel(ss, name, false) 788 return channel, err 789 } 790 791 func createSharedTestChannel(ss store.Store, name string, shared bool) (*model.Channel, error) { 792 channel := &model.Channel{ 793 TeamId: model.NewId(), 794 Type: model.CHANNEL_OPEN, 795 Name: name, 796 DisplayName: name + " display name", 797 Header: name + " header", 798 Purpose: name + "purpose", 799 CreatorId: model.NewId(), 800 Shared: model.NewBool(shared), 801 } 802 channel, err := ss.Channel().Save(channel, 10000) 803 if err != nil { 804 return nil, err 805 } 806 807 if shared { 808 sc := &model.SharedChannel{ 809 ChannelId: channel.Id, 810 TeamId: channel.TeamId, 811 CreatorId: channel.CreatorId, 812 ShareName: channel.Name, 813 Home: true, 814 } 815 _, err = ss.SharedChannel().Save(sc) 816 if err != nil { 817 return nil, err 818 } 819 } 820 return channel, nil 821 } 822 823 func clearSharedChannels(ss store.Store) error { 824 opts := model.SharedChannelFilterOpts{} 825 all, err := ss.SharedChannel().GetAll(0, 1000, opts) 826 if err != nil { 827 return err 828 } 829 830 for _, sc := range all { 831 if _, err := ss.SharedChannel().Delete(sc.ChannelId); err != nil { 832 return err 833 } 834 } 835 return nil 836 } 837 838 func testSaveSharedChannelUser(t *testing.T, ss store.Store) { 839 t.Run("Save shared channel user", func(t *testing.T) { 840 scUser := &model.SharedChannelUser{ 841 UserId: model.NewId(), 842 RemoteId: model.NewId(), 843 ChannelId: model.NewId(), 844 } 845 846 userSaved, err := ss.SharedChannel().SaveUser(scUser) 847 require.NoError(t, err, "couldn't save shared channel user", err) 848 849 require.Equal(t, scUser.UserId, userSaved.UserId) 850 require.Equal(t, scUser.RemoteId, userSaved.RemoteId) 851 }) 852 853 t.Run("Save invalid shared channel user", func(t *testing.T) { 854 scUser := &model.SharedChannelUser{ 855 UserId: "", 856 RemoteId: model.NewId(), 857 } 858 859 _, err := ss.SharedChannel().SaveUser(scUser) 860 require.Error(t, err, "should error saving invalid user", err) 861 }) 862 863 t.Run("Save shared channel user with invalid remote id", func(t *testing.T) { 864 scUser := &model.SharedChannelUser{ 865 UserId: model.NewId(), 866 RemoteId: "bogus", 867 } 868 869 _, err := ss.SharedChannel().SaveUser(scUser) 870 require.Error(t, err, "expected error for invalid remote id") 871 }) 872 } 873 874 func testGetSingleSharedChannelUser(t *testing.T, ss store.Store) { 875 scUser := &model.SharedChannelUser{ 876 UserId: model.NewId(), 877 RemoteId: model.NewId(), 878 ChannelId: model.NewId(), 879 } 880 881 userSaved, err := ss.SharedChannel().SaveUser(scUser) 882 require.NoError(t, err, "could not save user", err) 883 884 t.Run("Get existing shared channel user", func(t *testing.T) { 885 r, err := ss.SharedChannel().GetSingleUser(userSaved.UserId, userSaved.ChannelId, userSaved.RemoteId) 886 require.NoError(t, err, "couldn't get shared channel user", err) 887 888 require.Equal(t, userSaved.Id, r.Id) 889 require.Equal(t, userSaved.UserId, r.UserId) 890 require.Equal(t, userSaved.RemoteId, r.RemoteId) 891 require.Equal(t, userSaved.CreateAt, r.CreateAt) 892 }) 893 894 t.Run("Get non-existent shared channel user", func(t *testing.T) { 895 u, err := ss.SharedChannel().GetSingleUser(model.NewId(), model.NewId(), model.NewId()) 896 require.Error(t, err) 897 require.Nil(t, u) 898 }) 899 } 900 901 func testGetSharedChannelUser(t *testing.T, ss store.Store) { 902 userId := model.NewId() 903 for i := 0; i < 10; i++ { 904 scUser := &model.SharedChannelUser{ 905 UserId: userId, 906 RemoteId: model.NewId(), 907 ChannelId: model.NewId(), 908 } 909 _, err := ss.SharedChannel().SaveUser(scUser) 910 require.NoError(t, err, "could not save user", err) 911 } 912 913 t.Run("Get existing shared channel user", func(t *testing.T) { 914 scus, err := ss.SharedChannel().GetUsersForUser(userId) 915 require.NoError(t, err, "couldn't get shared channel user", err) 916 917 require.Len(t, scus, 10, "should be 10 shared channel user records") 918 require.Equal(t, userId, scus[0].UserId) 919 }) 920 921 t.Run("Get non-existent shared channel user", func(t *testing.T) { 922 scus, err := ss.SharedChannel().GetUsersForUser(model.NewId()) 923 require.NoError(t, err, "should not error when not found") 924 require.Empty(t, scus, "should be empty") 925 }) 926 } 927 928 func testGetSharedChannelUsersForSync(t *testing.T, ss store.Store) { 929 channelID := model.NewId() 930 remoteID := model.NewId() 931 earlier := model.GetMillis() - 300000 932 later := model.GetMillis() + 300000 933 934 var users []*model.User 935 for i := 0; i < 10; i++ { // need real users 936 u := &model.User{ 937 Username: model.NewId(), 938 Email: model.NewId() + "@example.com", 939 LastPictureUpdate: model.GetMillis(), 940 } 941 u, err := ss.User().Save(u) 942 require.NoError(t, err) 943 users = append(users, u) 944 } 945 946 data := []model.SharedChannelUser{ 947 {UserId: users[0].Id, ChannelId: model.NewId(), RemoteId: model.NewId(), LastSyncAt: later}, 948 {UserId: users[1].Id, ChannelId: model.NewId(), RemoteId: model.NewId(), LastSyncAt: earlier}, 949 {UserId: users[1].Id, ChannelId: model.NewId(), RemoteId: model.NewId(), LastSyncAt: earlier}, 950 {UserId: users[1].Id, ChannelId: channelID, RemoteId: remoteID, LastSyncAt: later}, 951 {UserId: users[2].Id, ChannelId: channelID, RemoteId: model.NewId(), LastSyncAt: later}, 952 {UserId: users[3].Id, ChannelId: channelID, RemoteId: model.NewId(), LastSyncAt: earlier}, 953 {UserId: users[4].Id, ChannelId: channelID, RemoteId: model.NewId(), LastSyncAt: later}, 954 {UserId: users[5].Id, ChannelId: channelID, RemoteId: remoteID, LastSyncAt: earlier}, 955 {UserId: users[6].Id, ChannelId: channelID, RemoteId: remoteID, LastSyncAt: later}, 956 } 957 958 for i, u := range data { 959 scu := &model.SharedChannelUser{ 960 UserId: u.UserId, 961 ChannelId: u.ChannelId, 962 RemoteId: u.RemoteId, 963 LastSyncAt: u.LastSyncAt, 964 } 965 _, err := ss.SharedChannel().SaveUser(scu) 966 require.NoError(t, err, "could not save user #", i, err) 967 } 968 969 t.Run("Filter by channelId", func(t *testing.T) { 970 filter := model.GetUsersForSyncFilter{ 971 CheckProfileImage: false, 972 ChannelID: channelID, 973 } 974 usersFound, err := ss.SharedChannel().GetUsersForSync(filter) 975 require.NoError(t, err, "shouldn't error getting users", err) 976 require.Len(t, usersFound, 2) 977 for _, user := range usersFound { 978 require.Contains(t, []string{users[3].Id, users[5].Id}, user.Id) 979 } 980 }) 981 982 t.Run("Filter by channelId for profile image", func(t *testing.T) { 983 filter := model.GetUsersForSyncFilter{ 984 CheckProfileImage: true, 985 ChannelID: channelID, 986 } 987 usersFound, err := ss.SharedChannel().GetUsersForSync(filter) 988 require.NoError(t, err, "shouldn't error getting users", err) 989 require.Len(t, usersFound, 2) 990 for _, user := range usersFound { 991 require.Contains(t, []string{users[3].Id, users[5].Id}, user.Id) 992 } 993 }) 994 995 t.Run("Filter by channelId with Limit", func(t *testing.T) { 996 filter := model.GetUsersForSyncFilter{ 997 CheckProfileImage: true, 998 ChannelID: channelID, 999 Limit: 1, 1000 } 1001 usersFound, err := ss.SharedChannel().GetUsersForSync(filter) 1002 require.NoError(t, err, "shouldn't error getting users", err) 1003 require.Len(t, usersFound, 1) 1004 }) 1005 } 1006 1007 func testUpdateSharedChannelUserLastSyncAt(t *testing.T, ss store.Store) { 1008 u1 := &model.User{ 1009 Username: model.NewId(), 1010 Email: model.NewId() + "@example.com", 1011 LastPictureUpdate: model.GetMillis() - 300000, // 5 mins 1012 } 1013 u1, err := ss.User().Save(u1) 1014 require.NoError(t, err) 1015 1016 u2 := &model.User{ 1017 Username: model.NewId(), 1018 Email: model.NewId() + "@example.com", 1019 LastPictureUpdate: model.GetMillis() + 300000, 1020 } 1021 u2, err = ss.User().Save(u2) 1022 require.NoError(t, err) 1023 1024 channelID := model.NewId() 1025 remoteID := model.NewId() 1026 1027 scUser1 := &model.SharedChannelUser{ 1028 UserId: u1.Id, 1029 RemoteId: remoteID, 1030 ChannelId: channelID, 1031 } 1032 _, err = ss.SharedChannel().SaveUser(scUser1) 1033 require.NoError(t, err, "couldn't save user", err) 1034 1035 scUser2 := &model.SharedChannelUser{ 1036 UserId: u2.Id, 1037 RemoteId: remoteID, 1038 ChannelId: channelID, 1039 } 1040 _, err = ss.SharedChannel().SaveUser(scUser2) 1041 require.NoError(t, err, "couldn't save user", err) 1042 1043 t.Run("Update LastSyncAt for user via UpdateAt", func(t *testing.T) { 1044 err := ss.SharedChannel().UpdateUserLastSyncAt(u1.Id, channelID, remoteID) 1045 require.NoError(t, err, "updateLastSyncAt should not error", err) 1046 1047 scu, err := ss.SharedChannel().GetSingleUser(u1.Id, channelID, remoteID) 1048 require.NoError(t, err) 1049 require.Equal(t, u1.UpdateAt, scu.LastSyncAt) 1050 }) 1051 1052 t.Run("Update LastSyncAt for user via LastPictureUpdate", func(t *testing.T) { 1053 err := ss.SharedChannel().UpdateUserLastSyncAt(u2.Id, channelID, remoteID) 1054 require.NoError(t, err, "updateLastSyncAt should not error", err) 1055 1056 scu, err := ss.SharedChannel().GetSingleUser(u2.Id, channelID, remoteID) 1057 require.NoError(t, err) 1058 require.Equal(t, u2.LastPictureUpdate, scu.LastSyncAt) 1059 }) 1060 1061 t.Run("Update LastSyncAt for non-existent shared channel user", func(t *testing.T) { 1062 err := ss.SharedChannel().UpdateUserLastSyncAt(model.NewId(), channelID, remoteID) 1063 require.Error(t, err, "update non-existent user should error", err) 1064 }) 1065 } 1066 1067 func testSaveSharedChannelAttachment(t *testing.T, ss store.Store) { 1068 t.Run("Save shared channel attachment", func(t *testing.T) { 1069 attachment := &model.SharedChannelAttachment{ 1070 FileId: model.NewId(), 1071 RemoteId: model.NewId(), 1072 } 1073 1074 saved, err := ss.SharedChannel().SaveAttachment(attachment) 1075 require.NoError(t, err, "couldn't save shared channel attachment", err) 1076 1077 require.Equal(t, attachment.FileId, saved.FileId) 1078 require.Equal(t, attachment.RemoteId, saved.RemoteId) 1079 }) 1080 1081 t.Run("Save invalid shared channel attachment", func(t *testing.T) { 1082 attachment := &model.SharedChannelAttachment{ 1083 FileId: "", 1084 RemoteId: model.NewId(), 1085 } 1086 1087 _, err := ss.SharedChannel().SaveAttachment(attachment) 1088 require.Error(t, err, "should error saving invalid attachment", err) 1089 }) 1090 1091 t.Run("Save shared channel attachment with invalid remote id", func(t *testing.T) { 1092 attachment := &model.SharedChannelAttachment{ 1093 FileId: model.NewId(), 1094 RemoteId: "bogus", 1095 } 1096 1097 _, err := ss.SharedChannel().SaveAttachment(attachment) 1098 require.Error(t, err, "expected error for invalid remote id") 1099 }) 1100 } 1101 1102 func testUpsertSharedChannelAttachment(t *testing.T, ss store.Store) { 1103 t.Run("Upsert new shared channel attachment", func(t *testing.T) { 1104 attachment := &model.SharedChannelAttachment{ 1105 FileId: model.NewId(), 1106 RemoteId: model.NewId(), 1107 } 1108 1109 _, err := ss.SharedChannel().UpsertAttachment(attachment) 1110 require.NoError(t, err, "couldn't upsert shared channel attachment", err) 1111 1112 saved, err := ss.SharedChannel().GetAttachment(attachment.FileId, attachment.RemoteId) 1113 require.NoError(t, err, "couldn't get shared channel attachment", err) 1114 1115 require.NotZero(t, saved.CreateAt) 1116 require.Equal(t, saved.CreateAt, saved.LastSyncAt) 1117 }) 1118 1119 t.Run("Upsert existing shared channel attachment", func(t *testing.T) { 1120 attachment := &model.SharedChannelAttachment{ 1121 FileId: model.NewId(), 1122 RemoteId: model.NewId(), 1123 } 1124 1125 saved, err := ss.SharedChannel().SaveAttachment(attachment) 1126 require.NoError(t, err, "couldn't save shared channel attachment", err) 1127 1128 // make sure enough time passed that GetMillis returns a different value 1129 time.Sleep(1 * time.Millisecond) 1130 1131 _, err = ss.SharedChannel().UpsertAttachment(saved) 1132 require.NoError(t, err, "couldn't upsert shared channel attachment", err) 1133 1134 updated, err := ss.SharedChannel().GetAttachment(attachment.FileId, attachment.RemoteId) 1135 require.NoError(t, err, "couldn't get shared channel attachment", err) 1136 1137 require.NotZero(t, updated.CreateAt) 1138 require.Greater(t, updated.LastSyncAt, updated.CreateAt) 1139 }) 1140 1141 t.Run("Upsert invalid shared channel attachment", func(t *testing.T) { 1142 attachment := &model.SharedChannelAttachment{ 1143 FileId: "", 1144 RemoteId: model.NewId(), 1145 } 1146 1147 id, err := ss.SharedChannel().UpsertAttachment(attachment) 1148 require.Error(t, err, "should error upserting invalid attachment", err) 1149 require.Empty(t, id) 1150 }) 1151 1152 t.Run("Upsert shared channel attachment with invalid remote id", func(t *testing.T) { 1153 attachment := &model.SharedChannelAttachment{ 1154 FileId: model.NewId(), 1155 RemoteId: "bogus", 1156 } 1157 1158 id, err := ss.SharedChannel().UpsertAttachment(attachment) 1159 require.Error(t, err, "expected error for invalid remote id") 1160 require.Empty(t, id) 1161 }) 1162 } 1163 1164 func testGetSharedChannelAttachment(t *testing.T, ss store.Store) { 1165 attachment := &model.SharedChannelAttachment{ 1166 FileId: model.NewId(), 1167 RemoteId: model.NewId(), 1168 } 1169 1170 saved, err := ss.SharedChannel().SaveAttachment(attachment) 1171 require.NoError(t, err, "could not save attachment", err) 1172 1173 t.Run("Get existing shared channel attachment", func(t *testing.T) { 1174 r, err := ss.SharedChannel().GetAttachment(saved.FileId, saved.RemoteId) 1175 require.NoError(t, err, "couldn't get shared channel attachment", err) 1176 1177 require.Equal(t, saved.Id, r.Id) 1178 require.Equal(t, saved.FileId, r.FileId) 1179 require.Equal(t, saved.RemoteId, r.RemoteId) 1180 require.Equal(t, saved.CreateAt, r.CreateAt) 1181 }) 1182 1183 t.Run("Get non-existent shared channel attachment", func(t *testing.T) { 1184 u, err := ss.SharedChannel().GetAttachment(model.NewId(), model.NewId()) 1185 require.Error(t, err) 1186 require.Nil(t, u) 1187 }) 1188 } 1189 1190 func testUpdateSharedChannelAttachmentLastSyncAt(t *testing.T, ss store.Store) { 1191 attachment := &model.SharedChannelAttachment{ 1192 FileId: model.NewId(), 1193 RemoteId: model.NewId(), 1194 } 1195 1196 saved, err := ss.SharedChannel().SaveAttachment(attachment) 1197 require.NoError(t, err, "couldn't save attachment", err) 1198 1199 future := model.GetMillis() + 3600000 // 1 hour in the future 1200 1201 t.Run("Update LastSyncAt for attachment", func(t *testing.T) { 1202 err := ss.SharedChannel().UpdateAttachmentLastSyncAt(saved.Id, future) 1203 require.NoError(t, err, "updateLastSyncAt should not error", err) 1204 1205 f, err := ss.SharedChannel().GetAttachment(saved.FileId, saved.RemoteId) 1206 require.NoError(t, err) 1207 require.Equal(t, future, f.LastSyncAt) 1208 }) 1209 1210 t.Run("Update LastSyncAt for non-existent shared channel attachment", func(t *testing.T) { 1211 err := ss.SharedChannel().UpdateAttachmentLastSyncAt(model.NewId(), future) 1212 require.Error(t, err, "update non-existent attachment should error", err) 1213 }) 1214 }