Skip to content

Commit 8acd311

Browse files
Merge pull request #125 from contentstack/fix/DX-3748-improve-error-msg
improve error msg
2 parents eb05dd2 + 01fcc87 commit 8acd311

File tree

63 files changed

+449
-252
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+449
-252
lines changed

Contentstack.Management.Core.Unit.Tests/Mokes/CustomJsonConverter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class CustomJsonConverter : JsonConverter
99
{
1010
public override bool CanConvert(Type objectType)
1111
{
12-
throw new NotImplementedException();
12+
return false; // Mock converter - not actually used for conversion
1313
}
1414

1515
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
@@ -28,7 +28,7 @@ public class CustomConverter : JsonConverter
2828
{
2929
public override bool CanConvert(Type objectType)
3030
{
31-
throw new NotImplementedException();
31+
return false; // Mock converter - not actually used for conversion
3232
}
3333

3434
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)

Contentstack.Management.Core.Unit.Tests/Mokes/MockRetryPolicy.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,19 @@ public MockRetryPolicy()
2323
RetryLimit = 5;
2424
}
2525

26-
protected override bool RetryForException(IExecutionContext executionContext, Exception exception)
26+
public override bool RetryForException(IExecutionContext executionContext, Exception exception)
2727
{
2828
LastException = exception;
2929
RetryCallCount++;
3030
return ShouldRetryValue;
3131
}
3232

33-
protected override bool CanRetry(IExecutionContext executionContext)
33+
public override bool CanRetry(IExecutionContext executionContext)
3434
{
3535
return CanRetryValue;
3636
}
3737

38-
protected override bool RetryLimitExceeded(IExecutionContext executionContext)
38+
public override bool RetryLimitExceeded(IExecutionContext executionContext)
3939
{
4040
return RetryLimitExceededValue;
4141
}

Contentstack.Management.Core.Unit.Tests/Runtime/Pipeline/RetryHandler/DefaultRetryPolicyTest.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,13 @@ public void RetryForException_HttpError_Exceeds_RetryLimit_Returns_False()
186186
};
187187
var policy = new DefaultRetryPolicy(config);
188188
var context = CreateExecutionContext();
189-
context.RequestContext.HttpRetryCount = 1;
190189
var exception = MockNetworkErrorGenerator.CreateContentstackErrorException(HttpStatusCode.InternalServerError);
191190

191+
context.RequestContext.HttpRetryCount = 0;
192+
var result0 = policy.RetryForException(context, exception);
193+
Assert.IsTrue(result0);
194+
195+
context.RequestContext.HttpRetryCount = 1;
192196
var result = policy.RetryForException(context, exception);
193197
Assert.IsFalse(result);
194198
}

Contentstack.Management.Core.Unit.Tests/Runtime/Pipeline/RetryHandler/RetryHandlerIntegrationTest.cs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22
using System.Net;
33
using System.Net.Sockets;
44
using Contentstack.Management.Core;
5+
using Contentstack.Management.Core.Exceptions;
6+
using Contentstack.Management.Core.Internal;
57
using Contentstack.Management.Core.Runtime.Contexts;
68
using Contentstack.Management.Core.Runtime.Pipeline.RetryHandler;
9+
using RetryHandlerClass = Contentstack.Management.Core.Runtime.Pipeline.RetryHandler.RetryHandler;
710
using Contentstack.Management.Core.Unit.Tests.Mokes;
811
using Microsoft.VisualStudio.TestTools.UnitTesting;
912
using System.Threading.Tasks;
@@ -36,7 +39,7 @@ public async Task EndToEnd_NetworkError_Retries_And_Succeeds()
3639
NetworkBackoffStrategy = BackoffStrategy.Exponential
3740
};
3841
var policy = new DefaultRetryPolicy(config);
39-
var handler = new RetryHandler(policy);
42+
var handler = new RetryHandlerClass(policy);
4043
var mockInnerHandler = new MockHttpHandlerWithRetries();
4144
mockInnerHandler.AddFailuresThenSuccess(2, MockNetworkErrorGenerator.CreateSocketException(SocketError.ConnectionReset));
4245
handler.InnerHandler = mockInnerHandler;
@@ -64,7 +67,7 @@ public async Task EndToEnd_HttpError_Retries_And_Succeeds()
6467
}
6568
};
6669
var policy = new DefaultRetryPolicy(config);
67-
var handler = new RetryHandler(policy);
70+
var handler = new RetryHandlerClass(policy);
6871
var mockInnerHandler = new MockHttpHandlerWithRetries();
6972
mockInnerHandler.AddHttpErrorsThenSuccess(2, HttpStatusCode.InternalServerError);
7073
handler.InnerHandler = mockInnerHandler;
@@ -93,7 +96,7 @@ public async Task EndToEnd_Mixed_Network_And_Http_Errors()
9396
RetryDelay = TimeSpan.FromMilliseconds(10)
9497
};
9598
var policy = new DefaultRetryPolicy(config);
96-
var handler = new RetryHandler(policy);
99+
var handler = new RetryHandlerClass(policy);
97100
var mockInnerHandler = new MockHttpHandlerWithRetries();
98101
mockInnerHandler.AddException(MockNetworkErrorGenerator.CreateSocketException(SocketError.ConnectionReset));
99102
mockInnerHandler.AddResponse(HttpStatusCode.InternalServerError);
@@ -120,7 +123,7 @@ public async Task EndToEnd_Respects_RetryConfiguration()
120123
RetryOnError = false
121124
};
122125
var policy = new DefaultRetryPolicy(config);
123-
var handler = new RetryHandler(policy);
126+
var handler = new RetryHandlerClass(policy);
124127
var mockInnerHandler = new MockHttpHandlerWithRetries();
125128
mockInnerHandler.AddException(MockNetworkErrorGenerator.CreateSocketException(SocketError.ConnectionReset));
126129
handler.InnerHandler = mockInnerHandler;
@@ -154,7 +157,7 @@ public async Task EndToEnd_ExponentialBackoff_Delays_Increase()
154157
NetworkBackoffStrategy = BackoffStrategy.Exponential
155158
};
156159
var policy = new DefaultRetryPolicy(config);
157-
var handler = new RetryHandler(policy);
160+
var handler = new RetryHandlerClass(policy);
158161
var mockInnerHandler = new MockHttpHandlerWithRetries();
159162
mockInnerHandler.AddFailuresThenSuccess(2, MockNetworkErrorGenerator.CreateSocketException(SocketError.ConnectionReset));
160163
handler.InnerHandler = mockInnerHandler;
@@ -179,7 +182,7 @@ public async Task EndToEnd_RetryLimit_Stops_Retries()
179182
RetryDelay = TimeSpan.FromMilliseconds(10)
180183
};
181184
var policy = new DefaultRetryPolicy(config);
182-
var handler = new RetryHandler(policy);
185+
var handler = new RetryHandlerClass(policy);
183186
var mockInnerHandler = new MockHttpHandlerWithRetries();
184187
mockInnerHandler.AddResponse(HttpStatusCode.TooManyRequests);
185188
mockInnerHandler.AddResponse(HttpStatusCode.TooManyRequests);
@@ -214,7 +217,7 @@ public async Task EndToEnd_With_CustomRetryCondition()
214217
RetryCondition = (statusCode) => statusCode == HttpStatusCode.NotFound
215218
};
216219
var policy = new DefaultRetryPolicy(config);
217-
var handler = new RetryHandler(policy);
220+
var handler = new RetryHandlerClass(policy);
218221
var mockInnerHandler = new MockHttpHandlerWithRetries();
219222
mockInnerHandler.AddHttpErrorsThenSuccess(2, HttpStatusCode.NotFound);
220223
handler.InnerHandler = mockInnerHandler;
@@ -242,7 +245,7 @@ public async Task EndToEnd_With_CustomBackoff()
242245
}
243246
};
244247
var policy = new DefaultRetryPolicy(config);
245-
var handler = new RetryHandler(policy);
248+
var handler = new RetryHandlerClass(policy);
246249
var mockInnerHandler = new MockHttpHandlerWithRetries();
247250
mockInnerHandler.AddHttpErrorsThenSuccess(2, HttpStatusCode.TooManyRequests);
248251
handler.InnerHandler = mockInnerHandler;

Contentstack.Management.Core.Unit.Tests/Runtime/Pipeline/RetryHandler/RetryHandlerTest.cs

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
using System.Net.Sockets;
44
using Contentstack.Management.Core;
55
using Contentstack.Management.Core.Exceptions;
6+
using Contentstack.Management.Core.Internal;
67
using Contentstack.Management.Core.Runtime.Contexts;
78
using Contentstack.Management.Core.Runtime.Pipeline.RetryHandler;
9+
using RetryHandlerClass = Contentstack.Management.Core.Runtime.Pipeline.RetryHandler.RetryHandler;
810
using Contentstack.Management.Core.Unit.Tests.Mokes;
911
using Microsoft.VisualStudio.TestTools.UnitTesting;
1012
using Moq;
@@ -35,7 +37,7 @@ public async Task InvokeAsync_Success_NoRetry()
3537
MaxNetworkRetries = 2
3638
};
3739
var policy = new DefaultRetryPolicy(config);
38-
var handler = new RetryHandler(policy);
40+
var handler = new RetryHandlerClass(policy);
3941
var mockInnerHandler = new MockHttpHandlerWithRetries();
4042
mockInnerHandler.AddSuccessResponse();
4143
handler.InnerHandler = mockInnerHandler;
@@ -61,7 +63,7 @@ public async Task InvokeAsync_NetworkError_Retries_UpTo_MaxNetworkRetries()
6163
NetworkRetryDelay = TimeSpan.FromMilliseconds(10)
6264
};
6365
var policy = new DefaultRetryPolicy(config);
64-
var handler = new RetryHandler(policy);
66+
var handler = new RetryHandlerClass(policy);
6567
var mockInnerHandler = new MockHttpHandlerWithRetries();
6668
mockInnerHandler.AddFailuresThenSuccess(2, MockNetworkErrorGenerator.CreateSocketException(SocketError.ConnectionReset));
6769
handler.InnerHandler = mockInnerHandler;
@@ -86,7 +88,7 @@ public async Task InvokeAsync_NetworkError_Exceeds_MaxNetworkRetries_Throws()
8688
NetworkRetryDelay = TimeSpan.FromMilliseconds(10)
8789
};
8890
var policy = new DefaultRetryPolicy(config);
89-
var handler = new RetryHandler(policy);
91+
var handler = new RetryHandlerClass(policy);
9092
var mockInnerHandler = new MockHttpHandlerWithRetries();
9193
mockInnerHandler.AddException(MockNetworkErrorGenerator.CreateSocketException(SocketError.ConnectionReset));
9294
mockInnerHandler.AddException(MockNetworkErrorGenerator.CreateSocketException(SocketError.ConnectionReset));
@@ -119,7 +121,7 @@ public async Task InvokeAsync_HttpError_429_Retries_UpTo_RetryLimit()
119121
RetryDelay = TimeSpan.FromMilliseconds(10)
120122
};
121123
var policy = new DefaultRetryPolicy(config);
122-
var handler = new RetryHandler(policy);
124+
var handler = new RetryHandlerClass(policy);
123125
var mockInnerHandler = new MockHttpHandlerWithRetries();
124126
mockInnerHandler.AddHttpErrorsThenSuccess(2, HttpStatusCode.TooManyRequests);
125127
handler.InnerHandler = mockInnerHandler;
@@ -143,7 +145,7 @@ public async Task InvokeAsync_HttpError_500_Retries_UpTo_RetryLimit()
143145
RetryDelay = TimeSpan.FromMilliseconds(10)
144146
};
145147
var policy = new DefaultRetryPolicy(config);
146-
var handler = new RetryHandler(policy);
148+
var handler = new RetryHandlerClass(policy);
147149
var mockInnerHandler = new MockHttpHandlerWithRetries();
148150
mockInnerHandler.AddHttpErrorsThenSuccess(2, HttpStatusCode.InternalServerError);
149151
handler.InnerHandler = mockInnerHandler;
@@ -166,7 +168,7 @@ public async Task InvokeAsync_HttpError_Exceeds_RetryLimit_Throws()
166168
RetryDelay = TimeSpan.FromMilliseconds(10)
167169
};
168170
var policy = new DefaultRetryPolicy(config);
169-
var handler = new RetryHandler(policy);
171+
var handler = new RetryHandlerClass(policy);
170172
var mockInnerHandler = new MockHttpHandlerWithRetries();
171173
mockInnerHandler.AddResponse(HttpStatusCode.TooManyRequests);
172174
mockInnerHandler.AddResponse(HttpStatusCode.TooManyRequests);
@@ -201,7 +203,7 @@ public async Task InvokeAsync_NetworkError_Tracks_NetworkRetryCount()
201203
NetworkRetryDelay = TimeSpan.FromMilliseconds(10)
202204
};
203205
var policy = new DefaultRetryPolicy(config);
204-
var handler = new RetryHandler(policy);
206+
var handler = new RetryHandlerClass(policy);
205207
var mockInnerHandler = new MockHttpHandlerWithRetries();
206208
mockInnerHandler.AddFailuresThenSuccess(1, MockNetworkErrorGenerator.CreateSocketException(SocketError.ConnectionReset));
207209
handler.InnerHandler = mockInnerHandler;
@@ -223,7 +225,7 @@ public async Task InvokeAsync_HttpError_Tracks_HttpRetryCount()
223225
RetryDelay = TimeSpan.FromMilliseconds(10)
224226
};
225227
var policy = new DefaultRetryPolicy(config);
226-
var handler = new RetryHandler(policy);
228+
var handler = new RetryHandlerClass(policy);
227229
var mockInnerHandler = new MockHttpHandlerWithRetries();
228230
mockInnerHandler.AddHttpErrorsThenSuccess(1, HttpStatusCode.TooManyRequests);
229231
handler.InnerHandler = mockInnerHandler;
@@ -249,7 +251,7 @@ public async Task InvokeAsync_NetworkError_Then_HttpError_Tracks_Both_Counts()
249251
RetryDelay = TimeSpan.FromMilliseconds(10)
250252
};
251253
var policy = new DefaultRetryPolicy(config);
252-
var handler = new RetryHandler(policy);
254+
var handler = new RetryHandlerClass(policy);
253255
var mockInnerHandler = new MockHttpHandlerWithRetries();
254256
mockInnerHandler.AddException(MockNetworkErrorGenerator.CreateSocketException(SocketError.ConnectionReset));
255257
mockInnerHandler.AddResponse(HttpStatusCode.TooManyRequests);
@@ -276,7 +278,7 @@ public async Task InvokeAsync_Applies_NetworkRetryDelay()
276278
NetworkBackoffStrategy = BackoffStrategy.Fixed
277279
};
278280
var policy = new DefaultRetryPolicy(config);
279-
var handler = new RetryHandler(policy);
281+
var handler = new RetryHandlerClass(policy);
280282
var mockInnerHandler = new MockHttpHandlerWithRetries();
281283
mockInnerHandler.AddFailuresThenSuccess(1, MockNetworkErrorGenerator.CreateSocketException(SocketError.ConnectionReset));
282284
handler.InnerHandler = mockInnerHandler;
@@ -304,7 +306,7 @@ public async Task InvokeAsync_Applies_HttpRetryDelay()
304306
}
305307
};
306308
var policy = new DefaultRetryPolicy(config);
307-
var handler = new RetryHandler(policy);
309+
var handler = new RetryHandlerClass(policy);
308310
var mockInnerHandler = new MockHttpHandlerWithRetries();
309311
mockInnerHandler.AddHttpErrorsThenSuccess(1, HttpStatusCode.TooManyRequests);
310312
handler.InnerHandler = mockInnerHandler;
@@ -324,7 +326,7 @@ public async Task InvokeAsync_RequestId_Is_Generated()
324326
{
325327
var config = new RetryConfiguration();
326328
var policy = new DefaultRetryPolicy(config);
327-
var handler = new RetryHandler(policy);
329+
var handler = new RetryHandlerClass(policy);
328330
var mockInnerHandler = new MockHttpHandlerWithRetries();
329331
mockInnerHandler.AddSuccessResponse();
330332
handler.InnerHandler = mockInnerHandler;
@@ -341,7 +343,7 @@ public void InvokeSync_Success_NoRetry()
341343
{
342344
var config = new RetryConfiguration();
343345
var policy = new DefaultRetryPolicy(config);
344-
var handler = new RetryHandler(policy);
346+
var handler = new RetryHandlerClass(policy);
345347
var mockInnerHandler = new MockHttpHandlerWithRetries();
346348
mockInnerHandler.AddSuccessResponse();
347349
handler.InnerHandler = mockInnerHandler;
@@ -364,7 +366,7 @@ public void InvokeSync_NetworkError_Retries()
364366
NetworkRetryDelay = TimeSpan.FromMilliseconds(10)
365367
};
366368
var policy = new DefaultRetryPolicy(config);
367-
var handler = new RetryHandler(policy);
369+
var handler = new RetryHandlerClass(policy);
368370
var mockInnerHandler = new MockHttpHandlerWithRetries();
369371
mockInnerHandler.AddFailuresThenSuccess(2, MockNetworkErrorGenerator.CreateSocketException(SocketError.ConnectionReset));
370372
handler.InnerHandler = mockInnerHandler;
@@ -386,7 +388,7 @@ public void InvokeSync_HttpError_Retries()
386388
RetryDelay = TimeSpan.FromMilliseconds(10)
387389
};
388390
var policy = new DefaultRetryPolicy(config);
389-
var handler = new RetryHandler(policy);
391+
var handler = new RetryHandlerClass(policy);
390392
var mockInnerHandler = new MockHttpHandlerWithRetries();
391393
mockInnerHandler.AddHttpErrorsThenSuccess(2, HttpStatusCode.TooManyRequests);
392394
handler.InnerHandler = mockInnerHandler;

Contentstack.Management.Core.Unit.Tests/Utils/CSConstantsTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ public void Test_CSConstants_InternalConstants()
3030
public void Test_CSConstants_InternalMessages()
3131
{
3232
Assert.AreEqual("You are already logged in.", CSConstants.YouAreLoggedIn);
33-
Assert.AreEqual("You are need to login.", CSConstants.YouAreNotLoggedIn);
34-
Assert.AreEqual("Uid should not be empty.", CSConstants.MissingUID);
35-
Assert.AreEqual("API Key should not be empty.", CSConstants.MissingAPIKey);
33+
Assert.AreEqual("You are not logged in. Log in and try again.", CSConstants.YouAreNotLoggedIn);
34+
Assert.AreEqual("UID is required. Provide a valid UID and try again.", CSConstants.MissingUID);
35+
Assert.AreEqual("API Key is required. Provide a valid API Key and try again.", CSConstants.MissingAPIKey);
3636
Assert.AreEqual("API Key should be empty.", CSConstants.APIKey);
3737
Assert.AreEqual("Please enter email id to remove from org.", CSConstants.RemoveUserEmailError);
3838
Assert.AreEqual("Please enter share uid to resend invitation.", CSConstants.OrgShareUIDMissing);

Contentstack.Management.Core.Unit.Tests/Utils/ContentstackUtilitiesTest.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,12 @@ public void Return_Query_Parameters_On_ParameterCollection()
9393
JObject q_obj = JObject.Parse("{ \"price_in_usd\": { \"$lt\": 600 } }");
9494
param.AddQuery(q_obj);
9595
var result = ContentstackUtilities.GetQueryParameter(param);
96-
Assert.AreEqual("include=type&limit=10&query=%7B%0D%0A%20%20%22price_in_usd%22%3A%20%7B%0D%0A%20%20%20%20%22%24lt%22%3A%20600%0D%0A%20%20%7D%0D%0A%7D", result);
96+
// Normalize line endings for cross-platform compatibility (JObject.ToString() uses platform-specific line endings)
97+
var expected = "include=type&limit=10&query=%7B%0D%0A%20%20%22price_in_usd%22%3A%20%7B%0D%0A%20%20%20%20%22%24lt%22%3A%20600%0D%0A%20%20%7D%0D%0A%7D";
98+
// Normalize both to use \n for comparison
99+
var normalizedExpected = expected.Replace("%0D%0A", "%0A");
100+
var normalizedActual = result.Replace("%0D%0A", "%0A");
101+
Assert.AreEqual(normalizedExpected, normalizedActual);
97102
}
98103

99104
[TestMethod]

0 commit comments

Comments
 (0)