Skip to content

Commit b75341d

Browse files
implement thread channel and message, adapt more tests
1 parent 837ec94 commit b75341d

File tree

10 files changed

+176
-196
lines changed

10 files changed

+176
-196
lines changed

c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/MembershipTests.cs

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,13 @@ public class MembershipTests
1616
[SetUp]
1717
public async Task Setup()
1818
{
19-
chat = await Chat.CreateInstance(new PubnubChatConfig(storeUserActivityTimestamp: true), new PNConfiguration(new UserId("membership_tests_user_54"))
19+
chat = TestUtils.AssertOperation(await Chat.CreateInstance(new PubnubChatConfig(storeUserActivityTimestamp: true), new PNConfiguration(new UserId("membership_tests_user_54"))
2020
{
2121
PublishKey = PubnubTestsParameters.PublishKey,
2222
SubscribeKey = PubnubTestsParameters.SubscribeKey
23-
});
24-
channel = await chat.CreatePublicConversation("membership_tests_channel");
25-
if (channel == null)
26-
{
27-
Assert.Fail();
28-
}
29-
if (!chat.TryGetCurrentUser(out user))
30-
{
31-
Assert.Fail();
32-
}
33-
23+
}));
24+
channel = TestUtils.AssertOperation(await chat.CreatePublicConversation("membership_tests_channel"));
25+
user = TestUtils.AssertOperation(await chat.GetCurrentUser());
3426
channel.Join();
3527
await Task.Delay(3500);
3628
}
@@ -94,23 +86,23 @@ public async Task TestUpdateMemberships()
9486
[Test]
9587
public async Task TestInvite()
9688
{
97-
var testChannel = (await chat.CreateGroupConversation([user], "test_invite_group_channel")).CreatedChannel;
89+
var testChannel = TestUtils.AssertOperation(await chat.CreateGroupConversation([user], "test_invite_group_channel")).CreatedChannel;
9890
var testUser = await chat.GetOrCreateUser("test_invite_user");
99-
var returnedMembership = await testChannel.Invite(testUser);
91+
var returnedMembership = TestUtils.AssertOperation(await testChannel.Invite(testUser));
10092
Assert.True(returnedMembership.ChannelId == testChannel.Id && returnedMembership.UserId == testUser.Id);
10193
}
10294

10395
[Test]
10496
public async Task TestInviteMultiple()
10597
{
106-
var testChannel = (await chat.CreateGroupConversation([user], "invite_multiple_test_group_channel_3"))
98+
var testChannel = TestUtils.AssertOperation(await chat.CreateGroupConversation([user], "invite_multiple_test_group_channel_3"))
10799
.CreatedChannel;
108100
var secondUser = await chat.GetOrCreateUser("second_invite_user");
109101
var thirdUser = await chat.GetOrCreateUser("third_invite_user");
110-
var returnedMemberships = await testChannel.InviteMultiple([
102+
var returnedMemberships = TestUtils.AssertOperation(await testChannel.InviteMultiple([
111103
secondUser,
112104
thirdUser
113-
]);
105+
]));
114106
Assert.True(
115107
returnedMemberships.Count == 2 &&
116108
returnedMemberships.Any(x => x.UserId == secondUser.Id && x.ChannelId == testChannel.Id) &&
@@ -120,7 +112,7 @@ public async Task TestInviteMultiple()
120112
[Test]
121113
public async Task TestLastRead()
122114
{
123-
var testChannel = await chat.CreatePublicConversation("last_read_test_channel_57");
115+
var testChannel = TestUtils.AssertOperation(await chat.CreatePublicConversation("last_read_test_channel_57"));
124116
testChannel.Join();
125117

126118
await Task.Delay(4000);
@@ -159,7 +151,7 @@ public async Task TestLastRead()
159151
[Test]
160152
public async Task TestUnreadMessagesCount()
161153
{
162-
var unreadChannel = await chat.CreatePublicConversation($"test_channel_{Guid.NewGuid()}");
154+
var unreadChannel = TestUtils.AssertOperation(await chat.CreatePublicConversation($"test_channel_{Guid.NewGuid()}"));
163155
unreadChannel.Join();
164156

165157
await Task.Delay(3500);
@@ -170,7 +162,7 @@ public async Task TestUnreadMessagesCount()
170162

171163
await Task.Delay(8000);
172164

173-
var membership = (await unreadChannel.GetMemberships())
165+
var membership = TestUtils.AssertOperation(await unreadChannel.GetMemberships())
174166
.Memberships.FirstOrDefault(x => x.UserId == user.Id);
175167
var unreadCount = membership == null ? -1 : await membership.GetUnreadMessagesCount();
176168
Assert.True(unreadCount >= 3, $"Expected >=3 unread but got: {unreadCount}");

c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/MessageTests.cs

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/*using System.Diagnostics;
1+
using System.Diagnostics;
22
using PubnubApi;
33
using PubNubChatAPI.Entities;
44
using PubnubChatApi.Entities.Data;
@@ -16,20 +16,13 @@ public class MessageTests
1616
[SetUp]
1717
public async Task Setup()
1818
{
19-
chat = await Chat.CreateInstance(new PubnubChatConfig(storeUserActivityTimestamp: true), new PNConfiguration(new UserId("message_tests_user_2"))
19+
chat = TestUtils.AssertOperation(await Chat.CreateInstance(new PubnubChatConfig(storeUserActivityTimestamp: true), new PNConfiguration(new UserId("message_tests_user_2"))
2020
{
2121
PublishKey = PubnubTestsParameters.PublishKey,
2222
SubscribeKey = PubnubTestsParameters.SubscribeKey
23-
});
24-
channel = await chat.CreatePublicConversation("message_tests_channel_2");
25-
if (channel == null)
26-
{
27-
Assert.Fail();
28-
}
29-
if (!chat.TryGetCurrentUser(out user))
30-
{
31-
Assert.Fail();
32-
}
23+
}));
24+
channel = TestUtils.AssertOperation(await chat.CreatePublicConversation("message_tests_channel_2"));
25+
user = TestUtils.AssertOperation(await chat.GetCurrentUser());
3326
channel.Join();
3427
await Task.Delay(3500);
3528
}
@@ -61,7 +54,7 @@ public async Task TestSendAndReceive()
6154
{
6255
Id = user.Id,
6356
Name = user.UserName
64-
} } },#1#
57+
} } },*/
6558
});
6659
var received = manualReceiveEvent.WaitOne(6000);
6760
Assert.IsTrue(received);
@@ -71,7 +64,7 @@ public async Task TestSendAndReceive()
7164
public async Task TestReceivingMessageData()
7265
{
7366
var manualReceiveEvent = new ManualResetEvent(false);
74-
var testChannel = await chat.CreatePublicConversation("message_data_test_channel");
67+
var testChannel = TestUtils.AssertOperation(await chat.CreatePublicConversation("message_data_test_channel"));
7568
testChannel.Join();
7669
await Task.Delay(2500);
7770
testChannel.OnMessageReceived += async message =>
@@ -103,14 +96,15 @@ public async Task TestReceivingMessageData()
10396
}
10497

10598
[Test]
106-
public async Task TestTryGetMessage()
99+
public async Task TestGetMessage()
107100
{
108101
var manualReceiveEvent = new ManualResetEvent(false);
109-
channel.OnMessageReceived += message =>
102+
channel.OnMessageReceived += async message =>
110103
{
111104
if (message.ChannelId == channel.Id)
112105
{
113-
Assert.True(chat.TryGetMessage(channel.Id, message.TimeToken, out _));
106+
var getMessage = await chat.GetMessage(channel.Id, message.TimeToken);
107+
Assert.True(!getMessage.Error, $"Error when trying to GetMessage(): {getMessage.Error}");
114108
manualReceiveEvent.Set();
115109
}
116110
};
@@ -215,7 +209,7 @@ public async Task TestRestoreMessage()
215209
[Test]
216210
public async Task TestPinMessage()
217211
{
218-
var pinTestChannel = await chat.CreatePublicConversation();
212+
var pinTestChannel = TestUtils.AssertOperation(await chat.CreatePublicConversation());
219213
pinTestChannel.Join();
220214
await Task.Delay(2500);
221215
pinTestChannel.SetListeningForUpdates(true);
@@ -287,7 +281,7 @@ public async Task TestCreateThread()
287281
try
288282
{
289283
message.SetListeningForUpdates(true);
290-
var thread = await message.CreateThread();
284+
var thread = TestUtils.AssertOperation(await message.CreateThread());
291285
thread.Join();
292286
await Task.Delay(3500);
293287
await thread.SendText("thread_init_text");
@@ -302,13 +296,12 @@ public async Task TestCreateThread()
302296
}
303297

304298
Assert.True(hasThread);
305-
Assert.True(message.TryGetThread(out var threadChannel));
299+
var getThread = await message.GetThread();
300+
Assert.True(!getThread.Error);
306301
await message.RemoveThread();
307302

308303
await Task.Delay(5000);
309-
310-
//TODO: temporary way to get latest message pointer since remove_thread doesn't return a new pointer
311-
chat.TryGetMessage(channel.Id, message.Id, out message);
304+
312305
Assert.False(message.HasThread());
313306

314307
manualReceiveEvent.Set();
@@ -318,4 +311,4 @@ public async Task TestCreateThread()
318311
var received = manualReceiveEvent.WaitOne(25000);
319312
Assert.IsTrue(received);
320313
}
321-
}*/
314+
}

c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ThreadsTests.cs

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
/*using System.Diagnostics;
21
using PubnubApi;
32
using PubNubChatAPI.Entities;
43
using PubnubChatApi.Entities.Data;
@@ -16,17 +15,14 @@ public class ThreadsTests
1615
[SetUp]
1716
public async Task Setup()
1817
{
19-
chat = await Chat.CreateInstance(new PubnubChatConfig(storeUserActivityTimestamp: true), new PNConfiguration(new UserId("threads_tests_user_2"))
18+
chat = TestUtils.AssertOperation(await Chat.CreateInstance(new PubnubChatConfig(storeUserActivityTimestamp: true), new PNConfiguration(new UserId("threads_tests_user_2"))
2019
{
2120
PublishKey = PubnubTestsParameters.PublishKey,
2221
SubscribeKey = PubnubTestsParameters.SubscribeKey
23-
});
22+
}));
2423
var randomId = Guid.NewGuid().ToString()[..10];
25-
channel = await chat.CreatePublicConversation(randomId);
26-
if (!chat.TryGetCurrentUser(out user))
27-
{
28-
Assert.Fail();
29-
}
24+
channel = TestUtils.AssertOperation(await chat.CreatePublicConversation(randomId));
25+
user = TestUtils.AssertOperation(await chat.GetCurrentUser());
3026
channel.Join();
3127
await Task.Delay(3500);
3228
}
@@ -48,7 +44,7 @@ public async Task TestGetThreadHistory()
4844
channel.OnMessageReceived += async message =>
4945
{
5046
message.SetListeningForUpdates(true);
51-
var thread = await message.CreateThread();
47+
var thread = TestUtils.AssertOperation(await message.CreateThread());
5248
thread.Join();
5349

5450
await Task.Delay(5000);
@@ -75,7 +71,7 @@ public async Task TestThreadChannelParentChannelPinning()
7571
channel.OnMessageReceived += async message =>
7672
{
7773
message.SetListeningForUpdates(true);
78-
var thread = await message.CreateThread();
74+
var thread = TestUtils.AssertOperation(await message.CreateThread());
7975
thread.Join();
8076
await thread.SendText("thread init message");
8177

@@ -108,7 +104,7 @@ public async Task TestThreadChannelEmitUserMention()
108104
var mentionedReset = new ManualResetEvent(false);
109105
channel.OnMessageReceived += async message =>
110106
{
111-
var thread = await message.CreateThread();
107+
var thread = TestUtils.AssertOperation(await message.CreateThread());
112108
thread.Join();
113109
await Task.Delay(2500);
114110
user.SetListeningForMentionEvents(true);
@@ -132,7 +128,7 @@ public async Task TestThreadMessageParentChannelPinning()
132128
channel.OnMessageReceived += async message =>
133129
{
134130
message.SetListeningForUpdates(true);
135-
var thread = await message.CreateThread();
131+
var thread = TestUtils.AssertOperation(await message.CreateThread());
136132
thread.Join();
137133

138134
await Task.Delay(3500);
@@ -170,7 +166,7 @@ public async Task TestThreadMessageUpdate()
170166
channel.OnMessageReceived += async message =>
171167
{
172168
message.SetListeningForUpdates(true);
173-
var thread = await message.CreateThread();
169+
var thread = TestUtils.AssertOperation(await message.CreateThread());
174170
thread.Join();
175171

176172
await Task.Delay(3000);
@@ -196,4 +192,4 @@ public async Task TestThreadMessageUpdate()
196192
var updated = messageUpdatedReset.WaitOne(25000);
197193
Assert.True(updated);
198194
}
199-
}*/
195+
}

c-sharp-chat/PubnubChatApi/PubnubChatApi/Entities/Channel.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public class Channel : UniqueChatEntity
7171
/// </summary>
7272
public string Type => channelData.Type;
7373

74-
private ChatChannelData channelData;
74+
protected ChatChannelData channelData;
7575

7676
protected Subscription? subscription;
7777

@@ -622,9 +622,9 @@ public async Task<ChatOperationResult> SetRestrictions(string userId, Restrictio
622622
/// </example>
623623
/// <exception cref="PubnubCCoreException">Thrown when an error occurs while sending the message.</exception>
624624
/// <seealso cref="OnMessageReceived"/>
625-
public virtual async Task SendText(string message)
625+
public virtual async Task<ChatOperationResult> SendText(string message)
626626
{
627-
await SendText(message, new SendTextParams());
627+
return await SendText(message, new SendTextParams());
628628
}
629629

630630
public virtual async Task<ChatOperationResult> SendText(string message, SendTextParams sendTextParams)
@@ -741,9 +741,9 @@ public async Task<ChatOperationResult> Update(ChatChannelData updatedData)
741741
/// </code>
742742
/// </example>
743743
/// <exception cref="PubnubCCoreException">Thrown when an error occurs while deleting the channel.</exception>
744-
public async Task Delete()
744+
public async Task<ChatOperationResult> Delete()
745745
{
746-
await chat.DeleteChannel(Id);
746+
return await chat.DeleteChannel(Id);
747747
}
748748

749749
/// <summary>

c-sharp-chat/PubnubChatApi/PubnubChatApi/Entities/Chat.cs

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ public class Chat
2929
internal const string MESSAGE_THREAD_ID_PREFIX = "PUBNUB_INTERNAL_THREAD";
3030
internal const string ERROR_LOGGER_KEY_PREFIX = "PUBNUB_INTERNAL_ERROR_LOGGER";
3131

32-
private Dictionary<string, Channel> channelWrappers = new();
33-
private Dictionary<string, User> userWrappers = new();
3432
//TODO: wrappers rethink
33+
internal Dictionary<string, Channel> channelWrappers = new();
34+
private Dictionary<string, User> userWrappers = new();
3535
internal Dictionary<string, Membership> membershipWrappers = new();
3636
private Dictionary<string, Message> messageWrappers = new();
3737
private bool fetchUpdates = true;
@@ -538,9 +538,11 @@ public async Task<ChatOperationResult> UpdateChannel(string channelId, ChatChann
538538
/// chat.DeleteChannel("channel_id");
539539
/// </code>
540540
/// </example>
541-
public async Task DeleteChannel(string channelId)
541+
public async Task<ChatOperationResult> DeleteChannel(string channelId)
542542
{
543-
throw new NotImplementedException();
543+
var result = new ChatOperationResult();
544+
result.RegisterOperation(await PubnubInstance.RemoveChannelMetadata().Channel(channelId).ExecuteAsync());
545+
return result;
544546
}
545547

546548
#endregion
@@ -1255,35 +1257,32 @@ public async Task<ThreadChannel> CreateThreadChannel(Message message)
12551257
throw new NotImplementedException();
12561258
}
12571259

1258-
public async Task RemoveThreadChannel(Message message)
1259-
{
1260-
throw new NotImplementedException();
1261-
}
1262-
1263-
/// <summary>
1264-
/// Tries to retrieve a ThreadChannel object from a Message object if there is one.
1265-
/// </summary>
1266-
/// <param name="message">Message on which the ThreadChannel is supposed to be.</param>
1267-
/// <param name="threadChannel">Retrieved ThreadChannel or null if it wasn't found/</param>
1268-
/// <returns>True if a ThreadChannel was found, false otherwise.</returns>
1269-
/// <seealso cref="GetThreadChannelAsync"/>
1270-
public bool TryGetThreadChannel(Message message, out ThreadChannel threadChannel)
1260+
public async Task<ChatOperationResult> RemoveThreadChannel(Message message)
12711261
{
1272-
throw new NotImplementedException();
1262+
return await message.RemoveThread();
12731263
}
12741264

12751265
/// <summary>
12761266
/// Asynchronously tries to retrieve a ThreadChannel object from a Message object if there is one.
12771267
/// </summary>
12781268
/// <param name="message">Message on which the ThreadChannel is supposed to be.</param>
12791269
/// <returns>The ThreadChannel object if one was found, null otherwise.</returns>
1280-
public async Task<ThreadChannel?> GetThreadChannelAsync(Message message)
1270+
public async Task<ChatOperationResult<ThreadChannel>> GetThreadChannel(Message message)
12811271
{
1282-
return await Task.Run(() =>
1272+
var result = new ChatOperationResult<ThreadChannel>();
1273+
var getChannel = await GetChannel(message.GetThreadId());
1274+
if (result.RegisterOperation(getChannel))
1275+
{
1276+
return result;
1277+
}
1278+
if (getChannel.Result is not ThreadChannel threadChannel)
12831279
{
1284-
var result = TryGetThreadChannel(message, out var threadChannel);
1285-
return result ? threadChannel : null;
1286-
});
1280+
result.Error = true;
1281+
result.Exception = new PNException("Retrieved channel wasn't a thread channel");
1282+
return result;
1283+
}
1284+
result.Result = threadChannel;
1285+
return result;
12871286
}
12881287

12891288
public async Task<ChatOperationResult> ForwardMessage(Message message, Channel channel)

0 commit comments

Comments
 (0)