Skip to content

Commit 1b289f9

Browse files
finish implementing all methods
1 parent dd74100 commit 1b289f9

File tree

16 files changed

+327
-99
lines changed

16 files changed

+327
-99
lines changed

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

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,16 @@ public async Task TestGetChannels()
101101
public async Task TestCreateDirectConversation()
102102
{
103103
var convoUser = await chat.GetOrCreateUser("direct_conversation_user");
104+
var id = Guid.NewGuid().ToString();
104105
var directConversation = TestUtils.AssertOperation(
105-
await chat.CreateDirectConversation(convoUser, "direct_conversation_test"));
106-
Assert.True(directConversation.CreatedChannel is { Id: "direct_conversation_test" });
106+
await chat.CreateDirectConversation(convoUser, id));
107+
Assert.True(directConversation.CreatedChannel.Id == id);
107108
Assert.True(directConversation.HostMembership != null && directConversation.HostMembership.UserId == currentUser.Id);
108109
Assert.True(directConversation.InviteesMemberships != null &&
109110
directConversation.InviteesMemberships.First().UserId == convoUser.Id);
111+
112+
//Cleanup
113+
await directConversation.CreatedChannel.Delete();
110114
}
111115

112116
[Test]
@@ -115,13 +119,17 @@ public async Task TestCreateGroupConversation()
115119
var convoUser1 = await chat.GetOrCreateUser("group_conversation_user_1");
116120
var convoUser2 = await chat.GetOrCreateUser("group_conversation_user_2");
117121
var convoUser3 = await chat.GetOrCreateUser("group_conversation_user_3");
122+
var id = Guid.NewGuid().ToString();
118123
var groupConversation = TestUtils.AssertOperation(await
119-
chat.CreateGroupConversation([convoUser1, convoUser2, convoUser3], "group_conversation_test"));
120-
Assert.True(groupConversation.CreatedChannel is { Id: "group_conversation_test" });
124+
chat.CreateGroupConversation([convoUser1, convoUser2, convoUser3], id));
125+
Assert.True(groupConversation.CreatedChannel.Id == id);
121126
Assert.True(groupConversation.HostMembership != null && groupConversation.HostMembership.UserId == currentUser.Id);
122127
Assert.True(groupConversation.InviteesMemberships is { Count: 3 });
123128
Assert.True(groupConversation.InviteesMemberships.Any(x =>
124-
x.UserId == convoUser1.Id && x.ChannelId == "group_conversation_test"));
129+
x.UserId == convoUser1.Id && x.ChannelId == id));
130+
131+
//Cleanup
132+
await groupConversation.CreatedChannel.Delete();
125133
}
126134

127135
[Test]
@@ -152,7 +160,8 @@ public async Task TestEmitEvent()
152160
var reportManualEvent = new ManualResetEvent(false);
153161
channel.OnCustomEvent += customEvent =>
154162
{
155-
Assert.True(customEvent.Payload == "{\"test\":\"some_nonsense\", \"type\": \"custom\"}");
163+
Assert.True(customEvent.Payload.Contains("test"));
164+
Assert.True(customEvent.Payload.Contains("some_nonsense"));
156165
reportManualEvent.Set();
157166
};
158167
channel.SetListeningForCustomEvents(true);

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,24 +62,25 @@ public async Task TestUpdateMemberships()
6262
{
6363
{"key", Guid.NewGuid().ToString()}
6464
},
65-
Type = "some_membership",
65+
Type = "someMembership",
6666
Status = "active"
6767
};
6868

6969
var manualUpdatedEvent = new ManualResetEvent(false);
7070
testMembership.OnMembershipUpdated += membership =>
7171
{
72+
Assert.True(membership.MembershipData.Type == testMembership.MembershipData.Type);
73+
Assert.True(membership.MembershipData.Status == testMembership.MembershipData.Status);
7274
Assert.True(membership.Id == testMembership.Id);
73-
var updatedData = membership.MembershipData.CustomData;
74-
Assert.True(updatedData["key"].ToString() == updateData.CustomData["key"].ToString());
75+
Assert.True(membership.MembershipData.CustomData["key"].ToString() == updateData.CustomData["key"].ToString());
7576
manualUpdatedEvent.Set();
7677
};
7778
testMembership.SetListeningForUpdates(true);
7879

7980
await Task.Delay(4000);
8081

81-
await testMembership.Update(updateData);
82-
var updated = manualUpdatedEvent.WaitOne(8000);
82+
TestUtils.AssertOperation(await testMembership.Update(updateData));
83+
var updated = manualUpdatedEvent.WaitOne(10000);
8384
Assert.IsTrue(updated);
8485
}
8586

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

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,7 @@ public async Task TestSendAndReceive()
4747
Assert.True(message.Type == PubnubChatMessageType.Text);
4848
manualReceiveEvent.Set();
4949
};
50-
await channel.SendText("Test message text", new SendTextParams()
51-
{
52-
//TODO: C# FIX, re-enable as soon as UserMetadata is in correct format
53-
/*MentionedUsers = new Dictionary<int, MentionedUser>() { { 0, new MentionedUser()
54-
{
55-
Id = user.Id,
56-
Name = user.UserName
57-
} } },*/
58-
});
50+
await channel.SendText("Test message text");
5951
var received = manualReceiveEvent.WaitOne(6000);
6052
Assert.IsTrue(received);
6153
}
@@ -84,8 +76,8 @@ public async Task TestReceivingMessageData()
8476
else if (message.MessageText == "message_with_data")
8577
{
8678
Assert.True(message.MentionedUsers.Any(x => x.Id == user.Id));
87-
Assert.True(message.TryGetQuotedMessage(out var quotedMessage) &&
88-
quotedMessage.MessageText == "message_to_be_quoted");
79+
var quoted = TestUtils.AssertOperation(await message.GetQuotedMessage());
80+
Assert.True(quoted.MessageText == "message_to_be_quoted");
8981
manualReceiveEvent.Set();
9082
}
9183
};
@@ -99,19 +91,21 @@ public async Task TestReceivingMessageData()
9991
public async Task TestGetMessage()
10092
{
10193
var manualReceiveEvent = new ManualResetEvent(false);
94+
ChatOperationResult<Message> receivedMessage = null;
10295
channel.OnMessageReceived += async message =>
10396
{
97+
await Task.Delay(3000);
10498
if (message.ChannelId == channel.Id)
10599
{
106-
var getMessage = await chat.GetMessage(channel.Id, message.TimeToken);
107-
Assert.True(!getMessage.Error, $"Error when trying to GetMessage(): {getMessage.Error}");
100+
receivedMessage = await chat.GetMessage(channel.Id, message.TimeToken);
108101
manualReceiveEvent.Set();
109102
}
110103
};
111104
await channel.SendText("something");
112105

113-
var received = manualReceiveEvent.WaitOne(4000);
106+
var received = manualReceiveEvent.WaitOne(8000);
114107
Assert.IsTrue(received);
108+
Assert.True(!receivedMessage.Error, $"Error when trying to GetMessage(): {receivedMessage.Exception?.Message}");
115109
}
116110

117111
[Test]

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,13 @@ public async Task TestThreadChannelParentChannelPinning()
8282
await thread.PinMessageToParentChannel(threadMessage);
8383

8484
await Task.Delay(7000);
85-
85+
8686
var pinned = TestUtils.AssertOperation(await channel.GetPinnedMessage());
8787
Assert.True(pinned.MessageText == "thread init message");
8888
await thread.UnPinMessageFromParentChannel();
8989

9090
await Task.Delay(7000);
91-
91+
9292
var getPinned = await channel.GetPinnedMessage();
9393
Assert.True(getPinned.Error);
9494
historyReadReset.Set();

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,10 @@ public async Task TestLastUserActive()
5656
public async Task TestUserUpdate()
5757
{
5858
var updatedReset = new ManualResetEvent(false);
59-
var testUser = await chat.GetOrCreateUser("wolololo_guy");
60-
61-
await Task.Delay(5000);
62-
59+
var testUser = await chat.GetOrCreateUser(Guid.NewGuid().ToString());
60+
await Task.Delay(3000);
61+
testUser.SetListeningForUpdates(true);
62+
await Task.Delay(3000);
6363
var newRandomUserName = Guid.NewGuid().ToString();
6464
testUser.OnUserUpdated += updatedUser =>
6565
{
@@ -72,8 +72,6 @@ public async Task TestUserUpdate()
7272
Assert.True(updatedUser.DataType == "someType");
7373
updatedReset.Set();
7474
};
75-
testUser.SetListeningForUpdates(true);
76-
await Task.Delay(3000);
7775
await testUser.Update(new ChatUserData()
7876
{
7977
Username = newRandomUserName,
@@ -88,7 +86,11 @@ await testUser.Update(new ChatUserData()
8886
Type = "someType"
8987
});
9088
var updated = updatedReset.WaitOne(15000);
89+
testUser.SetListeningForUpdates(false);
9190
Assert.True(updated);
91+
92+
//Cleanup
93+
await testUser.DeleteUser();
9294
}
9395

9496
[Test]

c-sharp-chat/PubnubChatApi/PubnubChatApi/Entities/Base/ChatEntity.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ namespace PubNubChatAPI.Entities
77
public abstract class ChatEntity
88
{
99
protected Chat chat;
10-
protected Subscription? updateSubscription;
10+
protected Subscription updateSubscription;
1111
protected abstract string UpdateChannelId { get; }
1212

1313
internal ChatEntity(Chat chat)
1414
{
1515
this.chat = chat;
1616
}
1717

18-
protected void SetListening(Subscription subscription, SubscriptionOptions subscriptionOptions, bool listen, string channelId, SubscribeCallback listener)
18+
protected void SetListening(ref Subscription subscription, SubscriptionOptions subscriptionOptions, bool listen, string channelId, SubscribeCallback listener)
1919
{
2020
if (listen)
2121
{
@@ -35,7 +35,7 @@ protected void SetListening(Subscription subscription, SubscriptionOptions subsc
3535

3636
public virtual void SetListeningForUpdates(bool listen)
3737
{
38-
SetListening(updateSubscription, SubscriptionOptions.None, listen, UpdateChannelId, CreateUpdateListener());
38+
SetListening(ref updateSubscription, SubscriptionOptions.None, listen, UpdateChannelId, CreateUpdateListener());
3939
}
4040

4141
protected abstract SubscribeCallback CreateUpdateListener();

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

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,10 @@ internal static async Task<PNResult<PNSetChannelMetadataResult>> UpdateChannelDa
195195
{
196196
operation = operation.Custom(data.CustomData);
197197
}
198+
if (!string.IsNullOrEmpty(data.Type))
199+
{
200+
operation = operation.Type(data.Type);
201+
}
198202
return await operation.ExecuteAsync();
199203
}
200204

@@ -219,7 +223,7 @@ public override async Task<ChatOperationResult> Refresh()
219223

220224
public void SetListeningForCustomEvents(bool listen)
221225
{
222-
SetListening(customEventsSubscription, SubscriptionOptions.None, listen, Id, chat.ListenerFactory.ProduceListener(messageCallback:
226+
SetListening(ref customEventsSubscription, SubscriptionOptions.None, listen, Id, chat.ListenerFactory.ProduceListener(messageCallback:
223227
delegate(Pubnub pn, PNMessageResult<object> m)
224228
{
225229
if (ChatParsers.TryParseEvent(chat, m, PubnubChatEventType.Custom, out var customEvent))
@@ -232,7 +236,7 @@ public void SetListeningForCustomEvents(bool listen)
232236

233237
public void SetListeningForReportEvents(bool listen)
234238
{
235-
SetListening(reportEventsSubscription, SubscriptionOptions.None, listen, $"{Chat.INTERNAL_MODERATION_PREFIX}_{Id}", chat.ListenerFactory.ProduceListener(messageCallback:
239+
SetListening(ref reportEventsSubscription, SubscriptionOptions.None, listen, $"{Chat.INTERNAL_MODERATION_PREFIX}_{Id}", chat.ListenerFactory.ProduceListener(messageCallback:
236240
delegate(Pubnub pn, PNMessageResult<object> m)
237241
{
238242
if (ChatParsers.TryParseEvent(chat, m, PubnubChatEventType.Report, out var reportEvent))
@@ -245,7 +249,7 @@ public void SetListeningForReportEvents(bool listen)
245249

246250
public void SetListeningForReadReceiptsEvents(bool listen)
247251
{
248-
SetListening(readReceiptsSubscription, SubscriptionOptions.None, listen, Id, chat.ListenerFactory.ProduceListener(messageCallback:
252+
SetListening(ref readReceiptsSubscription, SubscriptionOptions.None, listen, Id, chat.ListenerFactory.ProduceListener(messageCallback:
249253
async delegate(Pubnub pn, PNMessageResult<object> m)
250254
{
251255
if (ChatParsers.TryParseEvent(chat, m, PubnubChatEventType.Receipt, out var readEvent))
@@ -270,7 +274,7 @@ async delegate(Pubnub pn, PNMessageResult<object> m)
270274

271275
public void SetListeningForTyping(bool listen)
272276
{
273-
SetListening(typingEventsSubscription, SubscriptionOptions.None, listen, Id, chat.ListenerFactory.ProduceListener(messageCallback:
277+
SetListening(ref typingEventsSubscription, SubscriptionOptions.None, listen, Id, chat.ListenerFactory.ProduceListener(messageCallback:
274278
delegate(Pubnub pn, PNMessageResult<object> m)
275279
{
276280
if (ChatParsers.TryParseEvent(chat, m, PubnubChatEventType.Typing, out var rawTypingEvent))
@@ -326,7 +330,7 @@ public void SetListeningForTyping(bool listen)
326330

327331
public void SetListeningForPresence(bool listen)
328332
{
329-
SetListening(presenceEventsSubscription, SubscriptionOptions.ReceivePresenceEvents, listen, Id, chat.ListenerFactory.ProduceListener(presenceCallback:
333+
SetListening(ref presenceEventsSubscription, SubscriptionOptions.ReceivePresenceEvents, listen, Id, chat.ListenerFactory.ProduceListener(presenceCallback:
330334
async delegate(Pubnub pn, PNPresenceEventResult p)
331335
{
332336
var whoIs = await WhoIsPresent();
@@ -451,7 +455,7 @@ public MessageDraft CreateMessageDraft(UserSuggestionSource userSuggestionSource
451455
/// <seealso cref="Join"/>
452456
public void Disconnect()
453457
{
454-
SetListening(subscription, SubscriptionOptions.None, false, Id, null);
458+
SetListening(ref subscription, SubscriptionOptions.None, false, Id, null);
455459
}
456460

457461
/// <summary>
@@ -516,7 +520,7 @@ public async void Leave()
516520
/// <seealso cref="Join"/>
517521
public void Connect()
518522
{
519-
SetListening(subscription, SubscriptionOptions.None, true, Id, chat.ListenerFactory.ProduceListener(messageCallback:
523+
SetListening(ref subscription, SubscriptionOptions.None, true, Id, chat.ListenerFactory.ProduceListener(messageCallback:
520524
delegate(Pubnub pn, PNMessageResult<object> m)
521525
{
522526
if (ChatParsers.TryParseMessageResult(chat, m, out var message))
@@ -866,7 +870,14 @@ public async Task<ChatOperationResult<UsersRestrictionsWrapper>> GetUsersRestric
866870
/// <seealso cref="WhoIsPresent"/>
867871
public async Task<ChatOperationResult<bool>> IsUserPresent(string userId)
868872
{
869-
throw new NotImplementedException();
873+
var result = new ChatOperationResult<bool>();
874+
var wherePresent = await chat.WherePresent(userId);
875+
if (result.RegisterOperation(wherePresent))
876+
{
877+
return result;
878+
}
879+
result.Result = wherePresent.Result.Contains(Id);
880+
return result;
870881
}
871882

872883
/// <summary>

0 commit comments

Comments
 (0)