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