Пример #1
0
        public void A_default_result_range_should_be_used_when_one_is_not_specified(int max, int expected)
        {
            using (var server = TestServer.Create <TestStartup>()) {
                Storage.DocumentStore.Conventions.DefaultQueryingConsistency = ConsistencyOptions.AlwaysWaitForNonStaleResultsAsOfLastWrite;
                var fixture   = AutofixtureHelpers.CreateFixture();
                var metatypes = fixture.Build <MetaType>().Without(type => type.Id).CreateMany(max);

                using (var session = Storage.GetAsyncSession()) {
                    foreach (var metatype in metatypes)
                    {
                        session.StoreAsync(metatype).Wait();
                    }
                    session.SaveChangesAsync().Wait();
                }

                var response = server.CreateRequest("api/metatypes").AddHeader("Content-Type", "application/json").GetAsync().Result;

                var content = response.Content.ReadAsStringAsync().Result;
                var result  = JsonConvert.DeserializeObject <MetaType[]>(content, this.JsonSerializerSettings);

                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
                Assert.IsType <MetaType[]>(result);
                Assert.Equal(result.Length, expected);
            }
        }
Пример #2
0
        protected virtual Model[] CreateModels(MetaType metaType, int max)
        {
            var fixture = AutofixtureHelpers.CreateFixture();
            var models  =
                fixture.Build <Model>()
                .Without(m => m.Id)
                .With
                    (model => model._shurikenMeta,
                    new Model.MetaData
            {
                MetaTypeId          = metaType.Id,
                MetaTypeName        = metaType.Name,
                MetaTypeDisplayName = metaType.DisplayName,
                CreatedOn           = DateTime.UtcNow,
                LastModified        = DateTime.UtcNow
            })
                .CreateMany(max)
                .ToArray();

            using (var session = Storage.GetAsyncSession()) {
                foreach (var model in models)
                {
                    model.SaveAsync(model._shurikenMeta.MetaTypeName, session).Wait();
                }
                session.SaveChangesAsync().Wait();
            }

            return(models);
        }
Пример #3
0
        public void Should_be_able_to_delete_multiples_MetaTypes_by_Ids()
        {
            using (var server = TestServer.Create <TestStartup>()) {
                // arrange
                var fixture   = AutofixtureHelpers.CreateFixture();
                var metaTypes = fixture.Build <MetaType>().Without(type => type.Id).CreateMany().ToArray();
                using (var session = Storage.GetAsyncSession()) {
                    foreach (var metaType in metaTypes)
                    {
                        session.StoreAsync(metaType).Wait();
                    }
                    session.SaveChangesAsync().Wait();
                }

                // act
                var queryStringParams = string.Join("&", metaTypes.Select(type => string.Format("ids[]={0}", type.Id)));
                var response          = server.CreateRequest("api/metatypes?{0}".FormatString(queryStringParams)).SendAsync("DELETE").Result;

                // verify
                Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
                using (var session = Storage.GetAsyncSession()) {
                    var fromDb = session.LoadAsync <MetaType>(metaTypes.Select(type => type.Id).ToArray()).Result;
                    Assert.All(fromDb, Assert.Null);
                }
            }
        }
Пример #4
0
        public void Specifying_a_single_id_should_return_a_collection_with_the_single_requested_MetaType()
        {
            using (var server = TestServer.Create <TestStartup>()) {
                // arrange
                Storage.DocumentStore.Conventions.DefaultQueryingConsistency = ConsistencyOptions.AlwaysWaitForNonStaleResultsAsOfLastWrite;
                var fixture   = AutofixtureHelpers.CreateFixture();
                var metatypes = fixture.Build <MetaType>().Without(type => type.Id).CreateMany(10).ToArray();

                using (var session = Storage.GetAsyncSession()) {
                    foreach (var metatype in metatypes)
                    {
                        session.StoreAsync(metatype).Wait();
                    }
                    session.SaveChangesAsync().Wait();
                }

                var subject = metatypes.First();

                // act
                var response =
                    server.CreateRequest("api/metatypes?ids[]={0}".FormatString(subject.Id))
                    .AddHeader("Content-Type", "application/json")
                    .GetAsync()
                    .Result;

                var content = response.Content.ReadAsStringAsync().Result;
                var result  = JsonConvert.DeserializeObject <MetaType[]>(content, this.JsonSerializerSettings);

                // verify
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
                Assert.IsType <MetaType[]>(result);
                Assert.Single(result);
                Assert.Equal(subject.Id, result.First().Id);
            }
        }
Пример #5
0
        public void Should_not_be_able_rename_an_existing_MetaType()
        {
            using (var server = TestServer.Create <TestStartup>()) {
                // arrange
                var fixture  = AutofixtureHelpers.CreateFixture();
                var metaType = fixture.Build <MetaType>().Without(type => type.Id).Create();

                using (var session = Storage.GetAsyncSession()) {
                    session.StoreAsync(metaType).Wait();
                    session.SaveChangesAsync().Wait();
                }

                metaType.Name = "Renamed";

                // act
                var json     = JsonConvert.SerializeObject(metaType, this.JsonSerializerSettings);
                var response =
                    server.CreateRequest("api/metatypes")
                    .And(message => message.Content = new StringContent(json, Encoding.UTF8, "application/json"))
                    .SendAsync("PUT")
                    .Result;

                // verify
                var result = JsonConvert.DeserializeObject <ApiError>(response.Content.ReadAsStringAsync().Result);
                Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
                Assert.Equal(ApiErrorCode.CannotRenameMetaType, result.ErrorCode);
            }
        }
Пример #6
0
        public void Should_be_able_to_add_a_new_field_to_an_existing_MetaType(string newFieldName)
        {
            using (var server = TestServer.Create <TestStartup>()) {
                // arrange
                var fixture  = AutofixtureHelpers.CreateFixture();
                var metaType = fixture.Build <MetaType>().Without(type => type.Id).Create();
                Assert.DoesNotContain(metaType.Fields, field => field.Name == newFieldName);

                using (var session = Storage.GetAsyncSession()) {
                    session.StoreAsync(metaType).Wait();
                    session.SaveChangesAsync().Wait();
                }

                // act
                metaType.Fields.Add(new BooleanField {
                    Name = newFieldName
                });
                var json = JsonConvert.SerializeObject(metaType, this.JsonSerializerSettings);

                var response =
                    server.CreateRequest("api/metatypes")
                    .And(message => message.Content = new StringContent(json, Encoding.UTF8, "application/json"))
                    .SendAsync("PUT")
                    .Result;

                // verify
                Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);

                using (var session = Storage.GetAsyncSession()) {
                    var updatedMetaType = session.LoadAsync <MetaType>(metaType.Id).Result;

                    Assert.Contains(updatedMetaType.Fields, field => field.Name == newFieldName);
                }
            }
        }
Пример #7
0
        public void Should_not_be_able_to_add_duplicate_fields_top_level_or_to_objects_nested_N_levels_deep(int n)
        {
            using (var server = TestServer.Create <TestStartup>()) {
                // arrange
                var fixture  = AutofixtureHelpers.CreateFixture();
                var metaType = fixture.Build <MetaType>().Without(type => type.Id).Create();

                using (var session = Storage.GetAsyncSession()) {
                    session.StoreAsync(metaType).Wait();
                    session.SaveChangesAsync().Wait();
                }

                var i      = 0;
                var fields = metaType.Fields;
                while (i < n)
                {
                    var obj = new ArbitraryObjectField {
                        Name = "obj{0}".FormatString(i)
                    };
                    obj.Fields.Add(new BooleanField {
                        Name = "someField"
                    });
                    fields.Add(obj);
                    fields = obj.Fields;


                    if (i == n - 1)
                    {
                        fields.Add(new BooleanField {
                            Name = "Field1"
                        });
                        fields.Add(new BooleanField {
                            Name = "field1"
                        });
                    }
                    i++;
                }

                // act
                var json = JsonConvert.SerializeObject(metaType, this.JsonSerializerSettings);

                var response =
                    server.CreateRequest("api/metatypes")
                    .And(message => message.Content = new StringContent(json, Encoding.UTF8, "application/json"))
                    .SendAsync("PUT")
                    .Result;

                // verify
                var result = JsonConvert.DeserializeObject <ApiError>(response.Content.ReadAsStringAsync().Result);
                Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
                Assert.Equal(ApiErrorCode.DuplicateFieldName, result.ErrorCode);
            }
        }
Пример #8
0
        public void Should_be_able_to_delete_a_single_MetaType_by_Id()
        {
            using (var server = TestServer.Create <TestStartup>()) {
                // arrange
                var fixture  = AutofixtureHelpers.CreateFixture();
                var metaType = fixture.Build <MetaType>().Without(type => type.Id).Create();
                using (var session = Storage.GetAsyncSession()) {
                    session.StoreAsync(metaType).Wait();
                    session.SaveChangesAsync().Wait();
                }

                // act
                var response = server.CreateRequest("api/metatypes?ids[]={0}".FormatString(metaType.Id)).SendAsync("DELETE").Result;

                // verify
                Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
                using (var session = Storage.GetAsyncSession()) {
                    var fromDb = session.LoadAsync <MetaType>(metaType.Id).Result;
                    Assert.Null(fromDb);
                }
            }
        }
Пример #9
0
        public void Specifying_multiple_ids_should_return_a_collection_with_the_requested_MetaTypes_only(int take, int max)
        {
            using (var server = TestServer.Create <TestStartup>()) {
                Storage.DocumentStore.Conventions.DefaultQueryingConsistency = ConsistencyOptions.AlwaysWaitForNonStaleResultsAsOfLastWrite;
                var fixture   = AutofixtureHelpers.CreateFixture();
                var metatypes = fixture.Build <MetaType>().Without(type => type.Id).CreateMany(max).ToArray();

                using (var session = Storage.GetAsyncSession()) {
                    foreach (var metatype in metatypes)
                    {
                        session.StoreAsync(metatype).Wait();
                    }
                    session.SaveChangesAsync().Wait();
                }

                var subjects = metatypes.Take(take).ToArray();

                var queryStringParams = string.Join("&", subjects.Select(type => string.Format("ids[]={0}", type.Id)));

                var response =
                    server.CreateRequest("api/metatypes?{0}".FormatString(queryStringParams))
                    .AddHeader("Content-Type", "application/json")
                    .GetAsync()
                    .Result;

                var content = response.Content.ReadAsStringAsync().Result;
                var result  = JsonConvert.DeserializeObject <MetaType[]>(content, this.JsonSerializerSettings);

                var requestedIds = subjects.Select(type => type.Id).ToArray();
                var receivedIds  = result.Select(type => type.Id).ToArray();

                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
                Assert.IsType <MetaType[]>(result);
                Assert.Equal(take, result.Length);
                Assert.True(requestedIds.SequenceEqual(receivedIds));
            }
        }
Пример #10
0
        public void Updated_Field_Names_should_be_alphanumeric_strings_with_no_spaces_and_less_than_151_characters(string fieldName)
        {
            using (var server = TestServer.Create <TestStartup>()) {
                // arrange
                var fixture  = AutofixtureHelpers.CreateFixture();
                var metaType = fixture.Build <MetaType>().Without(type => type.Id).Create();

                using (var session = Storage.GetAsyncSession()) {
                    session.StoreAsync(metaType).Wait();
                    session.SaveChangesAsync().Wait();
                }

                // act
                metaType.Fields.Add(new BooleanField {
                    Name = fieldName
                });
                var json = JsonConvert.SerializeObject(metaType, this.JsonSerializerSettings);

                var response =
                    server.CreateRequest("api/metatypes")
                    .And(message => message.Content = new StringContent(json, Encoding.UTF8, "application/json"))
                    .SendAsync("PUT")
                    .Result;

                // verify
                Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
                var result = JsonConvert.DeserializeObject <ApiError>(response.Content.ReadAsStringAsync().Result);
                Assert.Equal(ApiErrorCode.InvalidFieldName, result.ErrorCode);

                using (var session = Storage.GetAsyncSession()) {
                    var updatedMetaType = session.LoadAsync <MetaType>(metaType.Id).Result;

                    Assert.DoesNotContain(updatedMetaType.Fields, field => field.Name == fieldName);
                }
            }
        }
Пример #11
0
 private static BackupController GetBackupController(IFixture fixture)
 {
     return(AutofixtureHelpers.GetMockedApiController <BackupController>(fixture));
 }