Open JacquesBronk opened 1 month ago
It seems that the existsandnotempty only supports string & array, this might be improved by the following
public static bool existsandnotempty(string path, JUSTContext context) { T selector = context.Resolve<T>(context.Input); JToken selectedToken = selector.Select(path); return selectedToken != null && ( (selectedToken.Type == JTokenType.String && selectedToken.ToString().Trim() != string.Empty) || (selectedToken.Type == JTokenType.Array && selectedToken.Children().Count() > 0) || (selectedToken.Type == JTokenType.Object && selectedToken.Children().Any()) || (selectedToken.Type == JTokenType.Integer && selectedToken.ToObject<long>() != 0) || (selectedToken.Type == JTokenType.Float && selectedToken.ToObject<double>() != 0.0) || (selectedToken.Type == JTokenType.Boolean) || (selectedToken.Type == JTokenType.Date) || (selectedToken.Type == JTokenType.Bytes && selectedToken.ToObject<byte[]>().Length > 0) || (selectedToken.Type == JTokenType.Guid) || (selectedToken.Type == JTokenType.TimeSpan) || (selectedToken.Type == JTokenType.Uri) ); }
[Test] public void ExistsAndNotEmpty_Integer() { const string transformer = "{ \"HasInteger\": \"#existsandnotempty($.Integer)\" }"; const string input = "{ \"Integer\": 123 }"; var result = new JsonTransformer().Transform(transformer, input); Assert.AreEqual("{\"HasInteger\":true}", result); } [Test] public void ExistsAndNotEmpty_Float() { const string transformer = "{ \"HasFloat\": \"#existsandnotempty($.Float)\" }"; const string input = "{ \"Float\": 123.45 }"; var result = new JsonTransformer().Transform(transformer, input); Assert.AreEqual("{\"HasFloat\":true}", result); } [Test] public void ExistsAndNotEmpty_Boolean() { const string transformer = "{ \"HasBoolean\": \"#existsandnotempty($.Boolean)\" }"; const string input = "{ \"Boolean\": true }"; var result = new JsonTransformer().Transform(transformer, input); Assert.AreEqual("{\"HasBoolean\":true}", result); } [Test] public void ExistsAndNotEmpty_Date() { const string transformer = "{ \"HasDate\": \"#existsandnotempty($.Date)\" }"; const string input = "{ \"Date\": \"2023-10-01T00:00:00Z\" }"; var result = new JsonTransformer().Transform(transformer, input); Assert.AreEqual("{\"HasDate\":true}", result); } [Test] public void ExistsAndNotEmpty_Bytes() { const string transformer = "{ \"HasBytes\": \"#existsandnotempty($.Bytes)\" }"; const string input = "{ \"Bytes\": \"SGVsbG8gd29ybGQ=\" }"; // Base64 encoded string var result = new JsonTransformer().Transform(transformer, input); Assert.AreEqual("{\"HasBytes\":true}", result); } [Test] public void ExistsAndNotEmpty_Guid() { const string transformer = "{ \"HasGuid\": \"#existsandnotempty($.Guid)\" }"; const string input = "{ \"Guid\": \"d3b07384-d9a7-4b49-8d1b-6d9a7d3b0738\" }"; var result = new JsonTransformer().Transform(transformer, input); Assert.AreEqual("{\"HasGuid\":true}", result); } [Test] public void ExistsAndNotEmpty_TimeSpan() { const string transformer = "{ \"HasTimeSpan\": \"#existsandnotempty($.TimeSpan)\" }"; const string input = "{ \"TimeSpan\": \"00:01:00\" }"; var result = new JsonTransformer().Transform(transformer, input); Assert.AreEqual("{\"HasTimeSpan\":true}", result); } [Test] public void ExistsAndNotEmpty_Uri() { const string transformer = "{ \"HasUri\": \"#existsandnotempty($.Uri)\" }"; const string input = "{ \"Uri\": \"http://example.com\" }"; var result = new JsonTransformer().Transform(transformer, input); Assert.AreEqual("{\"HasUri\":true}", result); }
Create a pull request for it.
It seems that the existsandnotempty only supports string & array, this might be improved by the following
Tests