Skip to content

Commit c87d3ac

Browse files
Add file tests top API project
1 parent 92b2da0 commit c87d3ac

5 files changed

Lines changed: 195 additions & 1 deletion

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public async Task Setup()
2828
[TearDown]
2929
public async Task CleanUp()
3030
{
31-
channel.Leave();
31+
await channel.Leave();
3232
await Task.Delay(3000);
3333
chat.Destroy();
3434
await Task.Delay(3000);
Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
using PubnubApi;
2+
using PubnubChatApi;
3+
using Channel = PubnubChatApi.Channel;
4+
5+
namespace PubNubChatApi.Tests;
6+
7+
[TestFixture]
8+
public class FilesTests
9+
{
10+
private Chat chat;
11+
private Channel channel;
12+
private User user;
13+
14+
[SetUp]
15+
public async Task Setup()
16+
{
17+
chat = TestUtils.AssertOperation(await Chat.CreateInstance(new PubnubChatConfig(),
18+
new PNConfiguration(new UserId("file_tests_user"))
19+
{
20+
PublishKey = PubnubTestsParameters.PublishKey,
21+
SubscribeKey = PubnubTestsParameters.SubscribeKey
22+
}));
23+
channel = TestUtils.AssertOperation(await chat.CreatePublicConversation("file_tests_channel"));
24+
user = TestUtils.AssertOperation(await chat.GetCurrentUser());
25+
await channel.Join();
26+
await Task.Delay(3500);
27+
}
28+
29+
[TearDown]
30+
public async Task CleanUp()
31+
{
32+
await ClearChannelOfFiles();
33+
await channel.Leave();
34+
await Task.Delay(3000);
35+
chat.Destroy();
36+
await Task.Delay(3000);
37+
}
38+
39+
private async Task ClearChannelOfFiles()
40+
{
41+
var files = await channel.GetFiles();
42+
if (files.Error)
43+
{
44+
Assert.Fail($"Error in files cleanup: {files.Exception.Message}");
45+
return;
46+
}
47+
48+
foreach (var file in files.Result.Files)
49+
{
50+
var result = await channel.DeleteFile(file.Id, file.Name);
51+
if (result.Error)
52+
{
53+
Assert.Fail($"Error in files cleanup: {files.Exception.Message}");
54+
}
55+
}
56+
}
57+
58+
[Test]
59+
public async Task TestFileUploadInMessage()
60+
{
61+
//Cleanup: delete files from channel
62+
await ClearChannelOfFiles();
63+
64+
var receivedMessageReset = new ManualResetEvent(false);
65+
Message receivedMessage = null;
66+
channel.OnMessageReceived += message =>
67+
{
68+
if (message.MessageText == "FILE")
69+
{
70+
receivedMessage = message;
71+
receivedMessageReset.Set();
72+
}
73+
};
74+
75+
//Add file to SendTextParams and send message
76+
TestUtils.AssertOperation(await channel.SendText("FILE", new SendTextParams()
77+
{
78+
Files =
79+
[
80+
new ChatInputFile()
81+
{
82+
Name = "the_file",
83+
Type = "text",
84+
Source = "fileupload.txt"
85+
}
86+
]
87+
}));
88+
89+
//Receive message and check message.Files
90+
var received = receivedMessageReset.WaitOne(10000);
91+
Assert.True(received, "Did not receive message with file at all!");
92+
Assert.True(receivedMessage != null, "receivedMessage was null!");
93+
Assert.True(receivedMessage.Files != null, "receivedMessage.Files was null!");
94+
Assert.True(receivedMessage.Files.Count == 1,
95+
$"receivedMessage.Files.Count was {receivedMessage.Files.Count} instead of 1!");
96+
var receivedFile = receivedMessage.Files[0];
97+
Assert.True(receivedFile.Name == "the_file",
98+
$"Expected file name \"the_file\" but got \"{receivedFile.Name}\"");
99+
Assert.True(receivedFile.Type == "text", $"Expected file type \"text\" but got \"{receivedFile.Type}\"");
100+
Assert.True(!string.IsNullOrEmpty(receivedFile.Id), "File ID is empty");
101+
Assert.True(!string.IsNullOrEmpty(receivedFile.Url), "File URL is empty");
102+
103+
//Check channel.GetFiles() for the file and check if data matches with the one from message.Files
104+
var channelFiles = TestUtils.AssertOperation(await channel.GetFiles());
105+
Assert.True(
106+
channelFiles.Files.Any(x =>
107+
x.Id == receivedFile.Id && x.Name == receivedFile.Name && x.Url == receivedFile.Url),
108+
"Did not find message file in channel.GetFiles()!");
109+
}
110+
111+
[Test]
112+
public async Task TestFileUploadInMessageDraft()
113+
{
114+
//Cleanup: delete files from channel
115+
await ClearChannelOfFiles();
116+
117+
var receivedMessageReset = new ManualResetEvent(false);
118+
Message receivedMessage = null;
119+
channel.OnMessageReceived += message =>
120+
{
121+
if (message.MessageText == "FILE")
122+
{
123+
receivedMessage = message;
124+
receivedMessageReset.Set();
125+
}
126+
};
127+
128+
//Add file to SendTextParams in a MessageDraft and send message
129+
var messageDraft = channel.CreateMessageDraft();
130+
messageDraft.InsertText(0, "FILE");
131+
messageDraft.Files.Add(new ChatInputFile()
132+
{
133+
Name = "the_file",
134+
Type = "text",
135+
Source = "fileupload.txt"
136+
});
137+
138+
TestUtils.AssertOperation(await messageDraft.Send());
139+
140+
//Receive message and check message.Files
141+
var received = receivedMessageReset.WaitOne(10000);
142+
Assert.True(received, "Did not receive message with file at all!");
143+
Assert.True(receivedMessage != null, "receivedMessage was null!");
144+
Assert.True(receivedMessage.Files != null, "receivedMessage.Files was null!");
145+
Assert.True(receivedMessage.Files.Count == 1,
146+
$"receivedMessage.Files.Count was {receivedMessage.Files.Count} instead of 1!");
147+
var receivedFile = receivedMessage.Files[0];
148+
Assert.True(receivedFile.Name == "the_file",
149+
$"Expected file name \"the_file\" but got \"{receivedFile.Name}\"");
150+
Assert.True(receivedFile.Type == "text", $"Expected file type \"text\" but got \"{receivedFile.Type}\"");
151+
Assert.True(!string.IsNullOrEmpty(receivedFile.Id), "File ID is empty");
152+
Assert.True(!string.IsNullOrEmpty(receivedFile.Url), "File URL is empty");
153+
154+
//Check channel.GetFiles() for the file and check if data matches with the one from message.Files
155+
var channelFiles = TestUtils.AssertOperation(await channel.GetFiles());
156+
Assert.True(
157+
channelFiles.Files.Any(x =>
158+
x.Id == receivedFile.Id && x.Name == receivedFile.Name && x.Url == receivedFile.Url),
159+
"Did not find message file in channel.GetFiles()!");
160+
}
161+
162+
[Test]
163+
public async Task TestFileUploadErrorHandling()
164+
{
165+
var receivedMessageReset = new ManualResetEvent(false);
166+
channel.OnMessageReceived += message =>
167+
{
168+
if (message.MessageText == "FILE TOO BIG")
169+
{
170+
receivedMessageReset.Set();
171+
}
172+
};
173+
174+
var sendResult = await channel.SendText("FILE TOO BIG", new SendTextParams()
175+
{
176+
Files =
177+
[
178+
new ChatInputFile()
179+
{
180+
Name = "the_BIG_file",
181+
Type = "image",
182+
Source = "file_large.png"
183+
}
184+
]
185+
});
186+
Assert.True(sendResult.Error, "sendResult.Error should be true for file over size limit");
187+
Assert.True(sendResult.Exception.Message.Contains("Your proposed upload exceeds the maximum allowed size"), "Error message should contain info about file size");
188+
189+
var received = receivedMessageReset.WaitOne(5000);
190+
Assert.False(received, "SendText should abort and not send message in case of file upload error");
191+
}
192+
}
7.27 MB
Loading
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is the file to be uploaded for testing.

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,7 @@ public async Task<ChatOperationResult> Send(SendTextParams sendTextParams)
587587
}
588588
}
589589
sendTextParams.MentionedUsers = mentions;
590+
sendTextParams.Files = Files;
590591
return await channel.SendText(Render(), sendTextParams).ConfigureAwait(false);
591592
}
592593

0 commit comments

Comments
 (0)