public void TestAndQueryable() { // Arrange var translator = new ExpressionToFtsRequestTranslator(); Expression <Func <IQueryable <EmployeeEntity>, IQueryable <EmployeeEntity> > > expression = query => query.Where(e => e.Workstation == "EPRUIZHW006" && e.Manager.StartsWith("John")); /* * The expression above should be converted to the following FTSQueryRequest and then serialized inside FTSRequestGenerator: * "statements": [ * { "query":"Workstation:(EPRUIZHW006)"}, * { "query":"Manager:(John*)"} * // Operator between queries is AND, in other words result set will fit to both statements above * ], */ var expected = "https://my.com/searchFts?metaType=meta%3Apeople-suite%3Apeople-api%3Acom.epam.e3s.app.people.api.data.EmployeeEntity&query=%7B%22statements%22%3A%5B%7B%22query%22%3A%22Workstation%3A(EPRUIZHW006)%22%7D,%7B%22query%22%3A%22Manager%3A(John*)%22%7D%5D,%22filters%22%3Anull,%22sorting%22%3Anull,%22start%22%3A0,%22limit%22%3A10%7D"; var generator = new FtsRequestGenerator(@"https://my.com"); // Act string translated = translator.Translate(expression); var uri = generator.GenerateRequestUrl(typeof(EmployeeEntity), translated); // todo: create asserts for this test by yourself, because they will depend on your final implementation // Assert Assert.Equal(expected, uri.OriginalString); }
public IEnumerable <T> SearchFts <T>(string query, int start = 0, int limit = 0) where T : BaseE3SEntity { var requestGenerator = new FtsRequestGenerator(_baseAddress); Uri request = requestGenerator.GenerateRequestUrl <T>(query, start, limit); string resultString = _httpClient.GetStringAsync(request).Result; return(JsonConvert.DeserializeObject <FtsResponse <T> >(resultString).Items.Select(t => t.Data)); }
public IEnumerable SearchFts(Type type, string query, int start = 0, int limit = 0) { Type finalType = typeof(FtsResponse <>).MakeGenericType(type); if (finalType == null) { throw new ArgumentNullException(nameof(finalType)); } var items = finalType.GetProperty("items"); if (items == null) { throw new ArgumentNullException(nameof(items)); } var requestGenerator = new FtsRequestGenerator(_baseAddress); Uri request = requestGenerator.GenerateRequestUrl(type, query, start, limit); string resultString = _httpClient.GetStringAsync(request).Result; object result = JsonConvert.DeserializeObject(resultString, finalType); var list = Activator.CreateInstance(typeof(List <>).MakeGenericType(type)) as IList; foreach (object item in (IEnumerable)items.GetValue(result)) { var data = item.GetType().GetProperty("data"); if (data == null) { throw new ArgumentNullException(nameof(data)); } list.Add(data.GetValue(item)); } return(list); }