public void ShouldBeNullOrderByOperatorInstance() { ODataUriParser parser = GetParser("/Enterprises"); ISqlBinder binder = new SqlOrderByBinder(parser.ParseOrderBy()); binder.Query.Should().BeNull(); }
public void ShouldBeOrderByOperatorResolverInstance() { ODataUriParser parser = GetParser("/Enterprises?$orderby=EnterpriseName"); ISqlBinder binder = new SqlOrderByBinder(parser.ParseOrderBy()); binder.Query.Should().BeOfType <OrderByOperatorResolver>(); }
/// <summary> /// Esse Controller está implementando a lógica para converter parametros OData para parametros de StoredProcedure. /// Não dá pra usar [EnableQuery], senão os parametros da query serão aplicados na SP e posteriormente no retorno dela. /// </summary> /// <param name="queryOptions"></param> /// <returns></returns> // GET: odata/Enterprises public IQueryable <EnterprisesModel> GetEnterprises(ODataQueryOptions queryOptions) { //TODO: O código abaixo deve ser posteriormente movido para um Filter do Controller, // por ser genérico irá se repetir em cada GET do Controller. Uri fullUri = new Uri(ControllerContext.Request.RequestUri.PathAndQuery.Replace("odata/", ""), UriKind.Relative); ODataUriParser parser = new ODataUriParser(_model, fullUri); //Poderia ser via ODataQueryOptionParser, mas achei mais complicado FilterClause filterClause = parser.ParseFilter(); // parse $filter OrderByClause orderByClause = parser.ParseOrderBy(); // parse $orderby long? topClause = parser.ParseTop(); // parse $top long? skipClause = parser.ParseSkip(); // parse $skip bool count = parser.ParseCount() ?? false; // parse $count SqlFilterBinder filterBinder = new SqlFilterBinder(filterClause); //Binder para resolver o filtro; TODO: Melhorar para componente e UNIT TESTE SqlOrderByBinder orderByBinder = new SqlOrderByBinder(orderByClause); //Binder para resolver o ordenação; TODO: Melhorar para componente e UNIT TESTE SqlPagingBinder pagingBinder = new SqlPagingBinder(topClause, skipClause); //Binder para resolver o paginação; TODO: Melhorar para componente e UNIT TESTE //Agora é só aplicar os parametros encontrados na Stored Procedure return(db.ProcPgdEnterprisesRetrieveAllMonitoredFromUserPartner(7, filterBinder.Resolve(), orderByBinder.Resolve(), pagingBinder.Resolve(), count).AsQueryable()); }