Skip to content

Commit fdf5650

Browse files
juancamilorCamilo Ramirez
andauthored
Added unit test for pagination (Azure#16667)
* Added unit test for pagination * Simplify tests by removing continuationToken Co-authored-by: Camilo Ramirez <juramir@microsoft.com>
1 parent b783816 commit fdf5650

File tree

7 files changed

+1569
-1460
lines changed

7 files changed

+1569
-1460
lines changed

sdk/communication/Azure.Communication.Chat/src/Properties/AssemblyInfo.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@
44
using System.Runtime.CompilerServices;
55

66
[assembly: Azure.Core.AzureResourceProviderNamespace("Communication")]
7+
[assembly: InternalsVisibleTo("Azure.Communication.Chat.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")]

sdk/communication/Azure.Communication.Chat/tests/ChatClients/ChatClientsTest.cs renamed to sdk/communication/Azure.Communication.Chat/tests/ChatClients/ChatClientsLiveTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ namespace Azure.Communication.Chat.Tests
2525
/// These tests have a dependency on live Azure services and may incur costs for the associated
2626
/// Azure subscription.
2727
/// </remarks>
28-
public class ChatClientsTest : ChatLiveTestBase
28+
public class ChatClientsLiveTest : ChatLiveTestBase
2929
{
3030
/// <summary>
3131
/// Initializes a new instance of the <see cref="CommunicationIdentityClient"/> class.
3232
/// </summary>
3333
/// <param name="isAsync">A flag used by the Azure Core Test Framework to differentiate between tests for asynchronous and synchronous methods.</param>
34-
public ChatClientsTest(bool isAsync) : base(isAsync)
34+
public ChatClientsLiveTest(bool isAsync) : base(isAsync)
3535
{
3636
}
3737

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
using System;
5+
using System.Threading.Tasks;
6+
using Azure.Communication.Identity;
7+
using Azure.Core.TestFramework;
8+
using NUnit.Framework;
9+
10+
namespace Azure.Communication.Chat.Tests.ChatClients
11+
{
12+
[TestFixture(true)]
13+
[TestFixture(false)]
14+
public class ChatClientsTests : ClientTestBase
15+
{
16+
private const string _allMessagesApiResponsePayload = "{\"value\":[{\"id\":\"1\",\"type\":\"Text\",\"priority\":\"High\",\"version\":\"1\",\"content\":\"Content for async message 1\",\"senderDisplayName\":\"Display Name for async message 1\",\"createdOn\":\"2020-11-05T01:44:24Z\",\"senderId\":\"8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-fd8a-68ab-1c4822000451\"},{\"id\":\"2\",\"type\":\"Text\",\"priority\":\"High\",\"version\":\"2\",\"content\":\"Content for async message 2\",\"senderDisplayName\":\"Display Name for async message 2\",\"createdOn\":\"2020-11-05T01:44:23Z\",\"senderId\":\"8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-fd8a-68ab-1c4822000451\"},{\"id\":\"3\",\"type\":\"Text\",\"priority\":\"High\",\"version\":\"3\",\"content\":\"Content for async message 3\",\"senderDisplayName\":\"Display Name for async message 3\",\"createdOn\":\"2020-11-05T01:44:23Z\",\"senderId\":\"8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-fd8a-68ab-1c4822000451\"},{\"id\":\"4\",\"type\":\"Text\",\"priority\":\"High\",\"version\":\"4\",\"content\":\"Content for async message 4\",\"senderDisplayName\":\"Display Name for async message 4\",\"createdOn\":\"2020-11-05T01:44:22Z\",\"senderId\":\"8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-fd8a-68ab-1c4822000451\"},{\"id\":\"5\",\"type\":\"Text\",\"priority\":\"Normal\",\"version\":\"5\",\"content\":\"Content for async message 5\",\"senderDisplayName\":\"Display Name for async message 5\",\"createdOn\":\"2020-11-05T01:44:21Z\",\"senderId\":\"8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-f7de-68ab-1c482200044f\"},{\"id\":\"6\",\"type\":\"ThreadActivity/TopicUpdate\",\"priority\":\"Normal\",\"version\":\"6\",\"content\":\"<topicupdate><eventtime>1604540653896</eventtime><initiator>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-f7de-68ab-1c482200044f</initiator><value>Updated topic - C# sdk</value></topicupdate>\",\"createdOn\":\"2020-11-05T01:44:13Z\",\"senderId\":\"19:77cb1b9855764965ac7cb194277de44d@thread.v2\"},{\"id\":\"7\",\"type\":\"ThreadActivity/TopicUpdate\",\"priority\":\"Normal\",\"version\":\"7\",\"content\":\"<topicupdate><eventtime>1604540653340</eventtime><initiator>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-f7de-68ab-1c482200044f</initiator><value>Thread async from C# sdk</value></topicupdate>\",\"createdOn\":\"2020-11-05T01:44:13Z\",\"senderId\":\"19:77cb1b9855764965ac7cb194277de44d@thread.v2\"},{\"id\":\"8\",\"type\":\"ThreadActivity/AddMember\",\"priority\":\"Normal\",\"version\":\"8\",\"content\":\"<addmember><eventtime>1604540653315</eventtime><initiator>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-f7de-68ab-1c482200044f</initiator><rosterVersion>1604540653270</rosterVersion><target>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-f7de-68ab-1c482200044f</target><detailedtargetinfo><id>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-f7de-68ab-1c482200044f</id></detailedtargetinfo><target>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-faef-68ab-1c4822000450</target><detailedtargetinfo><id>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-faef-68ab-1c4822000450</id></detailedtargetinfo><target>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-fd8a-68ab-1c4822000451</target><detailedtargetinfo><id>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-fd8a-68ab-1c4822000451</id></detailedtargetinfo></addmember>\",\"createdOn\":\"2020-11-05T01:44:13Z\",\"senderId\":\"19:77cb1b9855764965ac7cb194277de44d@thread.v2\"}]}";
17+
private const string _page1MessagesApiResponsePayload = "{\"value\":[{\"id\":\"1\",\"type\":\"Text\",\"priority\":\"High\",\"version\":\"1\",\"content\":\"Content for async message 1\",\"senderDisplayName\":\"Display Name for async message 1\",\"createdOn\":\"2020-11-05T01:44:24Z\",\"senderId\":\"8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-fd8a-68ab-1c4822000451\"},{\"id\":\"2\",\"type\":\"Text\",\"priority\":\"High\",\"version\":\"2\",\"content\":\"Content for async message 2\",\"senderDisplayName\":\"Display Name for async message 2\",\"createdOn\":\"2020-11-05T01:44:23Z\",\"senderId\":\"8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-fd8a-68ab-1c4822000451\"},{\"id\":\"3\",\"type\":\"Text\",\"priority\":\"High\",\"version\":\"3\",\"content\":\"Content for async message 3\",\"senderDisplayName\":\"Display Name for async message 3\",\"createdOn\":\"2020-11-05T01:44:23Z\",\"senderId\":\"8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-fd8a-68ab-1c4822000451\"},{\"id\":\"4\",\"type\":\"Text\",\"priority\":\"High\",\"version\":\"4\",\"content\":\"Content for async message 4\",\"senderDisplayName\":\"Display Name for async message 4\",\"createdOn\":\"2020-11-05T01:44:22Z\",\"senderId\":\"8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-fd8a-68ab-1c4822000451\"}],\"nextLink\":\"nextLink\"}";
18+
private const string _page2MessagesApiResponsePayload = "{\"value\":[{\"id\":\"5\",\"type\":\"Text\",\"priority\":\"Normal\",\"version\":\"5\",\"content\":\"Content for async message 5\",\"senderDisplayName\":\"Display Name for async message 5\",\"createdOn\":\"2020-11-05T01:44:21Z\",\"senderId\":\"8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-f7de-68ab-1c482200044f\"},{\"id\":\"6\",\"type\":\"ThreadActivity/TopicUpdate\",\"priority\":\"Normal\",\"version\":\"6\",\"content\":\"<topicupdate><eventtime>1604540653896</eventtime><initiator>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-f7de-68ab-1c482200044f</initiator><value>Updated topic - C# sdk</value></topicupdate>\",\"createdOn\":\"2020-11-05T01:44:13Z\",\"senderId\":\"19:77cb1b9855764965ac7cb194277de44d@thread.v2\"},{\"id\":\"7\",\"type\":\"ThreadActivity/TopicUpdate\",\"priority\":\"Normal\",\"version\":\"7\",\"content\":\"<topicupdate><eventtime>1604540653340</eventtime><initiator>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-f7de-68ab-1c482200044f</initiator><value>Thread async from C# sdk</value></topicupdate>\",\"createdOn\":\"2020-11-05T01:44:13Z\",\"senderId\":\"19:77cb1b9855764965ac7cb194277de44d@thread.v2\"},{\"id\":\"8\",\"type\":\"ThreadActivity/AddMember\",\"priority\":\"Normal\",\"version\":\"8\",\"content\":\"<addmember><eventtime>1604540653315</eventtime><initiator>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-f7de-68ab-1c482200044f</initiator><rosterVersion>1604540653270</rosterVersion><target>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-f7de-68ab-1c482200044f</target><detailedtargetinfo><id>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-f7de-68ab-1c482200044f</id></detailedtargetinfo><target>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-faef-68ab-1c4822000450</target><detailedtargetinfo><id>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-faef-68ab-1c4822000450</id></detailedtargetinfo><target>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-fd8a-68ab-1c4822000451</target><detailedtargetinfo><id>8:acs:fa5c4fc3-a269-43e2-9eb6-0ca17b388993_00000006-35f4-fd8a-68ab-1c4822000451</id></detailedtargetinfo></addmember>\",\"createdOn\":\"2020-11-05T01:44:13Z\",\"senderId\":\"19:77cb1b9855764965ac7cb194277de44d@thread.v2\"}]}";
19+
public ChatClientsTests(bool isAsync) : base(isAsync)
20+
{
21+
}
22+
23+
[Test]
24+
public async Task OrderInGetMessagesIteratorIsNotAltered()
25+
{
26+
//arrange
27+
var threadId = "19:e5e7a3fa5f314a01b2d12c6c7b37f433@thread.v2";
28+
var uri = new Uri("https://localHostTest");
29+
var responseAllItems = new MockResponse(200);
30+
responseAllItems.SetContent(_allMessagesApiResponsePayload);
31+
32+
var chatClientOptions = new ChatClientOptions
33+
{
34+
Transport = new MockTransport(responseAllItems)
35+
};
36+
37+
//act
38+
var communicationUserCredential = new CommunicationUserCredential(ChatRecordedTestSanitizer.SanitizedChatAuthHeaderValue);
39+
var chatThreadClient = new ChatThreadClient(threadId, uri, communicationUserCredential, chatClientOptions);
40+
AsyncPageable<ChatMessage> allMessages = chatThreadClient.GetMessagesAsync();
41+
42+
//assert
43+
int idCounter = 0;
44+
int textMessagesCounter = 0;
45+
await foreach (ChatMessage message in allMessages)
46+
{
47+
idCounter++;
48+
Assert.AreEqual($"{idCounter}", message.Id);
49+
Assert.AreEqual($"{idCounter}", message.Version);
50+
if (message.Type == "Text")
51+
{
52+
textMessagesCounter++;
53+
Assert.AreEqual($"Content for async message {idCounter}", message.Content);
54+
}
55+
}
56+
Assert.AreEqual(8, idCounter);
57+
Assert.AreEqual(5, textMessagesCounter);
58+
}
59+
60+
[Test]
61+
public async Task OrderInGetMessagesIteratorIsNotAlteredByPaging()
62+
{
63+
//arrange
64+
var threadId = "19:e5e7a3fa5f314a01b2d12c6c7b37f433@thread.v2";
65+
var uri = new Uri("https://localHostTest");
66+
67+
var responseItemsPage1 = new MockResponse(200);
68+
responseItemsPage1.SetContent(_page1MessagesApiResponsePayload);
69+
70+
var responseItemsPage2 = new MockResponse(200);
71+
responseItemsPage2.SetContent(_page2MessagesApiResponsePayload);
72+
73+
var chatClientOptions = new ChatClientOptions
74+
{
75+
Transport = new MockTransport(responseItemsPage1, responseItemsPage2)
76+
};
77+
78+
//act
79+
var communicationUserCredential = new CommunicationUserCredential(ChatRecordedTestSanitizer.SanitizedChatAuthHeaderValue);
80+
var chatThreadClient = new ChatThreadClient(threadId, uri, communicationUserCredential, chatClientOptions);
81+
AsyncPageable<ChatMessage> allMessages = chatThreadClient.GetMessagesAsync();
82+
83+
//assert
84+
int pages = 0;
85+
int idCounter = 0;
86+
int textMessagesCounter = 0;
87+
88+
await foreach (Page<ChatMessage> page in allMessages.AsPages(pageSizeHint: 4))
89+
{
90+
pages++;
91+
foreach (ChatMessage message in page.Values)
92+
{
93+
idCounter++;
94+
Assert.AreEqual($"{idCounter}", message.Id);
95+
Assert.AreEqual($"{idCounter}", message.Version);
96+
if (message.Type == "Text")
97+
{
98+
textMessagesCounter++;
99+
Assert.AreEqual($"Content for async message {idCounter}", message.Content);
100+
}
101+
}
102+
}
103+
Assert.AreEqual(2, pages);
104+
Assert.AreEqual(8, idCounter);
105+
Assert.AreEqual(5, textMessagesCounter);
106+
}
107+
}
108+
}

0 commit comments

Comments
 (0)