public void Complex() { var context = TestExecuter.GetContext(); var builder = SequenceBuilder.Fluent .ReadFrom(TestData.Person(context)) .ExpandFromLookup(new ExpandFromLookupMutator(context) { LookupBuilder = new RowLookupBuilder() { Process = TestData.Country(context), KeyGenerator = row => row.GenerateKey("id"), }, MatchSelector = (row, lookup) => { return(lookup.GetSingleRowByKey(row.GenerateKey("countryId"))); }, NoMatchAction = new NoMatchAction(MatchMode.Custom) { CustomAction = row => { row["countryAbbrev"] = !row.HasValue("countryId") ? "country was null" : "no match found"; } }, MatchCustomAction = (row, match) => row["countryAbbrevFound"] = true, Columns = new() {
public void NoMatchCustom() { var context = TestExecuter.GetContext(); var executedBatchCount = 0; var builder = ProcessBuilder.Fluent .ReadFrom(TestData.Person(context)) .JoinBatched(new BatchedJoinMutator(context) { BatchSize = 4, LookupBuilder = new FilteredRowLookupBuilder() { ProcessCreator = filterRows => { executedBatchCount++; return(TestData.PersonEyeColor(context)); }, KeyGenerator = row => row.GenerateKey("personId"), }, RowKeyGenerator = row => row.GenerateKey("id"), NoMatchAction = new NoMatchAction(MatchMode.Custom) { CustomAction = row => row["eyeColor"] = "not found", }, Columns = new() {
public void MergerTest() { var context = TestExecuter.GetContext(); var merger = new ParallelMerger(context) { ProcessList = new List <IProducer>(), }; for (var i = 0; i < 3; i++) { merger.ProcessList.Add(new CustomMutator(context) { InputProcess = TestData.Person(context), Action = row => { Thread.Sleep(new Random().Next(100)); row["ThreadIndex"] = i; return(true); }, }); } var result = merger.Evaluate().TakeRowsAndReleaseOwnership().ToList(); Assert.AreEqual(21, result.Count); foreach (var p in TestData.Person(context).Evaluate().TakeRowsAndReleaseOwnership()) { Assert.AreEqual(3, result.Count(m => m.GetAs <int>("id") == p.GetAs <int>("id"))); } var exceptions = context.GetExceptions(); Assert.AreEqual(0, exceptions.Count); }
public void ListSheets() { var context = TestExecuter.GetContext(); var reader = GetReader(context, @".\TestData\Test.xlsx"); var builder = SequenceBuilder.Fluent .ReadFrom(reader) .ThrowExceptionOnRowError(); var result = TestExecuter.Execute(builder); Assert.AreEqual(2, result.MutatedRows.Count); Assert.That.ExactMatch(result.MutatedRows, new List <CaseInsensitiveStringKeyDictionary <object> >() { new CaseInsensitiveStringKeyDictionary <object>() { ["Stream"] = @".\TestData\Test.xlsx", ["Index"] = 0, ["Name"] = "MergeAtIndex0", ["Color"] = System.Drawing.Color.FromArgb(0, 0, 0, 0), ["Visible"] = true, ["idx"] = 0 }, new CaseInsensitiveStringKeyDictionary <object>() { ["Stream"] = @".\TestData\Test.xlsx", ["Index"] = 1, ["Name"] = "DateBroken", ["Color"] = System.Drawing.Color.FromArgb(0, 0, 0, 0), ["Visible"] = true, ["idx"] = 1 } }); var exceptions = context.GetExceptions(); Assert.AreEqual(0, exceptions.Count); }
public void NullValuesAreNotStored1() { var context = TestExecuter.GetContext(); context.SetRowType <DictionaryRow>(); var initialValues = new Dictionary <string, object>() { ["id"] = 12, ["name"] = "A", ["age"] = null, }; var row = new TrackedRow(context.CreateRow(null, initialValues)); Assert.AreEqual(2, row.ColumnCount); Assert.IsTrue(row.Values.All(kvp => kvp.Value != null)); row["age"] = 7; Assert.AreEqual(3, row.ColumnCount); Assert.IsTrue(row.Values.All(kvp => kvp.Value != null)); row["name"] = null; Assert.AreEqual(2, row.ColumnCount); Assert.IsTrue(row.Values.All(kvp => kvp.Value != null)); }
public void MergeTestWithRow() { var context = TestExecuter.GetContext(); context.SetRowType <DictionaryRow>(); var row = new TrackedRow(context.CreateRow(null)); row["a"] = 1; row["b"] = "dog"; row["c"] = 7.1d; var newRow = new SlimRow() { ["b"] = "cat", ["c"] = 7.1d, ["d"] = 8m, }; row.MergeWith(newRow.Values); Assert.AreEqual(4, row.ColumnCount); Assert.AreEqual(1, row["a"]); Assert.AreEqual("cat", row["b"]); Assert.AreEqual(7.1d, row["c"]); Assert.AreEqual(8m, row["d"]); }
public void MergeTestWithValues() { var context = TestExecuter.GetContext(); context.SetRowType <DictionaryRow>(); var row = new TrackedRow(context.CreateRow(null)); row["a"] = 1; row["b"] = "dog"; row["c"] = 7.1d; var newValues = new Dictionary <string, object>() { ["b"] = "cat", ["c"] = null, ["d"] = 8m, }; row.MergeWith(newValues); Assert.AreEqual(3, row.ColumnCount); Assert.AreEqual(1, row["a"]); Assert.AreEqual("cat", row["b"]); Assert.IsFalse(row.HasValue("c")); Assert.AreEqual(8m, row["d"]); }
public void DelegateThrowsExceptionThen() { var invocationCount = 0; var context = TestExecuter.GetContext(); var builder = ProcessBuilder.Fluent .ReadFrom(TestData.Person(context)) .CustomCode(new CustomMutator(context) { Action = row => { invocationCount++; var x = row.GetAs <int>("x"); return(true); } }); var result = TestExecuter.Execute(builder); Assert.AreEqual(1, invocationCount); Assert.AreEqual(0, result.MutatedRows.Count); var exceptions = context.GetExceptions(); Assert.AreEqual(1, exceptions.Count); Assert.IsTrue(exceptions[0] is CustomCodeException); }
public void InputAndTwoMutators() { var context = TestExecuter.GetContext(); var builder = new ProcessBuilder() { InputProcess = TestData.Person(context), Mutators = new MutatorList() { new CustomMutator(context) { Action = row => true, }, new CustomMutator(context) { Action = row => true, }, }, }; var process = builder.Build(); Assert.IsNotNull(process); Assert.IsTrue(process is CustomMutator); Assert.IsTrue((process as CustomMutator).InputProcess is CustomMutator); Assert.IsNotNull(((process as CustomMutator).InputProcess as CustomMutator).InputProcess); }
public void IgnoreSelectorForSingleRowGroupsTrue() { var context = TestExecuter.GetContext(); var builder = SequenceBuilder.Fluent .ReadFrom(TestData.Person(context)) .ConvertValue(new InPlaceConvertMutator(context) { Columns = new[] { "age" }, TypeConverter = new DecimalConverter(), }) .ReduceGroupToSingleRow(new ReduceGroupToSingleRowMutator(context) { IgnoreSelectorForSingleRowGroups = true, KeyGenerator = row => row.GenerateKey("name"), Selector = (proc, groupRows) => { return(groupRows .Where(x => x.HasValue("age")) .OrderBy(x => x.GetAs <decimal>("age")) .FirstOrDefault()); }, }); // note: this includes "fake" because Selector is not applied over single-row groups var result = TestExecuter.Execute(builder); Assert.AreEqual(6, result.MutatedRows.Count); Assert.That.ExactMatch(result.MutatedRows, new List <CaseInsensitiveStringKeyDictionary <object> >() { new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 5, ["name"] = "A", ["age"] = 11m, ["height"] = 140, ["birthDate"] = new DateTime(2013, 5, 15, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2018, 1, 1, 0, 0, 0, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 1, ["name"] = "B", ["age"] = 8m, ["height"] = 190, ["countryId"] = 1, ["birthDate"] = new DateTime(2011, 2, 1, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2015, 12, 19, 13, 2, 0, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 2, ["name"] = "C", ["age"] = 27m, ["height"] = 170, ["eyeColor"] = "green", ["countryId"] = 2, ["birthDate"] = new DateTime(2014, 1, 21, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2015, 11, 21, 17, 11, 58, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 3, ["name"] = "D", ["age"] = 39m, ["height"] = 160, ["eyeColor"] = "fake", ["birthDate"] = "2018.07.11", ["lastChangedTime"] = new DateTime(2017, 8, 1, 4, 9, 1, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 4, ["name"] = "E", ["age"] = -3m, ["height"] = 160, ["countryId"] = 1, ["lastChangedTime"] = new DateTime(2019, 1, 1, 23, 59, 59, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 6, ["name"] = "fake", ["height"] = 140, ["countryId"] = 5, ["birthDate"] = new DateTime(2018, 1, 9, 0, 0, 0, 0) } }); var exceptions = context.GetExceptions(); Assert.AreEqual(0, exceptions.Count); }
public void IdentityColumnIsString() { var context = TestExecuter.GetContext(); var builder = new ProcessBuilder() { InputProcess = TestData.RoleHierarchy(context), Mutators = new MutatorList() { new InPlaceConvertMutator(context) { Columns = new[] { "id" }, TypeConverter = new StringConverter(), }, new ResolveHierarchyMutator(context) { IdentityColumn = "id", NewColumnWithParentId = "parentId", NewColumnWithLevel = "level", LevelColumns = new[] { "level1", "level2", "level3" }, RemoveLevelColumns = false, }, }, }; var result = TestExecuter.Execute(builder); Assert.AreEqual(6, result.MutatedRows.Count); Assert.That.ExactMatch(result.MutatedRows, new List <CaseInsensitiveStringKeyDictionary <object> >() { new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = "0", ["code"] = "A", ["level1"] = "AAA", ["level"] = 0 }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = "1", ["code"] = "B", ["level2"] = "BBB", ["parentId"] = "0", ["level"] = 1 }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = "2", ["code"] = "C", ["level3"] = "CCC", ["parentId"] = "1", ["level"] = 2 }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = "3", ["code"] = "D", ["level3"] = "DDD", ["parentId"] = "1", ["level"] = 2 }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = "4", ["code"] = "E", ["level2"] = "EEE", ["parentId"] = "0", ["level"] = 1 }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = "5", ["code"] = "F", ["level2"] = "FFF", ["parentId"] = "0", ["level"] = 1 } }); var exceptions = context.GetExceptions(); Assert.AreEqual(0, exceptions.Count); }
public void FixColumnsIgnoreNull() { var context = TestExecuter.GetContext(); var builder = SequenceBuilder.Fluent .ReadFrom(TestData.PersonalAssetsPivot(context)) .Unpivot(new UnpivotMutator(context) { FixColumns = new() {
public void CopyOnlySpecifiedColumnsOff() { var context = TestExecuter.GetContext(); var builder = SequenceBuilder.Fluent .ImportEnumerable(new EnumerableImporter(context) { InputGenerator = caller => TestData.Person(context).TakeRowsAndReleaseOwnership(caller), Columns = new() {
public void WrapIsWorking() { var context = TestExecuter.GetContext(); var builder = ProcessBuilder.Fluent .ReadFromExcel(new EpPlusExcelReader(context) { FileName = @".\TestData\Test.xlsx", SheetName = "DateBroken", Columns = new() {
public void CopyOnlySpecifiedColumnsOff() { var context = TestExecuter.GetContext(); var builder = new ProcessBuilder() { InputProcess = new EnumerableImporter(context) { InputGenerator = caller => TestData.Person(context).Evaluate(caller).TakeRowsAndReleaseOwnership(), Columns = new() {
public void IsNullOrEmptyTrue1() { var context = TestExecuter.GetContext(); context.SetRowType <DictionaryRow>(); var row = new TrackedRow(context.CreateRow(null)); Assert.AreEqual(true, row.IsNullOrEmpty()); }
public void NewNameColumn() { var context = TestExecuter.GetContext(); var builder = new ProcessBuilder() { InputProcess = TestData.RoleHierarchy(context), Mutators = new MutatorList() { new ResolveHierarchyMutator(context) { IdentityColumn = "id", NewColumnWithParentId = "parentId", NewColumnWithLevel = "level", NewColumnWithName = "name", LevelColumns = new[] { "level1", "level2", "level3" }, RemoveLevelColumns = true, }, }, }; var result = TestExecuter.Execute(builder); Assert.AreEqual(6, result.MutatedRows.Count); Assert.That.ExactMatch(result.MutatedRows, new List <CaseInsensitiveStringKeyDictionary <object> >() { new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 0, ["code"] = "A", ["level"] = 0, ["name"] = "AAA" }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 1, ["code"] = "B", ["parentId"] = 0, ["level"] = 1, ["name"] = "BBB" }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 2, ["code"] = "C", ["parentId"] = 1, ["level"] = 2, ["name"] = "CCC" }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 3, ["code"] = "D", ["parentId"] = 1, ["level"] = 2, ["name"] = "DDD" }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 4, ["code"] = "E", ["parentId"] = 0, ["level"] = 1, ["name"] = "EEE" }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 5, ["code"] = "F", ["parentId"] = 0, ["level"] = 1, ["name"] = "FFF" } }); var exceptions = context.GetExceptions(); Assert.AreEqual(0, exceptions.Count); }
public void IsNullOrEmptyTrue2() { var context = TestExecuter.GetContext(); context.SetRowType <Row>(); var row = context.CreateRow(null); row["a"] = ""; Assert.AreEqual(true, row.IsNullOrEmpty()); }
public void IsNullOrEmptyFalse() { var context = TestExecuter.GetContext(); context.SetRowType <DictionaryRow>(); var row = context.CreateRow(null); row.SetValue("a", 5); Assert.AreEqual(false, row.IsNullOrEmpty()); }
public void IsNullOrEmptyFalse() { var context = TestExecuter.GetContext(); context.SetRowType <Row>(); var row = new TrackedRow(context.CreateRow(null)); row["a"] = 5; Assert.AreEqual(false, row.IsNullOrEmpty()); }
public void InputOnly() { var context = TestExecuter.GetContext(); var builder = SequenceBuilder.Fluent .ReadFrom(TestData.Person(context)); var process = builder.Build(); Assert.IsNotNull(process); Assert.IsTrue(process is IRowSource); }
public void FixColumnsIgnoreNull() { var context = TestExecuter.GetContext(); var builder = new ProcessBuilder() { InputProcess = TestData.PersonalAssetsPivot(context), Mutators = new MutatorList() { new UnpivotMutator(context) { FixColumns = new() {
public void IfDelegate() { var context = TestExecuter.GetContext(); var builder = ProcessBuilder.Fluent .ReadFrom(TestData.Person(context)) .CustomCode(new CustomMutator(context) { RowFilter = row => row.GetAs <int>("id") > 2, Action = row => { row["test"] = "test"; return(true); } }); var result = TestExecuter.Execute(builder); Assert.AreEqual(7, result.MutatedRows.Count); Assert.That.ExactMatch(result.MutatedRows, new List <CaseInsensitiveStringKeyDictionary <object> >() { new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 0, ["name"] = "A", ["age"] = 17, ["height"] = 160, ["eyeColor"] = "brown", ["countryId"] = 1, ["birthDate"] = new DateTime(2010, 12, 9, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2015, 12, 19, 12, 0, 1, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 1, ["name"] = "B", ["age"] = 8, ["height"] = 190, ["countryId"] = 1, ["birthDate"] = new DateTime(2011, 2, 1, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2015, 12, 19, 13, 2, 0, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 2, ["name"] = "C", ["age"] = 27, ["height"] = 170, ["eyeColor"] = "green", ["countryId"] = 2, ["birthDate"] = new DateTime(2014, 1, 21, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2015, 11, 21, 17, 11, 58, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 3, ["name"] = "D", ["age"] = 39, ["height"] = 160, ["eyeColor"] = "fake", ["birthDate"] = "2018.07.11", ["lastChangedTime"] = new DateTime(2017, 8, 1, 4, 9, 1, 0), ["test"] = "test" }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 4, ["name"] = "E", ["age"] = -3, ["height"] = 160, ["countryId"] = 1, ["lastChangedTime"] = new DateTime(2019, 1, 1, 23, 59, 59, 0), ["test"] = "test" }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 5, ["name"] = "A", ["age"] = 11, ["height"] = 140, ["birthDate"] = new DateTime(2013, 5, 15, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2018, 1, 1, 0, 0, 0, 0), ["test"] = "test" }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 6, ["name"] = "fake", ["height"] = 140, ["countryId"] = 5, ["birthDate"] = new DateTime(2018, 1, 9, 0, 0, 0, 0), ["test"] = "test" } }); var exceptions = context.GetExceptions(); Assert.AreEqual(0, exceptions.Count); }
public void CompositeKey() { var context = TestExecuter.GetContext(); var builder = new ProcessBuilder() { InputProcess = TestData.Person(context), Mutators = new MutatorList() { new RemoveDuplicateRowsMutator(context) { KeyGenerator = row => row.GenerateKey("id", "name"), }, }, }; var result = TestExecuter.Execute(builder); Assert.AreEqual(7, result.MutatedRows.Count); Assert.That.ExactMatch(result.MutatedRows, new List <CaseInsensitiveStringKeyDictionary <object> >() { new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 0, ["name"] = "A", ["age"] = 17, ["height"] = 160, ["eyeColor"] = "brown", ["countryId"] = 1, ["birthDate"] = new DateTime(2010, 12, 9, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2015, 12, 19, 12, 0, 1, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 1, ["name"] = "B", ["age"] = 8, ["height"] = 190, ["countryId"] = 1, ["birthDate"] = new DateTime(2011, 2, 1, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2015, 12, 19, 13, 2, 0, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 2, ["name"] = "C", ["age"] = 27, ["height"] = 170, ["eyeColor"] = "green", ["countryId"] = 2, ["birthDate"] = new DateTime(2014, 1, 21, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2015, 11, 21, 17, 11, 58, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 3, ["name"] = "D", ["age"] = 39, ["height"] = 160, ["eyeColor"] = "fake", ["birthDate"] = "2018.07.11", ["lastChangedTime"] = new DateTime(2017, 8, 1, 4, 9, 1, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 4, ["name"] = "E", ["age"] = -3, ["height"] = 160, ["countryId"] = 1, ["lastChangedTime"] = new DateTime(2019, 1, 1, 23, 59, 59, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 5, ["name"] = "A", ["age"] = 11, ["height"] = 140, ["birthDate"] = new DateTime(2013, 5, 15, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2018, 1, 1, 0, 0, 0, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 6, ["name"] = "fake", ["height"] = 140, ["countryId"] = 5, ["birthDate"] = new DateTime(2018, 1, 9, 0, 0, 0, 0) } }); var exceptions = context.GetExceptions(); Assert.AreEqual(0, exceptions.Count); }
public void MultipleNullColumnsResultsNonNullKey() { var context = TestExecuter.GetContext(); context.SetRowType <DictionaryRow>(); var initialValues = new Dictionary <string, object>(); var row = new TrackedRow(context.CreateRow(null, initialValues)); var result = row.GenerateKey("id", "name"); Assert.IsNotNull(result); }
public void WrapIsWorking() { var context = TestExecuter.GetContext(); var builder = SequenceBuilder.Fluent .ReadFromExcel(new EpPlusExcelReader(context) { StreamProvider = new LocalFileStreamProvider() { FileName = @".\TestData\Test.xlsx", }, SheetName = "DateBroken", Columns = new() {
public void SingleNullColumnResultsNullKey() { var context = TestExecuter.GetContext(); context.SetRowType <DictionaryRow>(); var initialValues = new Dictionary <string, object>(); var row = context.CreateRow(null, initialValues); var result = row.GenerateKey("name"); Assert.IsNull(result); }
public void CaseInsensitive() { var context = TestExecuter.GetContext(); var builder = ProcessBuilder.Fluent .ReadFrom(TestData.Person(context)) .ReplaceString(new ReplaceStringMutator(context) { ColumnName = "eyeColor", OldString = "ROW", NewString = "apple", StringComparison = StringComparison.InvariantCultureIgnoreCase, }); var result = TestExecuter.Execute(builder); Assert.AreEqual(7, result.MutatedRows.Count); Assert.That.ExactMatch(result.MutatedRows, new List <CaseInsensitiveStringKeyDictionary <object> >() { new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 0, ["name"] = "A", ["age"] = 17, ["height"] = 160, ["eyeColor"] = "bapplen", ["countryId"] = 1, ["birthDate"] = new DateTime(2010, 12, 9, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2015, 12, 19, 12, 0, 1, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 1, ["name"] = "B", ["age"] = 8, ["height"] = 190, ["countryId"] = 1, ["birthDate"] = new DateTime(2011, 2, 1, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2015, 12, 19, 13, 2, 0, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 2, ["name"] = "C", ["age"] = 27, ["height"] = 170, ["eyeColor"] = "green", ["countryId"] = 2, ["birthDate"] = new DateTime(2014, 1, 21, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2015, 11, 21, 17, 11, 58, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 3, ["name"] = "D", ["age"] = 39, ["height"] = 160, ["eyeColor"] = "fake", ["birthDate"] = "2018.07.11", ["lastChangedTime"] = new DateTime(2017, 8, 1, 4, 9, 1, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 4, ["name"] = "E", ["age"] = -3, ["height"] = 160, ["countryId"] = 1, ["lastChangedTime"] = new DateTime(2019, 1, 1, 23, 59, 59, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 5, ["name"] = "A", ["age"] = 11, ["height"] = 140, ["birthDate"] = new DateTime(2013, 5, 15, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2018, 1, 1, 0, 0, 0, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 6, ["name"] = "fake", ["height"] = 140, ["countryId"] = 5, ["birthDate"] = new DateTime(2018, 1, 9, 0, 0, 0, 0) } }); var exceptions = context.GetExceptions(); Assert.AreEqual(0, exceptions.Count); }
public void RemoveWhenNoMatch() { var context = TestExecuter.GetContext(); var builder = ProcessBuilder.Fluent .ReadFrom(TestData.Person(context)) .CompareWithRowBatched(new BatchedCompareWithRowMutator(context) { LookupBuilder = new FilteredRowLookupBuilder() { ProcessCreator = rows => TestData.PersonChanged(context), KeyGenerator = row => row.GenerateKey("id"), }, RowKeyGenerator = row => row.GenerateKey("id"), EqualityComparer = new ColumnBasedRowEqualityComparer(), NoMatchAction = new NoMatchAction(MatchMode.Remove), }); var result = TestExecuter.Execute(builder); Assert.AreEqual(6, result.MutatedRows.Count); Assert.That.ExactMatch(result.MutatedRows, new List <CaseInsensitiveStringKeyDictionary <object> >() { new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 0, ["name"] = "A", ["age"] = 17, ["height"] = 160, ["eyeColor"] = "brown", ["countryId"] = 1, ["birthDate"] = new DateTime(2010, 12, 9, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2015, 12, 19, 12, 0, 1, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 1, ["name"] = "B", ["age"] = 8, ["height"] = 190, ["countryId"] = 1, ["birthDate"] = new DateTime(2011, 2, 1, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2015, 12, 19, 13, 2, 0, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 2, ["name"] = "C", ["age"] = 27, ["height"] = 170, ["eyeColor"] = "green", ["countryId"] = 2, ["birthDate"] = new DateTime(2014, 1, 21, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2015, 11, 21, 17, 11, 58, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 4, ["name"] = "E", ["age"] = -3, ["height"] = 160, ["countryId"] = 1, ["lastChangedTime"] = new DateTime(2019, 1, 1, 23, 59, 59, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 5, ["name"] = "A", ["age"] = 11, ["height"] = 140, ["birthDate"] = new DateTime(2013, 5, 15, 0, 0, 0, 0), ["lastChangedTime"] = new DateTime(2018, 1, 1, 0, 0, 0, 0) }, new CaseInsensitiveStringKeyDictionary <object>() { ["id"] = 6, ["name"] = "fake", ["height"] = 140, ["countryId"] = 5, ["birthDate"] = new DateTime(2018, 1, 9, 0, 0, 0, 0) } }); var exceptions = context.GetExceptions(); Assert.AreEqual(0, exceptions.Count); }
public void InputOnly() { var context = TestExecuter.GetContext(); var builder = new ProcessBuilder() { InputProcess = TestData.Person(context), Mutators = new MutatorList(), }; var process = builder.Build(); Assert.IsNotNull(process); Assert.IsTrue(process is AbstractRowSource); }