Skip to content

Commit 9d6b964

Browse files
committed
Added improvements to NetworkRequestManager test coverage
1 parent dea8c3f commit 9d6b964

2 files changed

Lines changed: 198 additions & 7 deletions

File tree

src/MADE.Networking/Http/NetworkRequestManager.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,12 @@ public void Stop()
7070
/// </summary>
7171
public void ProcessCurrentQueue()
7272
{
73-
if (this.isProcessingRequests)
73+
if (this.CurrentQueue.Count == 0 || this.isProcessingRequests)
7474
{
7575
return;
7676
}
7777

78-
if (this.CurrentQueue.Count > 0)
79-
{
80-
return;
81-
}
78+
8279

8380
this.isProcessingRequests = true;
8481

Lines changed: 196 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,200 @@
11
namespace MADE.Networking.Tests.Tests
22
{
3-
internal class NetworkRequestManagerTests
3+
using System;
4+
using System.Diagnostics.CodeAnalysis;
5+
using System.Net.Http;
6+
using System.Threading;
7+
using MADE.Networking.Http;
8+
using MADE.Networking.Http.Requests.Json;
9+
using Newtonsoft.Json.Linq;
10+
using NUnit.Framework;
11+
using Shouldly;
12+
13+
[TestFixture]
14+
[ExcludeFromCodeCoverage]
15+
public class NetworkRequestManagerTests
416
{
17+
public class WhenAddingOrUpdatingQueueRequests
18+
{
19+
[Test]
20+
public void ShouldAddToQueue()
21+
{
22+
// Arrange
23+
const string query = "test";
24+
const bool queryValue = true;
25+
26+
var requestUrl = $"https://httpbin.org/get?{query}={queryValue}";
27+
var request = new JsonGetNetworkRequest(new HttpClient(), requestUrl);
28+
29+
var manager = new NetworkRequestManager();
30+
31+
// Act
32+
manager.AddOrUpdate<JsonGetNetworkRequest, RequestResponse>(
33+
request,
34+
_ => { });
35+
36+
// Assert
37+
manager.CurrentQueue.Count.ShouldBe(1);
38+
manager.CurrentQueue.Keys.ShouldContain(request.Identifier.ToString());
39+
}
40+
41+
[Test]
42+
public void ShouldUpdateExistingInQueue()
43+
{
44+
// Arrange
45+
const string query = "test";
46+
const bool queryValue = true;
47+
48+
var requestUrl = $"https://httpbin.org/get?{query}={queryValue}";
49+
var request = new JsonGetNetworkRequest(new HttpClient(), requestUrl);
50+
51+
var manager = new NetworkRequestManager();
52+
manager.AddOrUpdate<JsonGetNetworkRequest, RequestResponse>(
53+
request,
54+
_ => { });
55+
56+
// Act
57+
request.Url = $"https://httpbin.org/get?{query}={!queryValue}";
58+
manager.AddOrUpdate<JsonGetNetworkRequest, RequestResponse>(
59+
request,
60+
_ => { });
61+
62+
// Assert
63+
manager.CurrentQueue.Count.ShouldBe(1);
64+
manager.CurrentQueue.Keys.ShouldContain(request.Identifier.ToString());
65+
}
66+
}
67+
68+
public class WhenRemovingQueueRequests
69+
{
70+
[Test]
71+
public void ShouldRemoveByRequest()
72+
{
73+
// Arrange
74+
const string query = "test";
75+
const bool queryValue = true;
76+
77+
var requestUrl = $"https://httpbin.org/get?{query}={queryValue}";
78+
var request = new JsonGetNetworkRequest(new HttpClient(), requestUrl);
79+
80+
var manager = new NetworkRequestManager();
81+
82+
manager.AddOrUpdate<JsonGetNetworkRequest, RequestResponse>(
83+
request,
84+
_ => { });
85+
86+
// Act
87+
manager.Remove(request);
88+
89+
// Assert
90+
manager.CurrentQueue.Count.ShouldBe(0);
91+
}
92+
93+
[Test]
94+
public void ShouldRemoveByRequestId()
95+
{
96+
// Arrange
97+
const string query = "test";
98+
const bool queryValue = true;
99+
100+
var requestUrl = $"https://httpbin.org/get?{query}={queryValue}";
101+
var request = new JsonGetNetworkRequest(new HttpClient(), requestUrl);
102+
103+
var manager = new NetworkRequestManager();
104+
105+
manager.AddOrUpdate<JsonGetNetworkRequest, RequestResponse>(
106+
request,
107+
_ => { });
108+
109+
// Act
110+
manager.RemoveByKey(request.Identifier.ToString());
111+
112+
// Assert
113+
manager.CurrentQueue.Count.ShouldBe(0);
114+
}
115+
}
116+
117+
public class WhenProcessingQueueRequests
118+
{
119+
[Test]
120+
public void ShouldProcessQueue()
121+
{
122+
// Arrange
123+
AutoResetEvent autoResetEvent = new AutoResetEvent(false);
124+
125+
const string query = "test";
126+
const bool queryValue = true;
127+
128+
var requestUrl = $"https://httpbin.org/get?{query}={queryValue}";
129+
var request = new JsonGetNetworkRequest(new HttpClient(), requestUrl);
130+
131+
var manager = new NetworkRequestManager();
132+
133+
RequestResponse actualResponse = null;
134+
135+
manager.AddOrUpdate<JsonGetNetworkRequest, RequestResponse>(request, response =>
136+
{
137+
actualResponse = response;
138+
autoResetEvent.Set();
139+
});
140+
141+
// Act
142+
manager.Start();
143+
144+
// Assert
145+
autoResetEvent.WaitOne(TimeSpan.FromSeconds(60));
146+
147+
actualResponse.ShouldNotBeNull();
148+
actualResponse.Url.ShouldBe(requestUrl);
149+
actualResponse.Args.Value<bool>(query).ShouldBe(queryValue);
150+
}
151+
}
152+
153+
public class WhenProcessingQueueRequestsStopped
154+
{
155+
[Test]
156+
public void ShouldStopProcessingQueue()
157+
{
158+
// Arrange
159+
AutoResetEvent autoResetEvent = new AutoResetEvent(false);
160+
161+
const string query = "test";
162+
const bool queryValue = true;
163+
164+
var requestUrl = $"https://httpbin.org/get?{query}={queryValue}";
165+
var request = new JsonGetNetworkRequest(new HttpClient(), requestUrl);
166+
167+
var manager = new NetworkRequestManager();
168+
169+
manager.AddOrUpdate<JsonGetNetworkRequest, RequestResponse>(
170+
request,
171+
_ =>
172+
{
173+
autoResetEvent.Set();
174+
});
175+
176+
manager.Start();
177+
178+
autoResetEvent.WaitOne(TimeSpan.FromSeconds(60));
179+
180+
// Act
181+
manager.Stop();
182+
183+
manager.AddOrUpdate<JsonGetNetworkRequest, RequestResponse>(
184+
request,
185+
_ => { });
186+
187+
// Assert
188+
manager.CurrentQueue.Count.ShouldBe(1);
189+
manager.CurrentQueue.Keys.ShouldContain(request.Identifier.ToString());
190+
}
191+
}
192+
193+
public class RequestResponse
194+
{
195+
public JObject Args { get; set; }
196+
197+
public string Url { get; set; }
198+
}
5199
}
6-
}
200+
}

0 commit comments

Comments
 (0)