Пример #1
0
        public async Task Should_create_singleton_schema()
        {
            var schemaName = $"schema-{Guid.NewGuid()}";

            // STEP 1: Create schema
            var createRequest = new CreateSchemaDto
            {
                Name        = schemaName,
                IsSingleton = true,
                IsPublished = true
            };

            var schema = await _.Schemas.PostSchemaAsync(_.AppName, createRequest);

            // Should return created schemas with correct name.
            Assert.Equal(schemaName, schema.Name);


            // STEP 2: Get all schemas
            var schemas = await _.Schemas.GetSchemasAsync(_.AppName);

            // Should provide new schema when apps are schemas.
            Assert.Contains(schemas.Items, x => x.Name == schemaName);


            // STEP 3: Get singleton content
            var client = _.ClientManager.CreateDynamicContentsClient(schemaName);

            var content = await client.GetAsync(schema.Id);

            Assert.NotNull(content);
        }
Пример #2
0
        public static CreateSchema ToCommand(this CreateSchemaDto dto)
        {
            var command = new CreateSchema();

            SimpleMapper.Map(dto, command);

            if (dto.Properties != null)
            {
                SimpleMapper.Map(dto.Properties, command.Properties);
            }

            if (dto.Fields != null)
            {
                foreach (var fieldDto in dto.Fields)
                {
                    var fieldProperties = fieldDto?.Properties.ToProperties();
                    var fieldInstance   = SimpleMapper.Map(fieldDto, new CreateSchemaField {
                        Properties = fieldProperties
                    });

                    command.Fields.Add(fieldInstance);
                }
            }

            return(command);
        }
Пример #3
0
        public async Task <IActionResult> PostSchema(string app, [FromBody] CreateSchemaDto request)
        {
            var command = request.ToCommand();

            var response = await InvokeCommandAsync(command);

            return(CreatedAtAction(nameof(GetSchema), new { app, name = request.Name }, response));
        }
Пример #4
0
        public async Task <IActionResult> PostSchema(string app, [FromBody] CreateSchemaDto request)
        {
            var command = request.ToCommand();

            await CommandBus.PublishAsync(command);

            return(CreatedAtAction(nameof(GetSchema), new { name = request.Name }, new EntityCreatedDto {
                Id = command.Name
            }));
        }
Пример #5
0
        public async Task <IActionResult> PostSchema(string app, [FromBody] CreateSchemaDto request)
        {
            var command = request.ToCommand();
            var context = await CommandBus.PublishAsync(command);

            var result   = context.Result <EntityCreatedResult <Guid> >();
            var response = new EntityCreatedDto {
                Id = command.SchemaId.ToString(), Version = result.Version
            };

            return(CreatedAtAction(nameof(GetSchema), new { name = request.Name }, response));
        }
Пример #6
0
        public async Task Should_not_allow_creation_if_name_used()
        {
            var schemaName = $"schema-{Guid.NewGuid()}";

            // STEP 1: Create schema
            var createRequest = new CreateSchemaDto {
                Name = schemaName
            };

            var schema = await _.Schemas.PostSchemaAsync(_.AppName, createRequest);


            // STEP 2: Create again and fail
            var ex = await Assert.ThrowsAnyAsync <SquidexManagementException>(() => _.Schemas.PostSchemaAsync(_.AppName, createRequest));

            Assert.Equal(400, ex.StatusCode);
        }
Пример #7
0
        public async Task Should_update_singleton_content_with_special_id()
        {
            var schemaName = $"schema-{Guid.NewGuid()}";

            // STEP 1: Create singleton.
            var createRequest = new CreateSchemaDto
            {
                Name        = schemaName,
                IsPublished = true,
                IsSingleton = true,
                Fields      = new List <UpsertSchemaFieldDto>
                {
                    new UpsertSchemaFieldDto
                    {
                        Name       = "my-field",
                        Properties = new StringFieldPropertiesDto()
                    }
                }
            };

            await _.Schemas.PostSchemaAsync(_.AppName, createRequest);


            var client = _.ClientManager.CreateDynamicContentsClient(schemaName);

            // STEP 2: Get content.
            var content_1 = await client.GetAsync("_schemaId_");

            Assert.NotNull(content_1);


            // STEP 3: Update content.
            var content_2 = await client.UpdateAsync("_schemaId_", new DynamicData
            {
                ["my-field"] = new JObject
                {
                    ["iv"] = "singleton"
                }
            });

            Assert.Equal("singleton", content_2.Data["my-field"]["iv"]);
        }
Пример #8
0
        public async Task Should_create_app_with_anonymous_write_access()
        {
            var appName = Guid.NewGuid().ToString();

            // STEP 1: Create app
            var createRequest = new CreateAppDto {
                Name = appName
            };

            var app = await _.Apps.PostAppAsync(createRequest);

            // Should return create app with correct name.
            Assert.Equal(appName, app.Name);


            // STEP 2: Make the client anonymous.
            var clientRequest = new UpdateClientDto {
                AllowAnonymous = true
            };

            await _.Apps.PutClientAsync(appName, "default", clientRequest);


            // STEP 3: Create schema
            var schemaRequest = new CreateSchemaDto {
                Name = "my-content", IsPublished = true
            };

            await _.Schemas.PostSchemaAsync(appName, schemaRequest);


            // STEP 3: Create a content.
            var url = $"{_.ClientManager.Options.Url}api/content/{appName}/my-content";

            using (var httpClient = new HttpClient())
            {
                var response = await httpClient.PostAsync(url, new StringContent("{}", null, "text/json"));

                Assert.Equal(HttpStatusCode.Created, response.StatusCode);
            }
        }
Пример #9
0
        public async Task Should_create_schema()
        {
            var schemaName = $"schema-{Guid.NewGuid()}";

            // STEP 1: Create schema
            var createRequest = new CreateSchemaDto {
                Name = schemaName
            };

            var schema = await _.Schemas.PostSchemaAsync(_.AppName, createRequest);

            // Should return created schemas with correct name.
            Assert.Equal(schemaName, schema.Name);


            // STEP 2: Get all schemas
            var schemas = await _.Schemas.GetSchemasAsync(_.AppName);

            // Should provide new schema when apps are schemas.
            Assert.Contains(schemas.Items, x => x.Name == schemaName);
        }
Пример #10
0
        public async Task Should_recreate_after_deleted()
        {
            var schemaName = $"schema-{Guid.NewGuid()}";

            // STEP 1: Create schema
            var createRequest = new CreateSchemaDto {
                Name = schemaName
            };

            var schema = await _.Schemas.PostSchemaAsync(_.AppName, createRequest);

            // Should return created schemas with correct name.
            Assert.Equal(schemaName, schema.Name);


            // STEP 2: Delete schema.
            await _.Schemas.DeleteSchemaAsync(_.AppName, schemaName);


            // STEP 3: Create app again
            await _.Schemas.PostSchemaAsync(_.AppName, createRequest);
        }
Пример #11
0
        public async Task Should_create_schema_with_checkboxes()
        {
            var schemaName = $"schema-{Guid.NewGuid()}";

            // STEP 1: Create schema
            var createRequest = new CreateSchemaDto
            {
                Name   = schemaName,
                Fields = new List <UpsertSchemaFieldDto>
                {
                    new UpsertSchemaFieldDto
                    {
                        Name         = "references",
                        Partitioning = "invariant",
                        Properties   = new ReferencesFieldPropertiesDto
                        {
                            Editor = ReferencesFieldEditor.Checkboxes
                        }
                    },
                    new UpsertSchemaFieldDto
                    {
                        Name         = "tags",
                        Partitioning = "invariant",
                        Properties   = new TagsFieldPropertiesDto
                        {
                            Editor        = TagsFieldEditor.Checkboxes,
                            AllowedValues = new List <string> {
                                "value1"
                            }
                        }
                    }
                }
            };

            var schema = await _.Schemas.PostSchemaAsync(_.AppName, createRequest);

            // Should return created schemas with correct name.
            Assert.Equal(schemaName, schema.Name);
        }
Пример #12
0
        public async Task Should_delete_Schema()
        {
            var schemaName = $"schema-{Guid.NewGuid()}";

            // STEP 1: Create schema
            var createRequest = new CreateSchemaDto {
                Name = schemaName
            };

            var schema = await _.Schemas.PostSchemaAsync(_.AppName, createRequest);

            // Should return created schemas with correct name.
            Assert.Equal(schemaName, schema.Name);


            // STEP 2: Delete schema
            await _.Schemas.DeleteSchemaAsync(_.AppName, schemaName);

            var schemas = await _.Schemas.GetSchemasAsync(_.AppName);

            // Should not provide deleted schema when schema are queried.
            Assert.DoesNotContain(schemas.Items, x => x.Name == schemaName);
        }
        public async Task ImportAsync(DirectoryInfo directoryInfo, JsonHelper jsonHelper, SyncOptions options, ISession session)
        {
            var newSchemaNames =
                GetSchemaFiles(directoryInfo)
                .Select(x => jsonHelper.Read <SchemaModelNameOnly>(x, log))
                .ToList();

            if (!newSchemaNames.HasDistinctNames(x => x.Name))
            {
                log.WriteLine("ERROR: Can only sync schemas when all target schemas have distinct names.");
                return;
            }

            var current = await session.Schemas.GetSchemasAsync(session.App);

            var schemasByName = current.Items.ToDictionary(x => x.Name);

            if (!options.NoDeletion)
            {
                foreach (var name in current.Items.Select(x => x.Name))
                {
                    if (!newSchemaNames.Any(x => x.Name == name))
                    {
                        await log.DoSafeAsync($"Schema {name} deleting", async() =>
                        {
                            await session.Schemas.DeleteSchemaAsync(session.App, name);
                        });
                    }
                }
            }

            foreach (var newSchema in newSchemaNames)
            {
                if (schemasByName.ContainsKey(newSchema.Name))
                {
                    continue;
                }

                await log.DoSafeAsync($"Schema {newSchema.Name} creating", async() =>
                {
                    var request = new CreateSchemaDto
                    {
                        Name = newSchema.Name
                    };

                    var created = await session.Schemas.PostSchemaAsync(session.App, request);

                    schemasByName[newSchema.Name] = created;
                });
            }

            jsonHelper.SetSchemaMap(schemasByName.ToDictionary(x => x.Key, x => x.Value.Id));

            var newSchemas =
                GetSchemaFiles(directoryInfo)
                .Select(x => jsonHelper.Read <SchemeModel>(x, log))
                .ToList();

            foreach (var newSchema in newSchemas)
            {
                var version = schemasByName[newSchema.Name].Version;

                await log.DoVersionedAsync($"Schema {newSchema.Name} updating", version, async() =>
                {
                    var result = await session.Schemas.PutSchemaSyncAsync(session.App, newSchema.Name, newSchema.Schema);

                    return(result.Version);
                });
            }
        }
Пример #14
0
        private async Task CreateSchemasAsync()
        {
            // STEP 1: Create cities schema.
            var createCitiesRequest = new CreateSchemaDto
            {
                Name   = "cities",
                Fields = new List <UpsertSchemaFieldDto>
                {
                    new UpsertSchemaFieldDto
                    {
                        Name       = "name",
                        Properties = new StringFieldPropertiesDto()
                    }
                },
                IsPublished = true
            };

            var cities = await _.Schemas.PostSchemaAsync(_.AppName, createCitiesRequest);


            // STEP 2: Create states schema.
            var createStatesRequest = new CreateSchemaDto
            {
                Name   = "states",
                Fields = new List <UpsertSchemaFieldDto>
                {
                    new UpsertSchemaFieldDto
                    {
                        Name       = "name",
                        Properties = new StringFieldPropertiesDto()
                    },
                    new UpsertSchemaFieldDto
                    {
                        Name       = "cities",
                        Properties = new ReferencesFieldPropertiesDto
                        {
                            SchemaIds = new List <string> {
                                cities.Id
                            }
                        }
                    }
                },
                IsPublished = true
            };

            var states = await _.Schemas.PostSchemaAsync(_.AppName, createStatesRequest);


            // STEP 3: Create countries schema.
            var createCountriesRequest = new CreateSchemaDto
            {
                Name   = "countries",
                Fields = new List <UpsertSchemaFieldDto>
                {
                    new UpsertSchemaFieldDto
                    {
                        Name       = "name",
                        Properties = new StringFieldPropertiesDto()
                    },
                    new UpsertSchemaFieldDto
                    {
                        Name       = "states",
                        Properties = new ReferencesFieldPropertiesDto
                        {
                            SchemaIds = new List <string> {
                                states.Id
                            }
                        }
                    }
                },
                IsPublished = true
            };

            await _.Schemas.PostSchemaAsync(_.AppName, createCountriesRequest);
        }
Пример #15
0
        public async Task <IActionResult> Post([FromBody] CreateSchemaDto dto, CancellationToken cancellationToken)
        {
            var id = await _schemaService.CreateAsync(dto.Fields.ToEntities().ToList(), cancellationToken);

            return(AcceptedAtAction(nameof(Get), new { id = id }, null));
        }