Skip to content

Commit c4bb5cb

Browse files
feat(map-of-complextypes): add the support for map of complex type in query parameters (#23)
* feat(map-of-complextypes): add the support for a map of complex type closes #22
1 parent 020b24f commit c4bb5cb

File tree

2 files changed

+108
-20
lines changed

2 files changed

+108
-20
lines changed

APIMatic.Core.Test/Utilities/CoreHelperTest.cs

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,73 @@ public void AppendQueryParameter_NullParameter()
237237
Assert.AreEqual(expected, actual);
238238
}
239239

240+
[Test]
241+
public void AppendQueryParameter_NullListParameter()
242+
{
243+
StringBuilder queryBuilder = new StringBuilder();
244+
queryBuilder.Append(SERVER_URL);
245+
List<string> parametersKeys = new List<string>()
246+
{
247+
"list"
248+
};
249+
250+
List<string> obj = null;
251+
string expected = $"{SERVER_URL}";
252+
CoreHelper.AppendUrlWithQueryParameters(queryBuilder, GetParameters(parametersKeys, obj));
253+
string actual = queryBuilder.ToString();
254+
Assert.AreEqual(expected, actual);
255+
}
256+
257+
[Test]
258+
public void AppendQueryParameter_EmptyListParameter()
259+
{
260+
StringBuilder queryBuilder = new StringBuilder();
261+
queryBuilder.Append(SERVER_URL);
262+
List<string> parametersKeys = new List<string>()
263+
{
264+
"list"
265+
};
266+
267+
List<string> obj = new List<string>();
268+
string expected = $"{SERVER_URL}";
269+
CoreHelper.AppendUrlWithQueryParameters(queryBuilder, GetParameters(parametersKeys, obj));
270+
string actual = queryBuilder.ToString();
271+
Assert.AreEqual(expected, actual);
272+
}
273+
274+
[Test]
275+
public void AppendQueryParameter_NullDictionaryParameter()
276+
{
277+
StringBuilder queryBuilder = new StringBuilder();
278+
queryBuilder.Append(SERVER_URL);
279+
List<string> parametersKeys = new List<string>()
280+
{
281+
"dictionary"
282+
};
283+
284+
Dictionary<string, string> dictionary = null;
285+
string expected = $"{SERVER_URL}";
286+
CoreHelper.AppendUrlWithQueryParameters(queryBuilder, GetParameters(parametersKeys, dictionary));
287+
string actual = queryBuilder.ToString();
288+
Assert.AreEqual(expected, actual);
289+
}
290+
291+
[Test]
292+
public void AppendQueryParameter_EmptyDictionaryParameter()
293+
{
294+
StringBuilder queryBuilder = new StringBuilder();
295+
queryBuilder.Append(SERVER_URL);
296+
List<string> parametersKeys = new List<string>()
297+
{
298+
"dictionary"
299+
};
300+
301+
Dictionary<string, string> dictionary = new Dictionary<string, string>();
302+
string expected = $"{SERVER_URL}";
303+
CoreHelper.AppendUrlWithQueryParameters(queryBuilder, GetParameters(parametersKeys, dictionary));
304+
string actual = queryBuilder.ToString();
305+
Assert.AreEqual(expected, actual);
306+
}
240307

241308
[Test]
242309
public void AppendQueryParameter_UnIndexedCollectionParameter()
@@ -317,7 +384,7 @@ public void AppendQueryParameter_TabSeparatedCollectionParameter()
317384
"dateTime"
318385
};
319386

320-
string expected = $"{SERVER_URL}?dateTime=testtcollection";
387+
string expected = $"{SERVER_URL}?dateTime=test\tcollection";
321388
CoreHelper.AppendUrlWithQueryParameters(queryBuilder, GetParameters(parametersKeys, stringCollection), ArraySerialization.TSV);
322389
string actual = queryBuilder.ToString();
323390
Assert.AreEqual(expected, actual);

APIMatic.Core/Utilities/CoreHelper.cs

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ private static char GetSeparator(ArraySerialization arraySerialization)
413413
}
414414
if (arraySerialization == ArraySerialization.TSV)
415415
{
416-
return 't';
416+
return '\t';
417417
}
418418
return '&';
419419
}
@@ -567,31 +567,52 @@ private static void HandleCustomType(List<KeyValuePair<string, object>> processe
567567

568568
private static void HandlePrimitiveTypes(List<KeyValuePair<string, object>> processedParameters, KeyValuePair<string, object> kvp)
569569
{
570-
if (kvp.Value is IList)
570+
if (kvp.Value is IList list)
571571
{
572-
var list = kvp.Value as IList;
572+
HandleListParameter(processedParameters, kvp, list);
573+
return;
574+
}
575+
if (kvp.Value is IDictionary dictionary)
576+
{
577+
HandleDictionaryParameter(processedParameters, kvp, dictionary);
578+
return;
579+
}
580+
// Scalar type
581+
processedParameters.Add(kvp);
582+
}
573583

574-
if (list?.Count != 0)
575-
{
576-
var item = list[0];
584+
private static void HandleListParameter(List<KeyValuePair<string, object>> processedParameters, KeyValuePair<string, object> kvp, IList list)
585+
{
586+
if (list == null || list.Count == 0)
587+
{
588+
return;
589+
}
590+
HandleParameter(processedParameters, kvp, list[0]);
591+
}
577592

578-
if (item.GetType().Namespace.StartsWith("System"))
579-
{
580-
// List of scalar type
581-
processedParameters.Add(kvp);
582-
}
583-
else
584-
{
585-
// List of custom type
586-
HandleCustomType(processedParameters, kvp);
587-
}
588-
}
593+
private static void HandleDictionaryParameter(List<KeyValuePair<string, object>> processedParameters, KeyValuePair<string, object> kvp, IDictionary dictionary)
594+
{
595+
if (dictionary == null || dictionary.Count == 0)
596+
{
597+
return;
589598
}
590-
else
599+
var enumerator = dictionary.GetEnumerator();
600+
if (enumerator.MoveNext())
591601
{
592-
// Scalar type
602+
var item = ((DictionaryEntry)enumerator.Current).Value;
603+
HandleParameter(processedParameters, kvp, item);
604+
}
605+
}
606+
607+
private static void HandleParameter(List<KeyValuePair<string, object>> processedParameters, KeyValuePair<string, object> kvp, object entry)
608+
{
609+
if (entry.GetType().Namespace.StartsWith("System"))
610+
{
611+
// List of scalar type
593612
processedParameters.Add(kvp);
613+
return;
594614
}
615+
HandleCustomType(processedParameters, kvp);
595616
}
596617

597618
/// <summary>

0 commit comments

Comments
 (0)