public void Should_not_be_able_update_Models_with_fields_not_specified_on_the_MetaType(
            string fieldName,
            string fieldNameNotInSchema) {
            using (var server = TestServer.Create<TestStartup>()) {
                // arrange
                var schema = new MetaType { Name = "simple_schema" };
                var model = new Model { };
                model[fieldName] = "Some Text";
                schema.Fields.Add(new TextField { Name = fieldName });

                using (var session = Storage.GetAsyncSession()) {
                    session.StoreAsync(schema).Wait();
                    model.SaveAsync(schema.Name, session).Wait();
                    session.SaveChangesAsync().Wait();
                }

                // act
                model[fieldNameNotInSchema] = "Some Text";

                var json = JsonConvert.SerializeObject(model, this.JsonConverter);
                var response =
                    server.CreateRequest("api/models/{0}".FormatString(schema.Name))
                          .And(message => message.Content = new StringContent(json, Encoding.UTF8, "application/json"))
                          .SendAsync("PUT")
                          .Result;

                // verify
                Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
                var content = response.Content.ReadAsStringAsync().Result;
                var result = JsonConvert.DeserializeObject<ApiError>(content);
                Assert.Equal(ApiErrorCode.SchemaMismatch, result.ErrorCode);
            }
        }
        public void Should_not_be_able_add_Null_values_to_Enumerable_fields() {
            using (var server = TestServer.Create<TestStartup>()) {
                // arrange
                var schema = new MetaType { Name = "simple_schema" };
                schema.Fields.Add(new EnumerableField { Name = "listOfStrings", EnumerableOf = new TextField() });

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

                var model = new Model { };
                model["listOfStrings"] = new List<string> { { "item1" } };

                using (var session = Storage.GetAsyncSession()) {
                    model.SaveAsync(schema.Name, session).Wait();
                    session.SaveChangesAsync().Wait();
                }

                // act
                (model["listOfStrings"] as List<string>).Add(null);

                var json = JsonConvert.SerializeObject(model, this.JsonConverter);
                var response =
                    server.CreateRequest("api/models/{0}".FormatString(schema.Name))
                          .And(message => message.Content = new StringContent(json, Encoding.UTF8, "application/json"))
                          .SendAsync("PUT")
                          .Result;

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