public void EnabledNodeTypesValidatorShouldReturnCorrectJson(IEnumerable <string> vals, string message, string expected) { //Arrange var validator = new EnabledNodeTypesValidator(vals, message); //Act var created = validator.CreateValidator(); var json = JsonConvert.SerializeObject(created); //Assert Assert.Equal(expected, json); }
/// <summary> /// Reads the JSON representation of the object. /// </summary> /// <param name="reader">The reader to use.</param> /// <param name="objectType">The object type to serialize into.</param> /// <param name="existingValue">The current value of the property.</param> /// <param name="serializer">The serializer to use.</param> /// <returns>The deserialized <see cref="Asset"/>.</returns> public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var jsonObject = JObject.Load(reader); if (jsonObject.TryGetValue("size", out var jToken)) { return(new SizeValidator( jToken["min"].ToNullableInt(), jToken["max"].ToNullableInt(), jsonObject["message"]?.ToString())); } if (jsonObject.TryGetValue("range", out jToken)) { return(new RangeValidator( jToken["min"].ToNullableInt(), jToken["max"].ToNullableInt(), jsonObject["message"]?.ToString())); } if (jsonObject.TryGetValue("in", out jToken)) { return(new InValuesValidator(jToken.Values <string>(), jsonObject["message"]?.ToString())); } if (jsonObject.TryGetValue("linkMimetypeGroup", out jToken)) { if (jToken is JValue) { //single string value returned for mime type field. This seems to be an inconsistency in the API that needs to be handled. var type = jToken.Value <string>(); return(new MimeTypeValidator(new[] { (MimeTypeRestriction)Enum.Parse(typeof(MimeTypeRestriction), type, true) }, jsonObject["message"]?.ToString())); } var types = jToken.Values <string>(); return(new MimeTypeValidator(types.Select(c => (MimeTypeRestriction)Enum.Parse(typeof(MimeTypeRestriction), c, true)), jsonObject["message"]?.ToString())); } if (jsonObject.TryGetValue("linkContentType", out jToken)) { return(new LinkContentTypeValidator(jToken.Values <string>(), jsonObject["message"]?.ToString())); } if (jsonObject.TryGetValue("regexp", out jToken)) { return(new RegexValidator(jToken["pattern"]?.ToString(), jToken["flags"]?.ToString(), jsonObject["message"]?.ToString())); } if (jsonObject.TryGetValue("unique", out jToken)) { return(new UniqueValidator()); } if (jsonObject.TryGetValue("dateRange", out jToken)) { return(new DateRangeValidator( jToken["min"]?.ToString(), jToken["max"]?.ToString(), jsonObject["message"]?.ToString())); } if (jsonObject.TryGetValue("assetFileSize", out jToken)) { return(new FileSizeValidator( jToken["min"].ToNullableInt(), jToken["max"].ToNullableInt(), SystemFileSizeUnits.Bytes, SystemFileSizeUnits.Bytes, jsonObject["message"]?.ToString())); } if (jsonObject.TryGetValue("assetImageDimensions", out jToken)) { int?minWidth = null; int?maxWidth = null; int?minHeight = null; int?maxHeight = null; if (jToken["width"] != null) { var width = jToken["width"]; minWidth = width["min"].ToNullableInt(); maxWidth = width["max"].ToNullableInt(); } if (jToken["height"] != null) { var height = jToken["height"]; minHeight = height["min"].ToNullableInt(); maxHeight = height["max"].ToNullableInt(); } return(new ImageSizeValidator(minWidth, maxWidth, minHeight, maxHeight, jsonObject["message"]?.ToString())); } if (jsonObject.TryGetValue("nodes", out jToken)) { var validator = new NodesValidator(); if (jToken["entry-hyperlink"] != null) { validator.EntryHyperlink = jToken["entry-hyperlink"].ToObject <IEnumerable <IFieldValidator> >(serializer); } if (jToken["embedded-entry-block"] != null) { validator.EmbeddedEntryBlock = jToken["embedded-entry-block"].ToObject <IEnumerable <IFieldValidator> >(serializer); } if (jToken["embedded-entry-inline"] != null) { validator.EmbeddedEntryInline = jToken["embedded-entry-inline"].ToObject <IEnumerable <IFieldValidator> >(serializer); } return(validator); } if (jsonObject.TryGetValue("enabledMarks", out jToken)) { var types = jToken.Values <string>(); return(new EnabledMarksValidator(types.Select(c => (EnabledMarkRestrictions)Enum.Parse(typeof(EnabledMarkRestrictions), c, true)), jsonObject["message"]?.ToString())); } if (jsonObject.TryGetValue("enabledNodeTypes", out jToken)) { var types = jToken.Values <string>(); return(new EnabledNodeTypesValidator(types.Select(c => EnabledNodeTypesValidator.toEnum(c)), jsonObject["message"]?.ToString())); } return(Activator.CreateInstance(objectType)); }