Skip to content

Commit 698bb49

Browse files
Fix all issues found in FilesTests
1 parent c87d3ac commit 698bb49

File tree

4 files changed

+55
-32
lines changed

4 files changed

+55
-32
lines changed

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

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ namespace PubNubChatApi.Tests;
77
[TestFixture]
88
public class FilesTests
99
{
10+
private const string FILE_NAME = "fileupload.txt";
11+
private const string FILE_LOCATION = @"fileupload.txt";
12+
private const string LARGE_FILE_NAME = "file_large.png";
13+
private const string LARGE_FILE_LOCATION = @"file_large.png";
14+
1015
private Chat chat;
1116
private Channel channel;
1217
private User user;
@@ -18,7 +23,7 @@ public async Task Setup()
1823
new PNConfiguration(new UserId("file_tests_user"))
1924
{
2025
PublishKey = PubnubTestsParameters.PublishKey,
21-
SubscribeKey = PubnubTestsParameters.SubscribeKey
26+
SubscribeKey = PubnubTestsParameters.SubscribeKey,
2227
}));
2328
channel = TestUtils.AssertOperation(await chat.CreatePublicConversation("file_tests_channel"));
2429
user = TestUtils.AssertOperation(await chat.GetCurrentUser());
@@ -61,6 +66,9 @@ public async Task TestFileUploadInMessage()
6166
//Cleanup: delete files from channel
6267
await ClearChannelOfFiles();
6368

69+
await channel.Join();
70+
await Task.Delay(250);
71+
6472
var receivedMessageReset = new ManualResetEvent(false);
6573
Message receivedMessage = null;
6674
channel.OnMessageReceived += message =>
@@ -79,9 +87,9 @@ public async Task TestFileUploadInMessage()
7987
[
8088
new ChatInputFile()
8189
{
82-
Name = "the_file",
90+
Name = FILE_NAME,
8391
Type = "text",
84-
Source = "fileupload.txt"
92+
Source = FILE_LOCATION
8593
}
8694
]
8795
}));
@@ -94,7 +102,7 @@ public async Task TestFileUploadInMessage()
94102
Assert.True(receivedMessage.Files.Count == 1,
95103
$"receivedMessage.Files.Count was {receivedMessage.Files.Count} instead of 1!");
96104
var receivedFile = receivedMessage.Files[0];
97-
Assert.True(receivedFile.Name == "the_file",
105+
Assert.True(receivedFile.Name == FILE_NAME,
98106
$"Expected file name \"the_file\" but got \"{receivedFile.Name}\"");
99107
Assert.True(receivedFile.Type == "text", $"Expected file type \"text\" but got \"{receivedFile.Type}\"");
100108
Assert.True(!string.IsNullOrEmpty(receivedFile.Id), "File ID is empty");
@@ -114,6 +122,9 @@ public async Task TestFileUploadInMessageDraft()
114122
//Cleanup: delete files from channel
115123
await ClearChannelOfFiles();
116124

125+
await channel.Join();
126+
await Task.Delay(250);
127+
117128
var receivedMessageReset = new ManualResetEvent(false);
118129
Message receivedMessage = null;
119130
channel.OnMessageReceived += message =>
@@ -130,9 +141,9 @@ public async Task TestFileUploadInMessageDraft()
130141
messageDraft.InsertText(0, "FILE");
131142
messageDraft.Files.Add(new ChatInputFile()
132143
{
133-
Name = "the_file",
144+
Name = FILE_NAME,
134145
Type = "text",
135-
Source = "fileupload.txt"
146+
Source = FILE_LOCATION
136147
});
137148

138149
TestUtils.AssertOperation(await messageDraft.Send());
@@ -145,7 +156,7 @@ public async Task TestFileUploadInMessageDraft()
145156
Assert.True(receivedMessage.Files.Count == 1,
146157
$"receivedMessage.Files.Count was {receivedMessage.Files.Count} instead of 1!");
147158
var receivedFile = receivedMessage.Files[0];
148-
Assert.True(receivedFile.Name == "the_file",
159+
Assert.True(receivedFile.Name == FILE_NAME,
149160
$"Expected file name \"the_file\" but got \"{receivedFile.Name}\"");
150161
Assert.True(receivedFile.Type == "text", $"Expected file type \"text\" but got \"{receivedFile.Type}\"");
151162
Assert.True(!string.IsNullOrEmpty(receivedFile.Id), "File ID is empty");
@@ -177,9 +188,9 @@ public async Task TestFileUploadErrorHandling()
177188
[
178189
new ChatInputFile()
179190
{
180-
Name = "the_BIG_file",
191+
Name = LARGE_FILE_NAME,
181192
Type = "image",
182-
Source = "file_large.png"
193+
Source = LARGE_FILE_LOCATION
183194
}
184195
]
185196
});

c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/PubNubChatApi.Tests.csproj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,13 @@
2525
<ProjectReference Include="..\PubnubChatApi\PubnubChatApi.csproj" />
2626
</ItemGroup>
2727

28+
<ItemGroup>
29+
<None Update="file_large.png">
30+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
31+
</None>
32+
<None Update="fileupload.txt">
33+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
34+
</None>
35+
</ItemGroup>
36+
2837
</Project>

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

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -810,7 +810,7 @@ private async Task<ChatOperationResult<ChatFile>> SendFileForPublish(ChatInputFi
810810
{
811811
return result;
812812
}
813-
var getUrl = await chat.PubnubInstance.GetFileUrl().FileId(send.Result.FileId)
813+
var getUrl = await chat.PubnubInstance.GetFileUrl().Channel(Id).FileId(send.Result.FileId)
814814
.FileName(send.Result.FileName).ExecuteAsync().ConfigureAwait(false);
815815
if (result.RegisterOperation(getUrl))
816816
{
@@ -851,7 +851,6 @@ public virtual async Task<ChatOperationResult> SendText(string message, SendText
851851
TaskCompletionSource<bool> completionSource = new ();
852852
chat.RateLimiter.RunWithinLimits(Id, baseInterval, async () =>
853853
{
854-
855854
var messageDict = new Dictionary<string, string>()
856855
{
857856
{"text", message},
@@ -870,7 +869,7 @@ public virtual async Task<ChatOperationResult> SendText(string message, SendText
870869
{
871870
var combinedException = string.Join("\n",failedUploads.Select(x => x.Exception.Message));
872871
result.Exception = new PNException($"Message publishing aborted: {failedUploads.Count} out of {fileResults.Length} " +
873-
$"file uploads failed. Exceptions from file uploads:\n{combinedException}");
872+
$"file uploads failed. Exceptions from file uploads: {combinedException}");
874873
result.Error = true;
875874
return result;
876875
}
@@ -922,6 +921,8 @@ public virtual async Task<ChatOperationResult> SendText(string message, SendText
922921
}, exception =>
923922
{
924923
chat.Logger.Error($"Error occured when trying to SendText(): {exception.Message}");
924+
result.Error = true;
925+
result.Exception = new PNException($"Encountered exception in SendText(): {exception.Message}");
925926
completionSource.SetResult(true);
926927
});
927928

@@ -1315,26 +1316,28 @@ public async Task<ChatOperationResult<ChatFilesResult>> GetFiles(int limit = 0,
13151316
return result;
13161317
}
13171318

1318-
var getUrlsTasks = listFiles.Result.FilesList.Select(x =>
1319-
chat.PubnubInstance.GetFileUrl().Channel(Id).FileName(x.Name).FileId(x.Id).ExecuteAsync());
1320-
var getUrls = await Task.WhenAll(getUrlsTasks).ConfigureAwait(false);
1321-
foreach (var pnResult in getUrls)
1319+
var files = new List<ChatFile>();
1320+
if (listFiles.Result.FilesList != null && listFiles.Result.FilesList.Any())
13221321
{
1323-
if (result.RegisterOperation(pnResult))
1322+
var getUrlsTasks = listFiles.Result.FilesList.Select(x =>
1323+
chat.PubnubInstance.GetFileUrl().Channel(Id).FileId(x.Id).FileName(x.Name).ExecuteAsync());
1324+
var getUrls = await Task.WhenAll(getUrlsTasks).ConfigureAwait(false);
1325+
foreach (var pnResult in getUrls)
13241326
{
1325-
return result;
1327+
if (result.RegisterOperation(pnResult))
1328+
{
1329+
return result;
1330+
}
13261331
}
1327-
}
1328-
1329-
var files = new List<ChatFile>();
1330-
for (int i = 0; i < listFiles.Result.FilesList.Count; i++)
1331-
{
1332-
files.Add(new ChatFile()
1332+
for (int i = 0; i < listFiles.Result.FilesList.Count; i++)
13331333
{
1334-
Id = listFiles.Result.FilesList[i].Id,
1335-
Name = listFiles.Result.FilesList[i].Name,
1336-
Url = getUrls[i].Result.Url,
1337-
});
1334+
files.Add(new ChatFile()
1335+
{
1336+
Id = listFiles.Result.FilesList[i].Id,
1337+
Name = listFiles.Result.FilesList[i].Name,
1338+
Url = getUrls[i].Result.Url,
1339+
});
1340+
}
13381341
}
13391342

13401343
result.Result = new ChatFilesResult()

c-sharp-chat/PubnubChatApi/PubnubChatApi/Utilities/ChatParsers.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ internal static bool TryParseMessageResult(Chat chat, PNMessageResult<object> me
2828
var meta = messageResult.UserMetadata ?? new Dictionary<string, object>();
2929

3030
var messageFiles = new List<ChatFile>();
31-
if (messageDict.TryGetValue("files", out var filesObject))
31+
if (messageDict.TryGetValue("files", out var filesRawString))
3232
{
33-
var files = filesObject as List<object>;
33+
var files = chat.PubnubInstance.JsonPluggableLibrary.DeserializeToListOfObject(filesRawString.ToString());
3434
foreach (var file in files)
3535
{
3636
var fileDict =
@@ -78,9 +78,9 @@ internal static bool TryParseMessageFromHistory(Chat chat, string channelId, PNH
7878
var text = messageDict["text"].ToString();
7979

8080
var messageFiles = new List<ChatFile>();
81-
if (messageDict.TryGetValue("files", out var filesObject))
81+
if (messageDict.TryGetValue("files", out var filesRawString))
8282
{
83-
var files = filesObject as List<object>;
83+
var files = chat.PubnubInstance.JsonPluggableLibrary.DeserializeToListOfObject(filesRawString.ToString());
8484
foreach (var file in files)
8585
{
8686
var fileDict =

0 commit comments

Comments
 (0)