// test merging new tally setup added to component one
        // after merge there should be new samplegroups and tally setup in master and component 2
        public void PerformMergeTest_newCountTree2()
        {
            var masterPath = TESTMERGENEWCOUNTS2_MASTER;
            var numComps   = 2;

            var(master, components) = FindFiles(masterPath);
            using (master)
            {
                var commandBuilders    = MergeComponentsPresenter.MakeCommandBuilders(master);
                var commandBuilderDict = commandBuilders.ToDictionary(x => x.ClientTableName);
                var mergeLog           = new TestMergeLogWriter(Output);

                PrepareMergeWorker.DoWork(master, components, commandBuilders, new System.Threading.CancellationToken(), (IProgress <int>)null, TestMergeLogWriter);

                MergeSyncWorker.DoMerge(master, components, commandBuilderDict, new System.Threading.CancellationToken(),
                                        (IProgress <int>)null,
                                        TestMergeLogWriter);

                var comp1 = components.ElementAt(0);
                var comp2 = components.ElementAt(1);

                comp2.Database.From <CountTreeDO>().Where("SampleGroup_CN > 1").Query().ToArray();

                var comp1CtCount  = comp1.Database.ExecuteScalar <int>("SELECT count(*) FROM CountTree;");
                var comp2CtCount  = comp2.Database.ExecuteScalar <int>("SELECT count(*) FROM CountTree;");
                var masterCtCount = master.ExecuteScalar <int>("SELECT count(*) FROM CountTree WHERE Component_CN IS NULL;");

                masterCtCount.Should().Be(comp1CtCount);
                comp2CtCount.Should().Be(comp1CtCount);
            }
        }
        public void PrepareMerge_Test_With_Files(string masterPath, int numComps)
        {
            var(master, components) = FindFiles(masterPath);
            components.Should().HaveCount(numComps);
            var commandBuilders = MergeComponentsPresenter.MakeCommandBuilders(master);

            using (master)
            {
                PrepareMergeWorker.DoWork(
                    master,
                    components,
                    commandBuilders,
                    new System.Threading.CancellationToken(),
                    null,
                    new TestMergeLogWriter(Output));
            }
        }
        public void SyncFieldData_Pull_Tree_Insert()
        {
            var cancelation = new System.Threading.CancellationToken();

            var(master, compDbs, components, commandBuilders) = Setup();

            var comp1   = compDbs.First();
            var newTree = new Tree()
            {
                Stratum_CN     = 1,
                CuttingUnit_CN = 1,
                SampleGroup_CN = 1,
                Tree_GUID      = Guid.NewGuid().ToString().ToUpper(),
                TreeNumber     = 1,
            };

            comp1.Insert(newTree);

            PrepareMergeWorker.DoWork(
                master,
                components,
                commandBuilders.Values,
                cancelation,
                (IProgress <int>)null,
                TestMergeLogWriter);

            MergeSyncWorker.SyncFieldData(
                master,
                components,
                commandBuilders,
                cancelation,
                (IProgress <int>)null,
                TestMergeLogWriter);

            var masterNewTree = master.From <Tree>().Query().First();

            newTree.Tree_CN.Should().Be(masterNewTree.Tree_CN);
            newTree.CuttingUnit_CN.Should().Be(masterNewTree.CuttingUnit_CN);
            newTree.Stratum_CN.Should().Be(masterNewTree.Stratum_CN);
            newTree.SampleGroup_CN.Should().Be(masterNewTree.SampleGroup_CN);
            newTree.Tree_GUID.Should().Be(masterNewTree.Tree_GUID);
        }