示例#1
0
        public async Task GetSchemaAsNode()
        {
            // arrange
            var serializer = new IdSerializer();
            var schema     = new Schema(Guid.NewGuid(), "abc", "def");
            await SchemaRepository.AddSchemaAsync(schema);

            string id = serializer.Serialize("Schema", schema.Id);

            // act
            IExecutionResult result = await Executor.ExecuteAsync(
                QueryRequestBuilder.New()
                .SetQuery(
                    @"query($id: ID!) {
                            node(id: $id) {
                                id
                                ... on Schema {
                                    name
                                    description
                                }
                            }
                        }")
                .SetVariableValue("id", id)
                .Create());

            // assert
            result.MatchSnapshot(o =>
                                 o.Assert(fo =>
                                          Assert.Equal(id, fo.Field <string>("Data.node.id"))));
        }
示例#2
0
        public async Task UpdateSchema()
        {
            // arrange
            var serializer = new IdSerializer();
            var schema     = new Schema(Guid.NewGuid(), "abc", "def");
            await SchemaRepository.AddSchemaAsync(schema);

            string id = serializer.Serialize("Schema", schema.Id);

            // act
            IExecutionResult result = await Executor.ExecuteAsync(
                QueryRequestBuilder.New()
                .SetQuery(
                    @"mutation($id: ID!) {
                            updateSchema(input: {
                                id: $id
                                name: ""abc2""
                                description: ""def2""
                                clientMutationId: ""ghi"" }) {
                                schema {
                                    id
                                    name
                                    description
                                }
                                clientMutationId
                            }
                        }")
                .SetVariableValue("id", id)
                .Create());

            // assert
            result.MatchSnapshot(o =>
                                 o.Assert(fo =>
                                          Assert.NotNull(fo.Field <string>("Data.updateSchema.schema.id"))));
        }
示例#3
0
        public async Task GetSchemaVersionById()
        {
            // arrange
            var serializer = new IdSerializer();
            var schema     = new Schema(Guid.NewGuid(), "abc", "def");
            await SchemaRepository.AddSchemaAsync(schema);

            var schemaVersion = new SchemaVersion(
                Guid.NewGuid(), schema.Id, "abc", "def",
                Array.Empty <Tag>(), DateTime.UnixEpoch);
            await SchemaRepository.AddSchemaVersionAsync(schemaVersion);

            string id = serializer.Serialize("SchemaVersion", schemaVersion.Id);

            // act
            IExecutionResult result = await Executor.ExecuteAsync(
                QueryRequestBuilder.New()
                .SetQuery(
                    @"query($id: ID!) {
                            schemaVersionById(id: $id) {
                                id
                                sourceText
                            }
                        }")
                .SetVariableValue("id", id)
                .Create());

            // assert
            result.MatchSnapshot(o =>
                                 o.Assert(fo =>
                                          Assert.Equal(id, fo.Field <string>("Data.schemaVersionById.id"))));
        }
    public async Task InputArgumentMiddleware_Should_MergeFormatter_When_UsedWithId()
    {
        // Arrange
        IRequestExecutor executor =
            await new ServiceCollection()
            .AddGraphQL()
            .AddQueryType <QueryId>()
            .EnableMutationConventions()
            .BuildRequestExecutorAsync();

        // Act
        string id = new IdSerializer()
                    .Serialize("Item", Guid.Parse("5ea909ec-ae00-4d00-8f96-afe0e8bdcad2"));

        IExecutionResult res = await executor
                               .ExecuteAsync(@"
                query Foo($id: ID!){
                    createFoo(input: {
                        bar: $id
                    })
                }
            ",
                                             new Dictionary <string, object?>() { ["id"] = id });

        // Assert
        res.ToJson().MatchSnapshot();
        SnapshotFullName fullName     = Snapshot.FullName();
        SnapshotFullName snapshotName = new(fullName.Filename + "_schema", fullName.FolderPath);

        executor.Schema.Print().MatchSnapshot(snapshotName);
    }
示例#5
0
        public async Task QuerySchema()
        {
            // arrange
            var serializer = new IdSerializer();
            var schema     = new Schema(Guid.NewGuid(), "abc", "def");
            await SchemaRepository.AddSchemaAsync(schema);

            string id = serializer.Serialize("Schema", schema.Id);

            // act
            IExecutionResult result = await Executor.ExecuteAsync(
                QueryRequestBuilder.New()
                .SetQuery(
                    @"query($name: String!) {
                            schemas(where: { name: $name }) {
                                nodes {
                                    id
                                    name
                                    description
                                }
                            }
                        }")
                .SetVariableValue("name", schema.Name)
                .Create());

            // assert
            result.MatchSnapshot(o =>
                                 o.Assert(fo =>
                                          Assert.Equal(id, fo.Field <string>("Data.schemas.nodes[0].id"))));
        }
示例#6
0
        public async Task GetEnvironmentsById()
        {
            // arrange
            var serializer  = new IdSerializer();
            var environment = new Environment(Guid.NewGuid(), "abc", "def");
            await EnvironmentRepository.AddEnvironmentAsync(environment);

            string id = serializer.Serialize("Environment", environment.Id);

            // act
            IExecutionResult result = await Executor.ExecuteAsync(
                QueryRequestBuilder.New()
                .SetQuery(
                    @"query($ids: [ID!]!) {
                            environmentsById(ids: $ids) {
                                id
                                name
                                description
                            }
                        }")
                .SetVariableValue("ids", new[] { id })
                .Create());

            // assert
            result.MatchSnapshot(o =>
                                 o.Assert(fo =>
                                          Assert.Equal(id, fo.Field <string>("Data.environmentsById[0].id"))));
        }
示例#7
0
        public async Task GetSchemaById_Invalid_Id_Type()
        {
            // arrange
            var serializer = new IdSerializer();
            var schema     = new Schema(Guid.NewGuid(), "abc", "def");
            await SchemaRepository.AddSchemaAsync(schema);

            string id = serializer.Serialize("Foo", schema.Id);

            // act
            IExecutionResult result = await Executor.ExecuteAsync(
                QueryRequestBuilder.New()
                .SetQuery(
                    @"query($id: ID!) {
                            schemaById(id: $id) {
                                id
                                name
                                description
                            }
                        }")
                .SetVariableValue("id", id)
                .Create());

            // assert
            result.MatchSnapshot();
        }
示例#8
0
        protected override DriverResult Display(ContentWidgetsPart part, string displayType, dynamic shapeHelper)
        {
            var settings           = part.Settings.GetModel <ContentWidgetsTypePartSettings>();
            var excludedWidgetIds  = IdSerializer.DeserializeIds(part.ExcludedWidgetIdsDefinition);
            var displayedWidgetIds = from id in IdSerializer.DeserializeIds(settings.AttachedWidgetIdsDefinition)
                                     where !excludedWidgetIds.Contains(id)
                                     select id;

            var results = new List <DriverResult>();

            var widgets = _contentManager.GetMany <IContent>(displayedWidgetIds, VersionOptions.Published, new QueryHints().ExpandParts <WidgetPart>());

            foreach (var widget in widgets)
            {
                // This is needed so the lambda gets a frech copy.
                var currentWidget = widget;

                results.Add(
                    ContentShape("Parts_ContentWidgetsPart_Widget_" + currentWidget.ContentItem.Id,
                                 () => _contentManager.BuildDisplay(currentWidget))
                    );
            }

            return(Combined(results.ToArray()));
        }
示例#9
0
        public async Task GetSchemaVersionsById_Invalid_Id_Type()
        {
            // arrange
            var serializer = new IdSerializer();
            var schema     = new Schema(Guid.NewGuid(), "abc", "def");
            await SchemaRepository.AddSchemaAsync(schema);

            var schemaVersion = new SchemaVersion(
                Guid.NewGuid(), schema.Id, "abc", "def",
                Array.Empty <Tag>(), DateTime.UnixEpoch);
            await SchemaRepository.AddSchemaVersionAsync(schemaVersion);

            string id = serializer.Serialize("Foo", schemaVersion.Id);

            // act
            IExecutionResult result = await Executor.ExecuteAsync(
                QueryRequestBuilder.New()
                .SetQuery(
                    @"query($ids: [ID!]!) {
                            schemaVersionsById(ids: $ids) {
                                id
                                sourceText
                            }
                        }")
                .SetVariableValue("ids", new[] { id })
                .Create());

            // assert
            result.MatchSnapshot();
        }
示例#10
0
        public async Task GetSchemasByNames_Empty_Names()
        {
            // arrange
            var serializer = new IdSerializer();
            var schema     = new Schema(Guid.NewGuid(), "abc", "def");
            await SchemaRepository.AddSchemaAsync(schema);

            string id = serializer.Serialize("Schema", schema.Id);

            // act
            IExecutionResult result = await Executor.ExecuteAsync(
                QueryRequestBuilder.New()
                .SetQuery(
                    @"query($names: [String!]!) {
                            schemasByName(names: $names) {
                                id
                                name
                                description
                            }
                        }")
                .SetVariableValue("names", new string[0])
                .Create());

            // assert
            result.MatchSnapshot();
        }
示例#11
0
        public async Task PublishSchema()
        {
            // arrange
            var serializer = new IdSerializer();

            var schema = new Schema("abc", "def");
            await SchemaRepository.AddSchemaAsync(schema);

            var environment = new Environment("abc", "def");
            await EnvironmentRepository.AddEnvironmentAsync(environment);

            // act
            IExecutionResult result = await Executor.ExecuteAsync(
                QueryRequestBuilder.New()
                .SetQuery(
                    @"mutation(
                            $schemaName: String!
                            $environmentName: String!
                            $sourceText: String!
                            $version: String!) {
                            publishSchema(input: {
                                schemaName: $schemaName
                                environmentName: $environmentName
                                sourceText: $sourceText
                                tags: [ { key: ""version"" value: $version } ]
                                clientMutationId: ""ghi"" }) {
                                sessionId
                                clientMutationId
                            }
                        }")
                .SetVariableValue("schemaName", "abc")
                .SetVariableValue("environmentName", "abc")
                .SetVariableValue("sourceText", "type Query { a: String }")
                .SetVariableValue("version", "1.0.0")
                .Create());

            // assert
            result.MatchSnapshot(o =>
                                 o.Assert(fo =>
                                          Assert.NotNull(fo.Field <string>("Data.publishSchema.sessionId"))));
            Assert.Collection(ReceivedMessages,
                              t =>
            {
                PublishDocumentMessage message = Assert.IsType <PublishDocumentMessage>(t);
                Assert.Equal(schema.Id, message.SchemaId);
                Assert.Equal(environment.Id, message.EnvironmentId);
                Assert.Equal(DocumentType.Schema, message.Type);
                Assert.Null(message.ClientId);
                Assert.NotNull(message.SessionId);
                Assert.Collection(message.Tags,
                                  t =>
                {
                    Assert.Equal("version", t.Key);
                    Assert.Equal("1.0.0", t.Value);
                });
            });
        }
示例#12
0
        // POST
        protected override DriverResult Editor(ContentWidgetsPart part, IUpdateModel updater, dynamic shapeHelper)
        {
            var viewModel = new ContentWidgetsViewModel();

            updater.TryUpdateModel(viewModel, Prefix, null, null);

            var excludedWidgetIds = viewModel.Widgets.Where(widget => !widget.IsAttached).Select(widget => widget.Id);

            part.ExcludedWidgetIdsDefinition = IdSerializer.SerializeIds(excludedWidgetIds);

            return(Editor(part, shapeHelper));
        }
        public async Task OnPublishSchema()
        {
            // arrange
            var serializer = new IdSerializer();

            var schema = new Schema("abc", "def");
            await SchemaRepository.AddSchemaAsync(schema);

            var environment = new Environment("abc", "def");
            await EnvironmentRepository.AddEnvironmentAsync(environment);

            string sessionId = await SessionCreator.CreateSessionAsync();

            await PublishSchemaEventSender.SendAsync(
                new PublishDocumentEvent(
                    sessionId,
                    new Issue("foo", "file.graphql", new Location(0, 0, 1, 1),
                              IssueType.Information)));

            await PublishSchemaEventSender.SendAsync(
                PublishDocumentEvent.Completed(sessionId));

            // act
            var responseStream = (IResponseStream)await Executor.ExecuteAsync(
                QueryRequestBuilder.New()
                .SetQuery(
                    @"subscription(
                            $sessionId: String!) {
                            onPublishSchema(sessionId: $sessionId) {
                                sessionId
                                isCompleted
                            }
                        }")
                .SetVariableValue("sessionId", sessionId)
                .Create());

            // assert
            var results = new List <IReadOnlyQueryResult>();

            await foreach (IReadOnlyQueryResult result in responseStream)
            {
                results.Add(result);
            }

            results.MatchSnapshot(matchOptions =>
                                  matchOptions.Assert(fieldOption =>
                                                      Assert.Collection(
                                                          fieldOption.Fields <string>("[*].Data.onPublishSchema.sessionId"),
                                                          t => Assert.Equal(sessionId, t),
                                                          t => Assert.Equal(sessionId, t))));
        }
示例#14
0
        public async Task PublishSchema()
        {
            // arrange
            var serializer = new IdSerializer();

            var schema = new Schema("abc", "def");
            await SchemaRepository.AddSchemaAsync(schema);

            var environment = new Environment("abc", "def");
            await EnvironmentRepository.AddEnvironmentAsync(environment);

            // act
            IExecutionResult result = await Executor.ExecuteAsync(
                QueryRequestBuilder.New()
                .SetQuery(
                    @"mutation(
                            $schemaName: String!
                            $environmentName: String!
                            $sourceText: String!
                            $version: String!) {
                            publishSchema(input: {
                                schemaName: $schemaName
                                environmentName: $environmentName
                                sourceText: $sourceText
                                tags: [ { key: ""version"" value: $version } ]
                                clientMutationId: ""ghi"" }) {
                                report {
                                    environment {
                                        name
                                    }
                                    schemaVersion {
                                        hash
                                    }
                                }
                                clientMutationId
                            }
                        }")
                .SetVariableValue("schemaName", "abc")
                .SetVariableValue("environmentName", "abc")
                .SetVariableValue("sourceText", "type Query { a: String }")
                .SetVariableValue("version", "1.0.0")
                .Create());

            // assert
            result.MatchSnapshot();
        }
示例#15
0
        public async Task GetSchemaVersionAsNode()
        {
            // arrange
            var serializer = new IdSerializer();
            var schema     = new Schema(Guid.NewGuid(), "abc", "def");
            await SchemaRepository.AddSchemaAsync(schema);

            var schemaVersion = new SchemaVersion(
                Guid.NewGuid(), schema.Id, "abc", DocumentHash.FromSourceText("def"),
                Array.Empty <Tag>(), DateTime.UnixEpoch);
            await SchemaRepository.AddSchemaVersionAsync(schemaVersion);

            string id = serializer.Serialize("SchemaVersion", schemaVersion.Id);

            IFileContainer container = await Storage.CreateContainerAsync(
                schemaVersion.Id.ToString("N", CultureInfo.InvariantCulture));

            byte[] buffer = Encoding.UTF8.GetBytes("SourceTextAbc");
            await container.CreateFileAsync("schema.graphql", buffer, 0, buffer.Length);

            // act
            IExecutionResult result = await Executor.ExecuteAsync(
                QueryRequestBuilder.New()
                .SetQuery(
                    @"query($id: ID!) {
                            node(id: $id) {
                                id
                                ... on SchemaVersion {
                                    sourceText
                                    hash {
                                        hash
                                    }
                                }
                            }
                        }")
                .SetVariableValue("id", id)
                .Create());

            // assert
            result.MatchSnapshot(o =>
                                 o.Assert(fo =>
                                          Assert.Equal(id, fo.Field <string>("Data.node.id"))));
        }
示例#16
0
        public async Task OnPublishSchema()
        {
            // arrange
            var serializer = new IdSerializer();

            var schema = new Schema("abc", "def");
            await SchemaRepository.AddSchemaAsync(schema);

            var environment = new Environment("abc", "def");
            await EnvironmentRepository.AddEnvironmentAsync(environment);

            string sessionId = "abc";

            await PublishSchemaEventSender.SendAsync(
                new PublishSchemaEvent(sessionId, new Issue("foo", IssueType.Information)));

            await PublishSchemaEventSender.SendAsync(
                PublishSchemaEvent.Completed(sessionId));

            // act
            var responseStream = (IResponseStream)await Executor.ExecuteAsync(
                QueryRequestBuilder.New()
                .SetQuery(
                    @"subscription(
                            $sessionId: String!) {
                            onPublishSchema(sessionId: $sessionId) {
                                sessionId
                                isCompleted
                            }
                        }")
                .SetVariableValue("sessionId", sessionId)
                .Create());

            // assert
            var results = new List <IReadOnlyQueryResult>();

            await foreach (IReadOnlyQueryResult result in responseStream)
            {
                results.Add(result);
            }
            results.MatchSnapshot();
        }
示例#17
0
        public async Task CreateClient()
        {
            // arrange
            var serializer = new IdSerializer();
            var schema     = new Schema(Guid.NewGuid(), "abc", "def");
            await SchemaRepository.AddSchemaAsync(schema);

            string schemaId = serializer.Serialize("Schema", schema.Id);

            // act
            IExecutionResult result = await Executor.ExecuteAsync(
                QueryRequestBuilder.New()
                .SetQuery(
                    @"mutation($schemaId: ID! $name: String! $description: String) {
                            createClient(input: {
                                schemaId: $schemaId
                                name: $name
                                description: $description
                            })
                            {
                                schema {
                                    name
                                    description
                                }
                                client {
                                    name
                                    description
                                }
                            }
                        }")
                .SetVariableValue("schemaId", schemaId)
                .SetVariableValue("name", "client_abc")
                .SetVariableValue("description", "client_def")
                .Create());

            // assert
            result.MatchSnapshot();
        }
        public override IEnumerable <TemplateViewModel> TypePartEditor(ContentTypePartDefinition definition)
        {
            if (definition.PartDefinition.Name != "ContentWidgetsPart")
            {
                yield break;
            }

            var settings = definition.Settings.GetModel <ContentWidgetsTypePartSettings>();

            var attachedWidgetIds = IdSerializer.DeserializeIds(settings.AttachedWidgetIdsDefinition);

            var viewModel = new ContentWidgetsViewModel();

            viewModel.Widgets = (from widget in _widgetService.GetWidgets()
                                 select new ContentWidget
            {
                Id = widget.Id,
                Title = widget.Title,
                IsAttached = attachedWidgetIds.Contains(widget.Id)
            }).ToList();

            yield return(DefinitionTemplate(viewModel, "ContentWidgetsTypePartSettings", Prefix));
        }
示例#19
0
        // GET
        protected override DriverResult Editor(ContentWidgetsPart part, dynamic shapeHelper)
        {
            return(ContentShape("Parts_ContentWidgetsPart_Edit",
                                () =>
            {
                var excludedWidgetIds = IdSerializer.DeserializeIds(part.ExcludedWidgetIdsDefinition);
                var viewModel = new ContentWidgetsViewModel();
                viewModel.Widgets = (from widget in _contentManager.GetMany <WidgetPart>(
                                         IdSerializer.DeserializeIds(part.Settings.GetModel <ContentWidgetsTypePartSettings>().AttachedWidgetIdsDefinition),
                                         VersionOptions.Published,
                                         new QueryHints().ExpandRecords <WidgetPartRecord>())
                                     select new ContentWidget
                {
                    Id = widget.ContentItem.Id,
                    Title = widget.Title,
                    IsAttached = !excludedWidgetIds.Contains(widget.Id)
                }).ToList();

                return shapeHelper.EditorTemplate(
                    TemplateName: "Parts.ContentWidgets",
                    Model: viewModel,
                    Prefix: Prefix);
            }));
        }
示例#20
0
        public async Task GetSchemaVersionsById_Invalid_Id_Type()
        {
            // arrange
            var serializer = new IdSerializer();
            var schema     = new Schema(Guid.NewGuid(), "abc", "def");
            await SchemaRepository.AddSchemaAsync(schema);

            var schemaVersion = new SchemaVersion(
                Guid.NewGuid(), schema.Id, "abc", DocumentHash.FromSourceText("def"),
                Array.Empty <Tag>(), DateTime.UnixEpoch);
            await SchemaRepository.AddSchemaVersionAsync(schemaVersion);

            string id = serializer.Serialize("Foo", schemaVersion.Id);

            IFileContainer container = await Storage.CreateContainerAsync(
                schemaVersion.Id.ToString("N", CultureInfo.InvariantCulture));

            byte[] buffer = Encoding.UTF8.GetBytes("SourceTextAbc");
            await container.CreateFileAsync("schema.graphql", buffer, 0, buffer.Length);

            // act
            IExecutionResult result = await Executor.ExecuteAsync(
                QueryRequestBuilder.New()
                .SetQuery(
                    @"query($ids: [ID!]!) {
                            schemaVersionsById(ids: $ids) {
                                id
                                sourceText
                            }
                        }")
                .SetVariableValue("ids", new[] { id })
                .Create());

            // assert
            result.MatchSnapshot();
        }
        public override IEnumerable <TemplateViewModel> TypePartEditorUpdate(ContentTypePartDefinitionBuilder builder, IUpdateModel updateModel)
        {
            if (builder.Name != "ContentWidgetsPart")
            {
                yield break;
            }

            var viewModel = new ContentWidgetsViewModel();

            updateModel.TryUpdateModel(viewModel, Prefix, null, null);

            var attachedWidgetIds = viewModel.Widgets.Where(widget => widget.IsAttached).Select(widget => widget.Id);

            builder.WithSetting("ContentWidgetsTypePartSettings.AttachedWidgetIdsDefinition", IdSerializer.SerializeIds(attachedWidgetIds));

            yield return(DefinitionTemplate(viewModel, "ContentWidgetsTypePartSettings", Prefix));
        }