11namespace 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