Beispiel #1
0
        public async Task TransformAsync_should_transform_object_async()
        {
            var content = new ContentData();

            var expected =
                new ContentData()
                .AddField("operation",
                          new ContentFieldData()
                          .AddInvariant(42));

            var vars = new DataScriptVars
            {
                ["data"]      = content,
                ["dataOld"]   = null,
                ["operation"] = "MyOperation"
            };

            const string script = @"
                var data = ctx.data;

                getJSON('http://mockup.squidex.io', function(result) {
                    data.operation = { iv: result.key };

                    replace(data);
                });        

            ";

            var result = await sut.TransformAsync(vars, script, contentOptions);

            Assert.Equal(expected, result);
        }
Beispiel #2
0
        public async Task TransformAsync_should_transform_object()
        {
            var content = new ContentData();

            var expected =
                new ContentData()
                .AddField("operation",
                          new ContentFieldData()
                          .AddInvariant("MyOperation"));

            var vars = new DataScriptVars
            {
                ["data"]      = content,
                ["dataOld"]   = null,
                ["operation"] = "MyOperation"
            };

            const string script = @"
                var data = ctx.data;

                data.operation = { iv: ctx.operation };

                replace(data);
            ";

            var result = await sut.TransformAsync(vars, script, contentOptions);

            Assert.Equal(expected, result);
        }
Beispiel #3
0
        public async Task TransformAsync_should_throw_exception_if_script_failed()
        {
            var vars = new DataScriptVars
            {
                ["data"] = new ContentData()
            };

            const string script = @"
                invalid(();
            ";

            await Assert.ThrowsAsync <ValidationException>(() => sut.TransformAsync(vars, script, contentOptions));
        }
Beispiel #4
0
        public async Task TransformAsync_should_return_original_content_if_not_replaced()
        {
            var vars = new DataScriptVars
            {
                ["data"] = new ContentData()
            };

            const string script = @"
                var x = 0;
            ";

            var result = await sut.TransformAsync(vars, script, contentOptions);

            Assert.Empty(result);
        }
Beispiel #5
0
        public async Task TransformAsync_should_return_original_content_if_script_failed()
        {
            var content = new ContentData();

            var vars = new DataScriptVars
            {
                ["data"] = content
            };

            const string script = @"
                x => x
            ";

            var result = await sut.TransformAsync(vars, script, contentOptions);

            Assert.Empty(result);
        }
Beispiel #6
0
        public async Task TransformAsync_should_not_timeout_if_replace_never_called()
        {
            var vars = new DataScriptVars
            {
                ["data"]      = new ContentData(),
                ["dataOld"]   = null,
                ["operation"] = "MyOperation"
            };

            const string script = @"
                var data = ctx.data;

                getJSON('http://cloud.squidex.io/healthz', function(result) {
                    data.operation = { iv: result.key };
                });
            ";

            await sut.TransformAsync(vars, script, contentOptions);
        }
Beispiel #7
0
        public async Task TransformAsync_should_return_original_content_if_not_replaced_async()
        {
            var vars = new DataScriptVars
            {
                ["data"] = new ContentData()
            };

            const string script = @"
                var x = 0;

                getJSON('http://mockup.squidex.io', function(result) {
                    complete();
                });                    
            ";

            var result = await sut.TransformAsync(vars, script, contentOptions);

            Assert.Empty(result);
        }
Beispiel #8
0
        public async Task TransformAsync_should_transform_content_with_old_content()
        {
            var content =
                new ContentData()
                .AddField("number0",
                          new ContentFieldData()
                          .AddInvariant(3.0));

            var oldContent =
                new ContentData()
                .AddField("number0",
                          new ContentFieldData()
                          .AddInvariant(5.0));

            var expected =
                new ContentData()
                .AddField("number0",
                          new ContentFieldData()
                          .AddInvariant(13.0));

            var userIdentity  = new ClaimsIdentity();
            var userPrincipal = new ClaimsPrincipal(userIdentity);

            userIdentity.AddClaim(new Claim(OpenIdClaims.ClientId, "2"));

            var vars = new DataScriptVars
            {
                ["data"]    = content,
                ["dataOld"] = oldContent,
                ["user"]    = userPrincipal
            };

            const string script = @"
                ctx.data.number0.iv = ctx.data.number0.iv + ctx.dataOld.number0.iv * parseInt(ctx.user.id, 10);

                replace(ctx.data);
            ";

            var result = await sut.TransformAsync(vars, script, contentOptions);

            Assert.Equal(expected, result);
        }
        private bool IsTrue(WorkflowCondition condition, ContentData?data, ClaimsPrincipal?user)
        {
            if (condition?.Roles != null && user != null)
            {
                if (!user.Claims.Any(x => x.Type == ClaimTypes.Role && condition.Roles.Contains(x.Value)))
                {
                    return(false);
                }
            }

            if (!string.IsNullOrWhiteSpace(condition?.Expression) && data != null)
            {
                var vars = new DataScriptVars
                {
                    Data = data
                };

                return(scriptEngine.Evaluate(vars, condition.Expression));
            }

            return(true);
        }
Beispiel #10
0
        public async Task TransformAsync_should_transform_content_and_return_with_execute_transform()
        {
            var content =
                new ContentData()
                .AddField("number0",
                          new ContentFieldData()
                          .AddInvariant(1.0))
                .AddField("number1",
                          new ContentFieldData()
                          .AddInvariant(1.0));
            var expected =
                new ContentData()
                .AddField("number1",
                          new ContentFieldData()
                          .AddInvariant(2.0))
                .AddField("number2",
                          new ContentFieldData()
                          .AddInvariant(10.0));

            var vars = new DataScriptVars
            {
                ["data"] = content
            };

            const string script = @"
                var data = ctx.data;

                delete data.number0;

                data.number1.iv = data.number1.iv + 1;
                data.number2 = { 'iv': 10 };

                replace(data);
            ";

            var result = await sut.TransformAsync(vars, script, contentOptions);

            Assert.Equal(expected, result);
        }
Beispiel #11
0
        public async Task Should_share_vars_between_execution_for_transform()
        {
            var vars = new DataScriptVars
            {
                ["value"] = 13
            };

            const string script1 = @"
                ctx.obj = { number: ctx.value * 2 };
            ";

            const string script2 = @"
                ctx.data.test = { iv: ctx.obj.number + 2 };
                replace();
            ";

#pragma warning disable MA0042 // Do not use blocking calls in an async method
            sut.Execute(vars, script1, new ScriptOptions {
                AsContext = true
            });
#pragma warning restore MA0042 // Do not use blocking calls in an async method

            var vars2 = new DataScriptVars()
            {
                ["data"] = new ContentData()
            };

            foreach (var(key, value) in vars)
            {
                if (!vars2.ContainsKey(key))
                {
                    vars2[key] = value;
                }
            }

            var result = await sut.TransformAsync(vars2, script2, new ScriptOptions { AsContext = true });

            Assert.Equal(JsonValue.Create(28), result["test"] !["iv"]);
Beispiel #12
0
        public async Task TransformAsync_should_not_ignore_transformation_if_async_not_set()
        {
            var vars = new DataScriptVars
            {
                ["data"]      = new ContentData(),
                ["dataOld"]   = null,
                ["operation"] = "MyOperation"
            };

            const string script = @"
                var data = ctx.data;

                getJSON('http://mockup.squidex.io', function(result) {
                    data.operation = { iv: result.key };

                    replace(data);
                });        

            ";

            var result = await sut.TransformAsync(vars, script, contentOptions);

            Assert.NotEmpty(result);
        }