-
Notifications
You must be signed in to change notification settings - Fork 57
Open
Description
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)
);
}Tests
[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);
}Metadata
Metadata
Assignees
Labels
No labels