예제 #1
0
 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()
         {
예제 #3
0
        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);
        }
예제 #4
0
    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);
    }
예제 #5
0
        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));
        }
예제 #6
0
        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"]);
        }
예제 #7
0
        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"]);
        }
예제 #8
0
        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);
        }
예제 #9
0
        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);
        }
예제 #10
0
    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);
        }
예제 #12
0
 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()
         {
예제 #15
0
 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()
             {
예제 #16
0
        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);
        }
예제 #18
0
    public void IsNullOrEmptyTrue2()
    {
        var context = TestExecuter.GetContext();

        context.SetRowType <Row>();

        var row = context.CreateRow(null);

        row["a"] = "";
        Assert.AreEqual(true, row.IsNullOrEmpty());
    }
예제 #19
0
        public void IsNullOrEmptyFalse()
        {
            var context = TestExecuter.GetContext();

            context.SetRowType <DictionaryRow>();

            var row = context.CreateRow(null);

            row.SetValue("a", 5);
            Assert.AreEqual(false, row.IsNullOrEmpty());
        }
예제 #20
0
    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());
    }
예제 #21
0
    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);
    }
예제 #22
0
 public void FixColumnsIgnoreNull()
 {
     var context = TestExecuter.GetContext();
     var builder = new ProcessBuilder()
     {
         InputProcess = TestData.PersonalAssetsPivot(context),
         Mutators     = new MutatorList()
         {
             new UnpivotMutator(context)
             {
                 FixColumns = new()
                 {
예제 #23
0
        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);
        }
예제 #25
0
        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);
        }
예제 #26
0
 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()
         {
예제 #27
0
        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);
        }
예제 #29
0
        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);
        }
예제 #30
0
        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);
        }