Skip to content

Multiple token types for exists and not empty #306

Description

@JacquesBronk

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);
        }

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions