|
6 | 6 | "os"
|
7 | 7 | "path"
|
8 | 8 | "testing"
|
| 9 | + "time" |
9 | 10 |
|
10 | 11 | "github.com/stretchr/testify/assert"
|
11 | 12 | "github.com/stretchr/testify/require"
|
@@ -492,6 +493,41 @@ func TestChannel_PartialUpdate(t *testing.T) {
|
492 | 493 | require.Nil(t, ch.ExtraData["age"])
|
493 | 494 | }
|
494 | 495 |
|
| 496 | +func TestChannel_MemberPartialUpdate(t *testing.T) { |
| 497 | + c := initClient(t) |
| 498 | + users := randomUsers(t, c, 5) |
| 499 | + ctx := context.Background() |
| 500 | + |
| 501 | + members := make([]string, 0, len(users)) |
| 502 | + for i := range users { |
| 503 | + members = append(members, users[i].ID) |
| 504 | + } |
| 505 | + |
| 506 | + req := &ChannelRequest{Members: members} |
| 507 | + resp, err := c.CreateChannel(ctx, "team", randomString(12), randomUser(t, c).ID, req) |
| 508 | + require.NoError(t, err) |
| 509 | + |
| 510 | + ch := resp.Channel |
| 511 | + member, err := ch.PartialUpdateMember(ctx, members[0], PartialUpdate{ |
| 512 | + Set: map[string]interface{}{ |
| 513 | + "color": "red", |
| 514 | + }, |
| 515 | + Unset: []string{"age"}, |
| 516 | + }) |
| 517 | + require.NoError(t, err) |
| 518 | + require.Equal(t, "red", member.ChannelMember.ExtraData["color"]) |
| 519 | + |
| 520 | + member, err = ch.PartialUpdateMember(ctx, members[0], PartialUpdate{ |
| 521 | + Set: map[string]interface{}{ |
| 522 | + "age": "18", |
| 523 | + }, |
| 524 | + Unset: []string{"color"}, |
| 525 | + }) |
| 526 | + require.NoError(t, err) |
| 527 | + require.Equal(t, "18", member.ChannelMember.ExtraData["age"]) |
| 528 | + require.Nil(t, member.ChannelMember.ExtraData["color"]) |
| 529 | +} |
| 530 | + |
495 | 531 | func TestChannel_SendFile(t *testing.T) {
|
496 | 532 | c := initClient(t)
|
497 | 533 | ch := initChannel(t, c)
|
@@ -647,6 +683,108 @@ func TestChannel_Mute_Unmute(t *testing.T) {
|
647 | 683 | require.Len(t, queryChannResp.Channels, 1)
|
648 | 684 | }
|
649 | 685 |
|
| 686 | +func TestChannel_Pin(t *testing.T) { |
| 687 | + c := initClient(t) |
| 688 | + ctx := context.Background() |
| 689 | + users := randomUsers(t, c, 5) |
| 690 | + |
| 691 | + members := make([]string, 0, len(users)) |
| 692 | + for i := range users { |
| 693 | + members = append(members, users[i].ID) |
| 694 | + } |
| 695 | + ch := initChannel(t, c, members...) |
| 696 | + |
| 697 | + //pin the channel |
| 698 | + now := time.Now() |
| 699 | + member, err := ch.Pin(ctx, users[0].ID) |
| 700 | + require.NoError(t, err, "pin channel") |
| 701 | + require.NotNil(t, member.ChannelMember.PinnedAt) |
| 702 | + require.GreaterOrEqual(t, member.ChannelMember.PinnedAt.Unix(), now.Unix()) |
| 703 | + |
| 704 | + // query for pinned the channel |
| 705 | + queryChannResp, err := c.QueryChannels(ctx, &QueryOption{ |
| 706 | + UserID: users[0].ID, |
| 707 | + Filter: map[string]interface{}{ |
| 708 | + "pinned": true, |
| 709 | + "cid": ch.CID, |
| 710 | + }, |
| 711 | + }) |
| 712 | + |
| 713 | + channels := queryChannResp.Channels |
| 714 | + require.NoError(t, err, "query pinned channel") |
| 715 | + require.Len(t, channels, 1) |
| 716 | + require.Equal(t, channels[0].CID, ch.CID) |
| 717 | + |
| 718 | + member, err = ch.Unpin(ctx, users[0].ID) |
| 719 | + require.NoError(t, err, "unpin channel") |
| 720 | + require.Nil(t, member.ChannelMember.PinnedAt) |
| 721 | + |
| 722 | + // query for pinned the channel |
| 723 | + queryChannResp, err = c.QueryChannels(ctx, &QueryOption{ |
| 724 | + UserID: users[0].ID, |
| 725 | + Filter: map[string]interface{}{ |
| 726 | + "pinned": false, |
| 727 | + "cid": ch.CID, |
| 728 | + }, |
| 729 | + }) |
| 730 | + |
| 731 | + channels = queryChannResp.Channels |
| 732 | + require.NoError(t, err, "query pinned channel") |
| 733 | + require.Len(t, channels, 1) |
| 734 | + require.Equal(t, channels[0].CID, ch.CID) |
| 735 | +} |
| 736 | + |
| 737 | +func TestChannel_Archive(t *testing.T) { |
| 738 | + c := initClient(t) |
| 739 | + ctx := context.Background() |
| 740 | + users := randomUsers(t, c, 5) |
| 741 | + |
| 742 | + members := make([]string, 0, len(users)) |
| 743 | + for i := range users { |
| 744 | + members = append(members, users[i].ID) |
| 745 | + } |
| 746 | + ch := initChannel(t, c, members...) |
| 747 | + |
| 748 | + //archive the channel |
| 749 | + now := time.Now() |
| 750 | + member, err := ch.Archive(ctx, users[0].ID) |
| 751 | + require.NoError(t, err, "archive channel") |
| 752 | + require.NotNil(t, member.ChannelMember.ArchivedAt) |
| 753 | + require.GreaterOrEqual(t, member.ChannelMember.ArchivedAt.Unix(), now.Unix()) |
| 754 | + |
| 755 | + // query for pinned the channel |
| 756 | + queryChannResp, err := c.QueryChannels(ctx, &QueryOption{ |
| 757 | + UserID: users[0].ID, |
| 758 | + Filter: map[string]interface{}{ |
| 759 | + "archived": true, |
| 760 | + "cid": ch.CID, |
| 761 | + }, |
| 762 | + }) |
| 763 | + |
| 764 | + channels := queryChannResp.Channels |
| 765 | + require.NoError(t, err, "query archived channel") |
| 766 | + require.Len(t, channels, 1) |
| 767 | + require.Equal(t, channels[0].CID, ch.CID) |
| 768 | + |
| 769 | + member, err = ch.Unarchive(ctx, users[0].ID) |
| 770 | + require.NoError(t, err, "unarchive channel") |
| 771 | + require.Nil(t, member.ChannelMember.ArchivedAt) |
| 772 | + |
| 773 | + // query for the archived channel |
| 774 | + queryChannResp, err = c.QueryChannels(ctx, &QueryOption{ |
| 775 | + UserID: users[0].ID, |
| 776 | + Filter: map[string]interface{}{ |
| 777 | + "archived": false, |
| 778 | + "cid": ch.CID, |
| 779 | + }, |
| 780 | + }) |
| 781 | + |
| 782 | + channels = queryChannResp.Channels |
| 783 | + require.NoError(t, err, "query archived channel") |
| 784 | + require.Len(t, channels, 1) |
| 785 | + require.Equal(t, channels[0].CID, ch.CID) |
| 786 | +} |
| 787 | + |
650 | 788 | func ExampleChannel_Update() {
|
651 | 789 | client := &Client{}
|
652 | 790 | ctx := context.Background()
|
|
0 commit comments