public void IsParameterNamesOk() { var parameterWithValue = QueryStringParser.GetAllParameterWithValue(QUERY).ToList(); Assert.Contains("referenceNumber", parameterWithValue.Select(e => e.Key)); Assert.Contains("integrationName", parameterWithValue.Select(e => e.Key)); Assert.DoesNotContain("IntegrationName", parameterWithValue.Select(e => e.Key)); }
public void IsParameterValuesOk() { var parameterWithValue = QueryStringParser.GetAllParameterWithValue(QUERY).ToList(); var referenceNumber = parameterWithValue.FirstOrDefault(e => e.Key.Equals("referenceNumber")); var integrationName = parameterWithValue.FirstOrDefault(e => e.Key.Equals("integrationName")); var nonExistKey = parameterWithValue.FirstOrDefault(e => e.Key.Equals("nonExistKey")); Assert.Equal("+90", referenceNumber?.Value); Assert.Equal("Shopify_303", integrationName?.Value); Assert.Null(nonExistKey?.Value); }
public void IsParameterCountOk() { var parameterCount = QueryStringParser.GetAllParameterWithValue(QUERY).Count(); Assert.Equal(2, parameterCount); }
/// <summary> /// Parses a Querystring into DynamicQueryOptions instance. /// </summary> /// <param name="query">QueryString to parse.</param> /// <param name="opShortCodes">Custom operation shortcodes.</param> /// <returns>Parsed DynamicQueryOptions instance.</returns> public static DynamicQueryOptions ParseQueryOptions(string query, CustomOpCodes opShortCodes = null) { try { var dynamicQueryOptions = new DynamicQueryOptions(); if (string.IsNullOrEmpty(query)) { return(dynamicQueryOptions); } ////+ character issue ////https://docs.microsoft.com/en-us/dotnet/api/system.web.httputility.urlencode?redirectedfrom=MSDN&view=net-5.0#System_Web_HttpUtility_UrlEncode_System_String_ if (QueryStringParser.IsQueryStringEncoded(query)) { query = HttpUtility.UrlDecode(query); } DynamicQueryOptions innerQueryOptions = null; const string innerMemberKey = "v=("; int indexOfInnerMemberKey = query.IndexOf(innerMemberKey, StringComparison.Ordinal); if (indexOfInnerMemberKey != -1) { indexOfInnerMemberKey += innerMemberKey.Length; string innerQuery = query.Substring(indexOfInnerMemberKey, query.LastIndexOf(')') - indexOfInnerMemberKey); innerQueryOptions = ParseQueryOptions(innerQuery, opShortCodes); query = query.Replace(innerQuery, string.Empty); } string[] defaultArrayValue = new string[0]; NameValueCollection queryCollection = HttpUtility.ParseQueryString(query); IEnumerable <QueryStringParserResult> queryStringParserResults = QueryStringParser .GetAllParameterWithValue(query) .Where(e => !string.IsNullOrEmpty(e.Value) && e.Value.Contains(InternalConstants.PLUS_CHARACTER)).ToList(); if (queryStringParserResults.Any()) { QueryStringParser.ReplaceNameValueCollection(queryStringParserResults, queryCollection, InternalConstants.PARAMETER_VALUE_KEY); } string[] operations = queryCollection .GetValues(InternalConstants.OPERATION_PARAMETER_KEY) ?.Select(x => x.ClearSpaces()) .ToArray() ?? defaultArrayValue; string[] parameterNames = queryCollection .GetValues(InternalConstants.PARAMETER_NAME_KEY) ?.Select(x => x.ClearSpaces()) .ToArray() ?? defaultArrayValue; string[] parameterValues = queryCollection .GetValues(InternalConstants.PARAMETER_VALUE_KEY) ?.ToArray() ?? defaultArrayValue; string[] sortOptions = queryCollection .GetValues(InternalConstants.SORT_OPTIONS_PARAMETER_KEY) ?.Select(x => x.ClearSpaces()) .ToArray() ?? defaultArrayValue; string[] offsetOptions = queryCollection .GetValues(InternalConstants.OFFSET_PARAMETER_KEY) ?.Select(x => x.ClearSpaces()) .ToArray() ?? defaultArrayValue; string[] countOptions = queryCollection .GetValues(InternalConstants.COUNT_PARAMETER_KEY) ?.Select(x => x.ClearSpaces()) .ToArray() ?? defaultArrayValue; PopulateDynamicQueryOptions( dynamicQueryOptions, operations, parameterNames, parameterValues, sortOptions, offsetOptions, countOptions, opShortCodes: opShortCodes ?? Defaults.DefaultOpShortCodes, memberQueryOptions: innerQueryOptions); return(dynamicQueryOptions); } catch (Exception ex) { throw new DynamicQueryException("DynamicQueryBuilder has encountered an unhandled exception", query, ex); } }