public void TestPrimaryOutput() { var input = new RowsBuilder() .Row("id", 1).Field("name", "one") .Row("id", 2).Field("name", "two") .Row("id", 3).Field("name", "three") .ToOperation(); var xml = @"<tfl><processes> <add name='process'> <connections> <add name='input' provider='internal' /> <add name='output' provider='internal' /> </connections> <entities> <add name='entity'> <fields> <add name='id' type='int' primary-key='true' /> <add name='name' /> </fields> </add> </entities> </add> </processes></tfl>".Replace('\'', '"'); var process = ProcessFactory.Create(xml, new TestLogger())[0]; process.Entities[0].InputOperation = input; var output = process.Execute(); Assert.IsInstanceOf<IEnumerable<Row>>(output); Assert.AreEqual(3, output.Count()); }
public void Sample() { var input = new RowsBuilder() .Row().Field("f1", 1) .Row().Field("f1", 2) .Row().Field("f1", 3) .Row().Field("f1", 4) .Row().Field("f1", 5) .Row().Field("f1", 6) .Row().Field("f1", 7) .Row().Field("f1", 8) .Row().Field("f1", 9) .Row().Field("f1", 10) .Row().Field("f1", 11) .Row().Field("f1", 12) .ToOperation(); var sampler = new SampleOperation(50); var rows = TestOperation(input, sampler); Console.WriteLine(rows.Count); Assert.Greater(12, rows.Count); Assert.Less(1, rows.Count); }
public void ConcatStrings() { var input = new RowsBuilder().Row().Field("f1", "v1").Field("f2", "v2").ToOperation(); var parameters = new ParametersBuilder().Parameters("f1", "f2").ToParameters(); var concat = new ConcatOperation("o1", parameters); var rows = TestOperation(input, concat); Assert.AreEqual("v1v2", rows[0]["o1"]); }
public void ConcatNumbers() { var input = new RowsBuilder().Row().Field("f1", 1).Field("f2", 2).ToOperation(); var parameters = new ParametersBuilder().Parameter("f1").Type("int32").Parameter("f2").Type("int32").ToParameters(); var concat = new ConcatOperation("o1", parameters); var rows = TestOperation(input, concat); Assert.AreEqual("12", rows[0]["o1"]); }
public void StartsWith() { var input = new RowsBuilder().Row("f1", "test").Row("f1", "abcd").ToOperation(); var startsWith = new StartsWithValidatorOperation("f1", "abc", "out", false); var output = TestOperation(input, startsWith); Assert.IsFalse((bool) output[0]["out"]); Assert.IsTrue((bool)output[1]["out"]); }
public void ParseJson() { var input = new RowsBuilder() .Row().Field("f1", "{\"i\":\"am\", \"valid\":true}").Field("out", null) .Row().Field("f1", "{\"i\":\"have\", \"a\":\"Prob\"lem\"}").Field("out", null).ToOperation(); var isJson = new JsonValidatorOperation("f1", "out", false); var rows = TestOperation(input, isJson); Assert.AreEqual(true, rows[0]["out"]); Assert.AreEqual(false, rows[1]["out"]); }
public void ContainsCharacters() { var input = new RowsBuilder() .Row("f1", "test") .Row("f1", "abcd").ToOperation(); var containsCharacters = new ContainsCharactersValidatorOperation("f1", "o1", "abc", Libs.EnterpriseLibrary.Validation.Validators.ContainsCharacters.All, false); var output = TestOperation(input, containsCharacters); Assert.AreEqual(false, output[0]["o1"]); Assert.AreEqual(true, output[1]["o1"]); }
public void ParseJson2() { const string goodJson = "{\"updated\": \"Thu, 10 Sep 2009 08:45:12 +0000\", \"links\": [{\"href\": \"http://www.designvitality.com/blog/2007/09/photoshop-text-effect-tutorial/\", \"type\": \"text/html\", \"rel\": \"alternate\"}], \"title\": \"Photoshop Text Effects\", \"author\": \"hotpants1\", \"comments\": \"http://delicious.com/url/90c1b26e451a090452df8b947d6298cb\", \"guidislink\": false, \"title_detail\": {\"base\": \"http://feeds.delicious.com/v2/rss/recent?min=1&count=100\", \"type\": \"text/plain\", \"language\": null, \"value\": \"Photoshop Text Effects\"}, \"link\": \"http://www.designvitality.com/blog/2007/09/photoshop-text-effect-tutorial/\", \"source\": {}, \"wfw_commentrss\": \"http://feeds.delicious.com/v2/rss/url/90c1b26e451a090452df8b947d6298cb\", \"id\": \"http://delicious.com/url/90c1b26e451a090452df8b947d6298cb#hotpants1\", \"tags\": [{\"term\": \"photoshop\", \"scheme\": \"http://delicious.com/hotpants1/\", \"label\": null}]}"; const string badJson = "{\"updated\": \"Thu, 10 Sep 2009 08:45:12 +0000\", \"links\": [{\"href\": \"http://www.designvitality.com/blog/2007/09/photoshop-text-effect-tutorial/\", \"type\": \"text/html\", \"rel\": \"alternate\"}], \"title\": \"Photoshop Text Effects\", \"author\": \"hotpants1\", \"comments\": \"http://delicious.com/url/90c1b26e451a090452df8b947d6298cb\", \"guidislink\": false, \"title_detail\": {\"base\": \"http://feeds.delicious.com/v2/rss/recent?min=1&count=100\", \"type\": \"text/plain\", \"language\": null, \"value\": \"Photoshop Text Effects\"}, \"link\": \"http://www.designvitality.com/blog/2007/09/photoshop-text-effect-tutorial/\", \"source\": {}, \"wfw_commentrss\": \"http://feeds.delicious.com/v2/rss/url/90c1b26e451a090452df8b947d6298cb\", \"id\": \"http://delicious.com/url/90c1b26e451a090452df8b947d6298cb#hotpants1\", \"tags\": [{\"term\": \"photoshop\", scheme\": \"http://delicious.com/hotpants1/\", \"label\": null}]}"; var input = new RowsBuilder().Row().Field("f1", goodJson).Field("o1", "").Row().Field("f1", badJson).Field("o1", "").ToOperation(); var isJson = new JsonValidatorOperation("f1", "out", false); var rows = TestOperation(input, isJson); Assert.AreEqual(true, rows[0]["out"]); Assert.AreEqual(false, rows[1]["out"]); }
public void TestSecondaryOutputs() { var file1 = Path.GetTempFileName(); var file2 = Path.GetTempFileName(); var input = new RowsBuilder() .Row("id", 1).Field("name", "one") .Row("id", 2).Field("name", "two") .Row("id", 3).Field("name", "three") .ToOperation(); var xml = string.Format(@"<tfl><processes> <add name='process'> <connections> <add name='input' provider='internal' /> <add name='output' provider='internal' /> <add name='c1' provider='file' file='{0}' /> <add name='c2' provider='file' file='{1}' /> </connections> <entities> <add name='name'> <output> <add name='o1' connection='c1' run-field='name' run-value='two' /> <add name='o2' connection='c2' run-field='id' run-operator='GreaterThan' run-type='int' run-value='1' /> </output> <fields> <add name='id' type='int' primary-key='true' /> <add name='name' /> </fields> </add> </entities> </add> </processes></tfl>", file1,file2).Replace('\'', '"'); var process = ProcessFactory.Create(xml, new TestLogger())[0]; process.Entities[0].InputOperation = input; var rows = process.Execute(); Assert.IsNotNull(rows); Assert.AreEqual(3, rows.Count()); const int header = 1; Assert.AreEqual(1, File.ReadAllLines(file1).Length-header); Assert.AreEqual(2, File.ReadAllLines(file2).Length-header); }
public void Left() { var input = new RowsBuilder().Row("left", "left").ToOperation(); var left = new LeftOperation("left", "o1", 3); var output = TestOperation(input, left); Assert.AreEqual("lef", output[0]["o1"]); }
public void FormatPhone() { var input = new RowsBuilder().Row().Field("phone", "1112223333").ToOperation(); var formatPhone = new FormatPhoneOperation("phone", "phone"); var rows = TestOperation(input, formatPhone); Assert.AreEqual("(111) 222-3333", rows[0]["phone"]); }
public void Join() { var input = new RowsBuilder().Row("x", "X").Field("y", "Y").ToOperation(); var parameters = new ParametersBuilder().Parameters("x", "y").ToParameters(); var join = new JoinTransformOperation("o1", "|", parameters); var output = TestOperation(input, join); Assert.AreEqual("X|Y", output[0]["o1"]); }
public void Insert() { var input = new RowsBuilder().Row("f1", "Insertere").ToOperation(); var insert = new InsertOperation("f1", "o1", 6, " H", null); var output = TestOperation(input, insert); Assert.AreEqual("Insert Here", output[0]["o1"]); }
public void CSharpInProcess() { var script = Path.GetTempFileName(); File.WriteAllText(script, @" public static class F { public static int MinuteDiff(string orderStatus, DateTime start, DateTime end) { if (orderStatus != ""Completed"" && orderStatus != ""Problematic"") return 0; var answer = Convert.ToInt32(Math.Round(end.Subtract(start).TotalMinutes, 0)); return answer > 60 ? 60 : answer; } } "); var input = new RowsBuilder() .Row("OrderStatus", "Completed") .Field("StartDate", DateTime.Now.AddMinutes(-30.0)) .Field("EndDate", DateTime.Now) .Row("OrderStatus", "Problematic") .Field("StartDate", DateTime.Now.AddMinutes(-29.0)) .Field("EndDate", DateTime.Now) .Row("OrderStatus", "Problematic") .Field("StartDate", DateTime.Now.AddMinutes(-78.0)) .Field("EndDate", DateTime.Now) .Row("OrderStatus", "x") .Field("StartDate", DateTime.Now.AddMinutes(-20.0)) .Field("EndDate", DateTime.Now) .ToOperation(); var config = new ProcessBuilder("test") .Connection("input").Provider("internal") .Connection("output").Provider("internal") .Script("script", script) .Entity("test") .Field("OrderStatus") .Field("StartDate").DateTime() .Field("EndDate").DateTime() .CalculatedField("MinuteDiff").Int() .Transform("csharp") .ExternalScript("script") .Script("return F.MinuteDiff(OrderStatus,StartDate,EndDate);") .Parameter("OrderStatus") .Parameter("StartDate") .Parameter("EndDate") .Process(); config.Entities[0].InputOperation = input; var process = ProcessFactory.CreateSingle(config, new TestLogger()); process.PipelineThreading = PipelineThreading.SingleThreaded; var output = process.Execute().ToArray(); Assert.AreEqual(30, output[0]["MinuteDiff"]); Assert.AreEqual(29, output[1]["MinuteDiff"]); Assert.AreEqual(60, output[2]["MinuteDiff"]); Assert.AreEqual(0, output[3]["MinuteDiff"]); }
public RowBuilder(ref RowsBuilder rowsBuilder, ref Row row) { _rowsBuilder = rowsBuilder; _row = row; }
public void If() { var input = new RowsBuilder() .Row("x", 5).Field("y", 7).Field("z", 10).Field("out", 0) .Row("x", 5).Field("y", 5).Field("z", 11).Field("out", 0).ToOperation(); var parameters = new ParametersBuilder() .Parameter("x").Type("int32") .Parameter("y").Type("int32") .Parameter("z").Type("int32") .Parameter("v", "1").Name("v").Type("int32") .ToParameters(); var ifTransform = new IfOperation(parameters["x"], ComparisonOperator.Equal, parameters["y"], parameters["z"], parameters["v"], "out", "int32"); var output = TestOperation(input, ifTransform); Assert.AreEqual(1, output[0]["out"]); Assert.AreEqual(11, output[1]["out"]); }
public void JavascriptWithDates() { const string minuteDiff = @" function minuteDiff(orderStatus, start, end) { if (orderStatus == 'Completed' || orderStatus == 'Problematic') { var answer = 0; if (start.getFullYear() != 9999 && end.getFullYear() != 9999) { var ms = Math.abs(start - end); answer = Math.round((ms / 1000) / 60); } return answer > 60 ? 60 : answer; } else { return 0; } }"; var input = new RowsBuilder() .Row("OrderStatus", "Completed") .Field("StartDate", DateTime.Now.AddMinutes(-30.0)) .Field("EndDate", DateTime.Now) .Row("OrderStatus", "Problematic") .Field("StartDate", DateTime.Now.AddMinutes(-29.0)) .Field("EndDate", DateTime.Now) .Row("OrderStatus", "Problematic") .Field("StartDate", DateTime.Now.AddMinutes(-78.0)) .Field("EndDate", DateTime.Now) .Row("OrderStatus", "x") .Field("StartDate", DateTime.Now.AddMinutes(-20.0)) .Field("EndDate", DateTime.Now) .ToOperation(); var scripts = new Dictionary<string, Script>() { { "script", new Script("script", minuteDiff, "") } }; var parameters = new ParametersBuilder().Parameters("OrderStatus", "StartDate", "EndDate").ToParameters(); var javascript = new JavascriptOperation("o1", "minuteDiff(OrderStatus,StartDate,EndDate);", scripts, parameters, new TestLogger()); var output = TestOperation(input, javascript); Assert.AreEqual(30, output[0]["o1"]); Assert.AreEqual(29, output[1]["o1"]); Assert.AreEqual(60, output[2]["o1"]); Assert.AreEqual(0, output[3]["o1"]); }
public void IfProblem() { const string xml = @" <transformalize> <processes> <add name='test'> <connections> <add name='input' provider='internal' /> <add name='output' provider='internal' /> </connections> <entities> <add name='test' detect-changes='false'> <fields> <add name='email' primary-key='true' default='none' default-blank='true' /> </fields> <calculated-fields> <add name='has_email' type='bool' t='if(email,none,false,true)' /> <add name='another' type='bool'> <transforms> <add method='if' left='email' right='none' then='false' else='true' /> </transforms> </add> </calculated-fields> </add> </entities> </add> </processes> </transformalize> "; var process = ProcessFactory.Create(xml.Replace('\'', '"'), new TestLogger()); var input = new RowsBuilder() .Row("email", "").Field("has_email", null, "bool") .Row("email", "*****@*****.**").Field("has_email", null, "bool") .ToOperation(); process[0].Entities[0].InputOperation = input; var output = process[0].Execute().ToArray(); Assert.AreEqual(false, output[0]["has_email"]); Assert.AreEqual(false, output[0]["another"]); Assert.AreEqual(true, output[1]["has_email"]); Assert.AreEqual(true, output[1]["another"]); }
public void Javascript() { const int expected = 12; var input = new RowsBuilder().Row("x", 3).Field("y", 4).ToOperation(); var scripts = new Dictionary<string, Script>() { { "script", new Script("script", "function multiply(x,y) { return x*y; }", "") } }; var parameters = new ParametersBuilder().Parameters("x", "y").ToParameters(); var javascript = new JavascriptOperation("o1", "multiply(x,y)", scripts, parameters, new TestLogger()); var output = TestOperation(input, javascript); Assert.AreEqual(expected, output[0]["o1"]); }
public void AnyValueDifferentTypes() { var input = new RowsBuilder() .Row("x", "1").Field("y", "3").Field("any_1", null).Field("any_2", null) .Row("x", "2").Field("y", "4").Field("any_1", null).Field("any_2", null) .ToOperation(); var parameters = new ParametersBuilder() .Parameter("x") .Parameter("y") .ToParameters(); var any1 = new AnyOperation(new Parameter("1", 1), "any_1", ComparisonOperator.Equal, parameters, false); var any2 = new AnyOperation(new Parameter("2", 2), "any_2", ComparisonOperator.Equal, parameters, false); var output = TestOperation(input, any1, any2); Assert.AreEqual(false, output[0]["any_1"]); Assert.AreEqual(false, output[0]["any_2"]); Assert.AreEqual(false, output[1]["any_1"]); Assert.AreEqual(false, output[1]["any_2"]); }
public void JsonWithJavascript() { var input = new RowsBuilder() .Row("x", "[{\"value\":false},{\"value\":true}]") .ToOperation(); var parameters = new ParametersBuilder() .Parameter("x") .ToParameters(); var js = new JavascriptOperation("out", @" JSON.parse(x)[1].value", new Dictionary<string, Script>(), parameters, new TestLogger() ); var output = TestOperation(input, js); Assert.AreEqual(true, output[0]["out"]); }
public void InsertInterval() { var input = new RowsBuilder().Row("date", "140607").ToOperation(); var insertInterval = new InsertIntervalOperation("date", "date", 2, "-"); var insert = new InsertOperation("date", "date", 0, "20", null); var output = TestOperation(input, insertInterval, insert); Assert.AreEqual("2014-06-07", output[0]["date"]); }
public void InsertAnotherField() { var input = new RowsBuilder() .Row("f1", "Insertere").Field("f2", " H") .ToOperation(); var insert = new InsertOperation("f1", "o1", 6, string.Empty, new Parameter("f2", null)); var output = TestOperation(input, insert); Assert.AreEqual("Insert Here", output[0]["o1"]); }
public void XPathByAttributeValue() { var input = new RowsBuilder().Row("xml", "<items><item id=\"1\">one</item><item id=\"2\">two</item><item id=\"3\">three</item></items>").ToOperation(); var transform = new XPathOperation("xml", "value", "string", "items/item[@id = \"2\"]"); var output = TestOperation(input, transform); Assert.AreEqual("two", output[0]["value"]); }
public void JavascriptInProcess() { var script = Path.GetTempFileName(); File.WriteAllText(script, @" function minuteDiff(orderStatus, start, end) { if (orderStatus == 'Completed' || orderStatus == 'Problematic') { var answer = 0; if (start.getFullYear() != 9999 && end.getFullYear() != 9999) { var ms = Math.abs(start - end); answer = Math.round((ms / 1000) / 60); } return answer > 60 ? 60 : answer; } else { return 0; } }"); var input = new RowsBuilder() .Row("OrderStatus", "Completed") .Field("StartDate", DateTime.Now.AddMinutes(-30.0)) .Field("EndDate", DateTime.Now) .Row("OrderStatus", "Problematic") .Field("StartDate", DateTime.Now.AddMinutes(-29.0)) .Field("EndDate", DateTime.Now) .Row("OrderStatus", "Problematic") .Field("StartDate", DateTime.Now.AddMinutes(-78.0)) .Field("EndDate", DateTime.Now) .Row("OrderStatus", "x") .Field("StartDate", DateTime.Now.AddMinutes(-20.0)) .Field("EndDate", DateTime.Now) .ToOperation(); var config = new ProcessBuilder("test") .Connection("input").Provider("internal") .Connection("output").Provider("internal") .Script("script", script) .Entity("test") .Field("OrderStatus") .Field("StartDate").DateTime() .Field("EndDate").DateTime() .CalculatedField("MinuteDiff").Int() .Transform("javascript") .ExternalScript("script") .Script("minuteDiff(OrderStatus,StartDate,EndDate)") .Parameter("OrderStatus") .Parameter("StartDate") .Parameter("EndDate") .Process(); config.Entities[0].InputOperation = input; var process = ProcessFactory.CreateSingle(config, new TestLogger()); var output = process.Execute().ToArray(); Assert.AreEqual(30, output[0]["MinuteDiff"]); Assert.AreEqual(29, output[1]["MinuteDiff"]); Assert.AreEqual(60, output[2]["MinuteDiff"]); Assert.AreEqual(0, output[3]["MinuteDiff"]); }
public void XPathByElementValue() { var input = new RowsBuilder().Row("xml", "<items><item id=\"1\">one</item><item id=\"2\">two</item><item id=\"3\">three</item></items>").ToOperation(); var transform = new XPathOperation("xml", "value", "int", "items/item[. = \"one\"]/@id"); var output = TestOperation(input, transform); Assert.AreEqual(1, output[0]["value"]); }
public void CSharpScript() { var input = new RowsBuilder() .Row("first", "dale").Field("last", "newman").Field("full", "") .Row("first", "adam").Field("last", "newman").Field("full", "") .ToOperation(); var parameters = new ParametersBuilder().Parameters("first", "last").ToParameters(); var scripts = new Dictionary<string, Script>(); const string code = @" return first + "" "" + last; "; var cSharp = new CSharpOperation("full", "string", code, scripts, parameters); var output = TestOperation(input, cSharp); Assert.AreEqual("dale newman", output[0]["full"].ToString()); Assert.AreEqual("adam newman", output[1]["full"].ToString()); }
public void IfEmpty() { var input = new RowsBuilder() .Row("x", "x").Field("y", "").Field("out", "") .Row("x", "").Field("y", "y").Field("out", "").ToOperation(); var parameters = new ParametersBuilder() .Parameter("x") .Parameter("y") .Parameter("empty", string.Empty).Name("empty") .ToParameters(); var ifTransform = new IfOperation(parameters["x"], ComparisonOperator.Equal, parameters["empty"], parameters["y"], parameters["x"], "out", "string"); var output = TestOperation(input, ifTransform); Assert.AreEqual("x", output[0]["out"]); Assert.AreEqual("y", output[1]["out"]); }
public void Filter() { const int expected = 1; var input = new RowsBuilder() .Row("x", 3).Field("y", 4) .Row("x", 3).Field("y", 5).ToOperation(); var filter = new FilterOperation("y", "filter", "string", 5, ComparisonOperator.Equal); var output = TestOperation(input, filter); Assert.AreEqual(expected, output.Count); }
public void AnyParameterDifferentTypes() { var input = new RowsBuilder() .Row("x", "1").Field("y", "3").Field("test", "1").Field("any", null) .Row("x", "2").Field("y", "4").Field("test", 5.0).Field("any", null) .ToOperation(); var parameters = new ParametersBuilder() .Parameter("x") .Parameter("y") .ToParameters(); var pIn = new ParametersBuilder() .Parameter("test") .ToParameters(); var any = new AnyOperation(pIn["test"], "any", ComparisonOperator.Equal, parameters, false); var output = TestOperation(input, any); Assert.AreEqual(true, output[0]["any"]); Assert.AreEqual(false, output[1]["any"]); }