Пример #1
0
        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));
            }
        }
Пример #2
0
        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));
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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());
        }