Skip to content

Add missing integration test coverage #16

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 98 additions & 0 deletions c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ChannelTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,79 @@ public async Task CleanUp()
chat.Destroy();
await Task.Delay(3000);
}

[Test]
public async Task TestUpdateChannel()
{
var channel = await chat.CreatePublicConversation();
channel.SetListeningForUpdates(true);

await Task.Delay(3000);

var updateReset = new ManualResetEvent(false);
var updatedData = new ChatChannelData()
{
ChannelDescription = "some description",
ChannelCustomDataJson = "{\"key\":\"value\"}",
ChannelName = "some name",
ChannelStatus = "yes",
ChannelType = "sometype"
};
channel.OnChannelUpdate += updatedChannel =>
{
Assert.True(updatedChannel.Description == updatedData.ChannelDescription, "updatedChannel.Description != updatedData.ChannelDescription");
Assert.True(updatedChannel.CustomDataJson == updatedData.ChannelCustomDataJson, "updatedChannel.CustomDataJson != updatedData.ChannelCustomDataJson");
Assert.True(updatedChannel.Name == updatedData.ChannelName, "updatedChannel.Name != updatedData.ChannelDescription");
Assert.True(updatedChannel.Status == updatedData.ChannelStatus, "updatedChannel.Status != updatedData.ChannelStatus");
Assert.True(updatedChannel.Type == updatedData.ChannelType, "updatedChannel.Type != updatedData.ChannelType");
updateReset.Set();
};
await channel.Update(updatedData);
var updated = updateReset.WaitOne(15000);
Assert.True(updated);
}

[Test]
public async Task TestDeleteChannel()
{
var channel = await chat.CreatePublicConversation();

await Task.Delay(3000);

Assert.True(chat.TryGetChannel(channel.Id, out _), "Couldn't fetch created channel from chat");

await channel.Delete();

await Task.Delay(3000);

Assert.False(chat.TryGetChannel(channel.Id, out _), "Fetched the supposedly-deleted channel from chat");
}

[Test]
public async Task TestLeaveChannel()
{
var currentChatUser = await chat.GetCurrentUserAsync();

Assert.IsNotNull(currentChatUser, "currentChatUser was null");

var channel = await chat.CreatePublicConversation();
channel.Join();

await Task.Delay(3000);

var memberships = await channel.GetMemberships();

Assert.True(memberships.Memberships.Any(x => x.UserId == currentChatUser.Id), "Join failed, current user not found in channel memberships");

channel.Leave();

await Task.Delay(3000);

memberships = await channel.GetMemberships();

Assert.False(memberships.Memberships.Any(x => x.UserId == currentChatUser.Id), "Leave failed, current user found in channel memberships");
}

[Test]
public async Task TestGetUserSuggestions()
{
Expand Down Expand Up @@ -214,4 +286,30 @@ public async Task TestEmitUserMention()
var received = receivedManualEvent.WaitOne(7000);
Assert.True(received);
}

[Test]
public async Task TestChannelIsPresent()
{
var someChannel = await chat.CreatePublicConversation();
someChannel.Join();

await Task.Delay(4000);

var isPresent = await someChannel.IsUserPresent(user.Id);

Assert.True(isPresent, "someChannel.IsUserPresent() doesn't return true for most recently joined channel!");
}

[Test]
public async Task TestChannelWhoIsPresent()
{
var someChannel = await chat.CreatePublicConversation();
someChannel.Join();

await Task.Delay(4000);

var who = await someChannel.WhoIsPresent();

Assert.Contains(user.Id, who, "channel.WhoIsPresent() doesn't have most recently joine user!");
}
}
104 changes: 88 additions & 16 deletions c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/MessageDraftTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@ public async Task Setup()
PubnubTestsParameters.SubscribeKey,
"message_draft_tests_user")
);
channel = await chat.CreatePublicConversation("message_draft_tests_channel");
channel = await chat.CreatePublicConversation("message_draft_tests_channel", new ChatChannelData()
{
ChannelName = "MessageDraftTestingChannel"
});
if (!chat.TryGetCurrentUser(out var user))
{
Assert.Fail();
Expand Down Expand Up @@ -77,31 +80,100 @@ public async Task TestInsertSuggestedMention()
var messageDraft = channel.CreateMessageDraft();
messageDraft.SetSearchForSuggestions(true);
var successReset = new ManualResetEvent(false);
var hadSuggestion = false;
var step = "user_suggestion";
messageDraft.OnDraftUpdated += (elements, mentions) =>
{
if (!hadSuggestion)
switch (step)
{
var userSuggestion =
mentions.FirstOrDefault(x => x.Target is { Target: "mock_user", Type: MentionType.User });
case "user_suggestion":
var userSuggestion =
mentions.FirstOrDefault(x => x.Target is { Target: "mock_user", Type: MentionType.User });

Assert.True(elements.Any(x => x.Text == "maybe i'll mention @Mock") && userSuggestion != null,
"Received correct user suggestion");
hadSuggestion = true;
Assert.True(elements.Any(x => x.Text == "maybe i'll mention @Mock") && userSuggestion != null,
"Received incorrect user suggestion");
step = "user_inserted";

messageDraft.InsertSuggestedMention(userSuggestion, userSuggestion.ReplaceTo);
}
else
{
Assert.True(elements.Any(x => x.Text.Contains("Mock Usernamiski")));
successReset.Set();
messageDraft.InsertSuggestedMention(userSuggestion, userSuggestion.ReplaceTo);
break;
case "user_inserted":
Assert.True(elements.Any(x => x.Text.Contains("Mock Usernamiski")));
successReset.Set();
break;
//TODO: to be re-enabled after Channel and Link mentions approach unification
/*case "channel_suggestion":
var channelSuggestion =
mentions.FirstOrDefault(x => x.Target is { Target: "message_draft_tests_channel", Type: MentionType.Channel });

Assert.True(elements.Any(x => x.Text.Contains("now mention #MessageDraft")) && channelSuggestion != null,
"Received incorrect channel suggestion");
step = "channel_inserted";

messageDraft.InsertSuggestedMention(channelSuggestion, channelSuggestion.ReplaceTo);
break;
case "channel_inserted":
Assert.True(elements.Any(x => x.Text.Contains("MessageDraftTestingChannel")));
successReset.Set();
break;*/
default:
Assert.Fail("Unexpected draft update callback flow in test");
break;
}
};
messageDraft.InsertText(0, "maybe i'll mention @Mock");
var gotCallback = successReset.WaitOne(5000);
Assert.True(gotCallback);
var userInserted = successReset.WaitOne(5000);
Assert.True(userInserted, "didn't receive user insertion callback");

//TODO: to be re-enabled after Channel and Link mentions approach unification
/*step = "channel_suggestion";
successReset = new ManualResetEvent(false);
messageDraft.InsertText(0, "now mention #MessageDraft ");
var channelInserted = successReset.WaitOne(5000);
Assert.True(channelInserted, "didn't receive channel insertion callback");

var messageReset = new ManualResetEvent(false);
channel.OnMessageReceived += message =>
{
Assert.True(message.ReferencedChannels.Any(x => x.Id == channel.Id), "received message doesn't contain expected referenced channel");
Assert.True(message.MentionedUsers.Any(x => x.Id == dummyUser.Id), "received message doesn't contain expected mentioned user");
messageReset.Set();
};
await messageDraft.Send();
var receivedMessage = messageReset.WaitOne(10000);
Assert.True(receivedMessage, "didn't receive message callback");*/
}

//TODO: to be re-enabled after Channel and Link mentions approach unification
/*[Test]
public async Task TestAddAndSendTextLink()
{
var messageDraft = channel.CreateMessageDraft();
messageDraft.InsertText(0, "some text goes here");
var updateReset = new ManualResetEvent(false);
messageDraft.OnDraftUpdated += (elements, mentions) =>
{
Assert.True(elements.Any(x => x is { Text: "some", MentionTarget: {Target: "www.pubnub.com", Type: MentionType.Url} })
, "updated message draft doesn't contain expected element");
updateReset.Set();
};
messageDraft.AddMention(0, 4, new MentionTarget()
{
Target = "www.pubnub.com",
Type = MentionType.Url
});
var updated = updateReset.WaitOne(3000);
Assert.True(updated, "didn't receive md update callback");

var messageReset = new ManualResetEvent(false);
channel.OnMessageReceived += message =>
{
Assert.True(message.TextLinks.Any(x => x.Link == "www.pubnub.com"), "didn't find expected link in received message");
messageReset.Set();
};
await messageDraft.Send();
var received = messageReset.WaitOne(6000);
Assert.True(received, "didn't receive message callback after md send");
}*/

[Test]
public async Task TestAddAndRemoveMention()
{
Expand Down
28 changes: 28 additions & 0 deletions c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/MessageTests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System.Diagnostics;
using PubNubChatAPI.Entities;
using PubnubChatApi.Entities.Data;
using PubnubChatApi.Enums;

namespace PubNubChatApi.Tests;

Expand Down Expand Up @@ -44,6 +45,7 @@ public async Task TestSendAndReceive()
channel.OnMessageReceived += message =>
{
Assert.True(message.MessageText == "Test message text");
Assert.True(message.Type == PubnubChatMessageType.Text);
manualReceiveEvent.Set();
};
await channel.SendText("Test message text", new SendTextParams()
Expand Down Expand Up @@ -124,6 +126,32 @@ public async Task TestEditMessage()
var receivedAndUpdated = manualUpdatedEvent.WaitOne(14000);
Assert.IsTrue(receivedAndUpdated);
}

[Test]
public async Task TestGetOriginalMessageText()
{
var manualUpdatedEvent = new ManualResetEvent(false);
var originalTextAfterUpdate = "";
channel.OnMessageReceived += async message =>
{
message.SetListeningForUpdates(true);
await Task.Delay(2000);
message.OnMessageUpdated += updatedMessage =>
{
originalTextAfterUpdate = updatedMessage.OriginalMessageText;
manualUpdatedEvent.Set();
};
await message.EditMessageText("new-text");
};
var originalText = "something";
await channel.SendText(originalText);

var receivedAndUpdated = manualUpdatedEvent.WaitOne(14000);

Assert.True(receivedAndUpdated, "didn't receive message update");
Assert.IsTrue(originalText == originalTextAfterUpdate,
$"message.OriginalMessageText has wrong value! Expected \"{originalText}\" but got \"{originalTextAfterUpdate}\"");
}

[Test]
public async Task TestDeleteMessage()
Expand Down
40 changes: 40 additions & 0 deletions c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/UserTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,4 +90,44 @@ await testUser.Update(new ChatUserData()
var updated = updatedReset.WaitOne(15000);
Assert.True(updated);
}

[Test]
public async Task TestUserDelete()
{
var someUser = await chat.CreateUser(Guid.NewGuid().ToString());

Assert.True(chat.TryGetUser(someUser.Id, out _), "Couldn't get freshly created user");

await someUser.DeleteUser();

await Task.Delay(3000);

Assert.False(chat.TryGetUser(someUser.Id, out _), "Got the freshly deleted user");
}

[Test]
public async Task TestUserWherePresent()
{
var someChannel = await chat.CreatePublicConversation();
someChannel.Join();

await Task.Delay(4000);

var where = await user.WherePresent();

Assert.Contains(someChannel.Id, where, "user.WherePresent() doesn't have most recently joined channel!");
}

[Test]
public async Task TestUserIsPresentOn()
{
var someChannel = await chat.CreatePublicConversation();
someChannel.Join();

await Task.Delay(4000);

var isOn = await user.IsPresentOn(someChannel.Id);

Assert.True(isOn, "user.IsPresentOn() doesn't return true for most recently joined channel!");
}
}
4 changes: 0 additions & 4 deletions c-sharp-chat/PubnubChatApi/PubnubChatApi/Entities/Chat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -233,10 +233,6 @@ private static extern int pn_chat_get_unread_messages_counts(
string prev,
StringBuilder result);

[DllImport("pubnub-chat")]
private static extern int pn_chat_get_channel_suggestions(IntPtr chat, string text, int limit,
StringBuilder result);

[DllImport("pubnub-chat")]
private static extern int pn_chat_mark_all_messages_as_read(
IntPtr chat,
Expand Down
Binary file modified c-sharp-chat/PubnubChatApi/PubnubChatApi/pubnub-chat.dll
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading