public async Task <IResultList <IEnrichedContentEntity> > QueryAsync(Context context, string schemaIdOrName, Q q) { Guard.NotNull(context, nameof(context)); using (Profiler.TraceMethod <ContentQueryService>()) { if (q == null) { return(EmptyContents); } var schema = await GetSchemaOrThrowAsync(context, schemaIdOrName); if (!HasPermission(context, schema, Permissions.AppContentsRead)) { q = q with { CreatedBy = context.User.Token() }; } q = await queryParser.ParseAsync(context, q, schema); var contents = await contentRepository.QueryAsync(context.App, schema, q, context.Scope()); if (q.Ids != null && q.Ids.Count > 0) { contents = contents.SortSet(x => x.Id, q.Ids); } return(await TransformAsync(context, contents)); } }
public async Task <IResultList <IEnrichedContentEntity> > QueryAsync(Context context, string schemaIdOrName, Q q, CancellationToken ct = default) { Guard.NotNull(context); using (Telemetry.Activities.StartActivity("ContentQueryService/QueryAsync")) { if (q == null) { return(EmptyContents); } var schema = await GetSchemaOrThrowAsync(context, schemaIdOrName, ct); if (!HasPermission(context, schema, Permissions.AppContentsRead)) { q = q with { CreatedBy = context.User.Token() }; } q = await queryParser.ParseAsync(context, q, schema); var contents = await QueryCoreAsync(context, q, schema, ct); if (q.Ids != null && q.Ids.Count > 0) { contents = contents.SortSet(x => x.Id, q.Ids); } return(await TransformAsync(context, contents, ct)); } }
public ContentQueryServiceTests() { var schemaDef = new Schema(schemaId.Name) .SetScripts(new SchemaScripts { Query = "<query-script>" }); schema = Mocks.Schema(appId, schemaId, schemaDef); SetupEnricher(); A.CallTo(() => appProvider.GetSchemaAsync(appId.Id, schemaId.Name, A <bool> ._)) .Returns(schema); A.CallTo(() => appProvider.GetSchemasAsync(appId.Id)) .Returns(new List <ISchemaEntity> { schema }); A.CallTo(() => queryParser.ParseAsync(A <Context> ._, A <Q> ._, A <ISchemaEntity?> ._)) .ReturnsLazily(c => Task.FromResult(c.GetArgument <Q>(1) !)); sut = new ContentQueryService( appProvider, contentEnricher, contentRepository, contentVersionLoader, queryParser); }
public async Task Should_skip_total_if_set_in_context() { var q = await sut.ParseAsync(requestContext.Clone(b => b.WithoutTotal()), Q.Empty); Assert.True(q.NoTotal); }
public async Task Should_throw_if_odata_query_is_invalid() { var query = Q.Empty.WithODataQuery("$filter=invalid"); await Assert.ThrowsAsync <ValidationException>(() => sut.ParseAsync(requestContext, query, schema).AsTask()); }