Example #1
0
        public void DirectMigrationTest()
        {
            ConsoleLogger.LogLevel = 5;

            var orgService = ConnectionHelper.GetOrganizationalServiceSource();
            var repo       = new EntityRepository(orgService, new ServiceRetryExecutor());

            List <string> fetchXMLQueries = new List <string>
            {
                "<fetch><entity name=\"contact\" ><attribute name=\"ownerid\" /><attribute name=\"firstname\" /></entity></fetch>"
            };

            var readerConfig = new CrmStoreReaderConfig(fetchXMLQueries)
            {
                BatchSize = 2,
                PageSize  = 2,
                TopCount  = 2,
            };

            var writerConfig = new CrmStoreWriterConfig
            {
                SaveBatchSize = 200,
            };


            var reader = new DataCrmStoreReader(logger, repo, readerConfig);
            var writer = new DataCrmStoreWriter(logger, repo, writerConfig);

            var migrator           = new GenericDataMigrator <Entity, EntityWrapper>(logger, reader, writer);
            var obfuscateProcessor = new ObfuscateFieldsProcessor(repo.GetEntityMetadataCache, GetImporterConfig().FieldsToObfuscate);

            migrator.AddProcessor(obfuscateProcessor);

            migrator.MigrateData();
        }
        public void SaveBatchDataToStoreOperationTypeFailed()
        {
            var accountName  = "account";
            int savePageSize = 1;

            var testManyToMany = new EntityWrapper(new Entity("accountcontact", Guid.NewGuid()), true)
            {
                OperationType   = OperationType.Failed,
                OperationResult = "Failed"
            };

            var testAccount = new EntityWrapper(new Entity(accountName, Guid.NewGuid()), true)
            {
                OperationType   = OperationType.Failed,
                OperationResult = "Failed"
            };

            var entityList = new List <EntityWrapper>
            {
                testAccount,
                testManyToMany
            };

            var noUpsertEntities = new List <string>();
            var noUpdateEntities = new List <string>();

            systemUnderTest = new DataCrmStoreWriter(MockLogger.Object, MockEntityRepo.Object, savePageSize, noUpsertEntities, noUpdateEntities);

            FluentActions.Invoking(() => systemUnderTest.SaveBatchDataToStore(entityList))
            .Should()
            .NotThrow();
        }
        public void SaveBatchDataToStoreUpdate()
        {
            var           accountName      = "account";
            int           savePageSize     = 3;
            List <string> noUpsertEntities = null;
            List <string> noUpdateEntities = null;

            var testAccount = new EntityWrapper(new Entity(accountName, Guid.NewGuid()));

            testAccount.OriginalEntity.Attributes["ownerid"] = Guid.NewGuid();
            testAccount.OperationType = OperationType.Update;

            var entityList = new List <EntityWrapper>
            {
                new EntityWrapper(new Entity(accountName, Guid.NewGuid())),
                new EntityWrapper(new Entity(accountName, Guid.NewGuid())),
                testAccount
            };

            systemUnderTest = new DataCrmStoreWriter(MockLogger.Object, MockEntityRepo.Object, savePageSize, noUpsertEntities, noUpdateEntities);

            FluentActions.Invoking(() => systemUnderTest.SaveBatchDataToStore(entityList))
            .Should()
            .NotThrow();
        }
        public void Initialize()
        {
            InitializeProperties();

            mockStoreReader             = new Mock <IDataStoreReader <Entity, EntityWrapper> >();
            storeWriter                 = new DataCrmStoreWriter(MockLogger.Object, MockEntityRepo.Object);
            objectTypeCodeMappingConfig = new ObjectTypeCodeMappingConfiguration();
        }
Example #5
0
 public TestCrmGenericImporter(
     ILogger logger,
     IDataStoreReader <Entity, EntityWrapper> storeReader,
     DataCrmStoreWriter storeWriter,
     ICrmGenericImporterConfig config)
     : base(logger, storeReader, storeWriter, config)
 {
 }
        public void Setup()
        {
            InitializeProperties();

            dataCrmStoreReader = new DataCrmStoreReader(MockLogger.Object, MockEntityRepo.Object, 500, 500, 1000, true, new List <string>(), EmptyFieldsToObfuscate);

            dataCrmStoreWriter = new DataCrmStoreWriter(MockLogger.Object, MockEntityRepo.Object, 500, new List <string>(), new List <string>());
        }
        public void CrmFileDataImporterConstructor2()
        {
            var dataFileStoreReader = new DataFileStoreReaderCsv(MockLogger.Object, "filePrefix", "TestData", new CrmSchemaConfiguration());
            var dataCrmStoreWriter  = new DataCrmStoreWriter(MockLogger.Object, MockEntityRepo.Object);

            FluentActions.Invoking(() => new CrmFileDataImporterCsv(MockLogger.Object, dataFileStoreReader, dataCrmStoreWriter, mockCrmGenericImporterConfig.Object, CancellationToken.None))
            .Should()
            .NotThrow();
        }
        public void CrmFileDataImporterConstructor1()
        {
            var dataFileStoreReader = new DataFileStoreReader(MockLogger.Object, "Import", "TestData");
            var dataCrmStoreWriter  = new DataCrmStoreWriter(MockLogger.Object, MockEntityRepo.Object);

            FluentActions.Invoking(() => new CrmFileDataImporter(MockLogger.Object, dataFileStoreReader, dataCrmStoreWriter, mockCrmGenericImporterConfig.Object))
            .Should()
            .NotThrow();
        }
        public void Reset()
        {
            int           savePageSize     = 500;
            List <string> noUpsertEntities = null;
            List <string> noUpdateEntities = null;

            systemUnderTest = new DataCrmStoreWriter(MockLogger.Object, MockEntityRepo.Object, savePageSize, noUpsertEntities, noUpdateEntities);

            FluentActions.Invoking(() => systemUnderTest.Reset())
            .Should()
            .NotThrow();
        }
        public void SaveBatchDataToStore()
        {
            var orgService = ConnectionHelper.GetOrganizationalServiceTarget();
            var entRepo    = new EntityRepository(orgService, retryExecutor);

            DataCrmStoreWriter crmStore = new DataCrmStoreWriter(new ConsoleLogger(), entRepo);

            List <EntityWrapper> toCreate = EntityMockHelper.EntitiesToCreate.Select(p => new EntityWrapper(p)).ToList();

            FluentActions.Invoking(() => crmStore.SaveBatchDataToStore(toCreate))
            .Should()
            .NotThrow();
        }
Example #11
0
        public void DirectMigrationTest()
        {
            ConsoleLogger.LogLevel = 5;

            var orgService = ConnectionHelper.GetOrganizationSprintAutoTest();
            var repo       = new EntityRepository(orgService, new ServiceRetryExecutor());

            List <string> fetchXMLQueries = new List <string>
            {
                "<fetch><entity name=\"contact\" ><attribute name=\"ownerid\" /><filter>" +
                $"<condition attribute=\"ownerid\" operator=\"eq\" value=\"{sourceUserId}\" />" +
                "</filter></entity></fetch>"
            };

            var readerConfig = new CrmStoreReaderConfig(fetchXMLQueries)
            {
                BatchSize = 200,
                PageSize  = 200,
                TopCount  = 200
            };

            var writerConfig = new CrmStoreWriterConfig
            {
                SaveBatchSize = 200
            };

            Dictionary <Guid, Guid> contactMappings =
                new Dictionary <Guid, Guid>()
            {
                { sourceUserId, targetGuidId }
            };

            MappingConfiguration mappingConfig = new MappingConfiguration();

            mappingConfig.Mappings.Add("systemuser", contactMappings);

            var reader = new DataCrmStoreReader(logger, repo, readerConfig);
            var writer = new DataCrmStoreWriter(logger, repo, writerConfig);

            var migrator         = new GenericDataMigrator <Entity, EntityWrapper>(logger, reader, writer);
            var mappingProcessor = new MapEntityProcessor(mappingConfig, logger, repo);

            migrator.AddProcessor(mappingProcessor);

            FluentActions.Invoking(() => migrator.MigrateData())
            .Should()
            .NotThrow();
        }
        public void GetStartingPassNumberWithPassZeroEntities()
        {
            DataCrmStoreWriter dsw = new DataCrmStoreWriter(MockLogger.Object, MockEntityRepo.Object, 200, null);
            Mock <IDataStoreReader <Entity, EntityWrapper> > storeReader = new Mock <IDataStoreReader <Entity, EntityWrapper> >();
            Mock <ICrmGenericImporterConfig> config = new Mock <ICrmGenericImporterConfig>();

            // setup pass zero entities
            config.SetupGet(c => c.PassOneReferences).Returns(new List <string> {
                "businessunit", "uom", "uomschedule", "queue"
            });

            // execute test
            TestCrmGenericImporter importer = new TestCrmGenericImporter(MockLogger.Object, storeReader.Object, dsw, config.Object);
            var actual = importer.GetStartingPassNumber();

            Assert.AreEqual((int)PassType.CreateRequiredEntity, actual, "Ivalid starting pass number");
        }
        public void ProcessZeroEntitiesFirst()
        {
            MockEntityRepo.SetupGet(p => p.GetEntityMetadataCache).Returns(MockEntityMetadataCache.Object);
            MockEntityMetadataCache.Setup(a => a.GetEntityMetadata(It.IsAny <string>())).Returns(new EntityMetadata());
            MockEntityMetadataCache.Setup(a => a.GetIdAliasKey(It.IsAny <string>())).Returns("testvalue");

            DataCrmStoreWriter dsw = new DataCrmStoreWriter(MockLogger.Object, MockEntityRepo.Object, 200, null);
            var storeReader        = new Mock <IDataStoreReader <Entity, EntityWrapper> >();
            var config             = new Mock <ICrmGenericImporterConfig>();

            // setup pass zero entities
            config.SetupGet(c => c.PassOneReferences).Returns(new List <string> {
                "businessunit", "uom", "uomschedule", "queue"
            });

            // handle data store reader - after rested put entities back into queue
            Queue <List <EntityWrapper> > queue = GetMockedData();

            storeReader.Setup(sr => sr.ReadBatchDataFromStore()).Returns(queue.Dequeue);
            storeReader.Setup(sr => sr.Reset()).Callback(() => GetMockedData().All(data =>
            {
                queue.Enqueue(data);
                return(true);
            })); // reset the queue!

            // record order of saving entites
            List <EntityWrapper> actual = new List <EntityWrapper>();

            MockEntityRepo.Setup(repo => repo.CreateUpdateEntities(It.IsAny <List <EntityWrapper> >())).Callback <List <EntityWrapper> >(list => actual.AddRange(list));

            // execute test
            TestCrmGenericImporter importer = new TestCrmGenericImporter(MockLogger.Object, storeReader.Object, dsw, config.Object);

            importer.MigrateData();

            // 3 batches - 3 calls!
            MockEntityRepo.Verify(repo => repo.CreateUpdateEntities(It.IsAny <List <EntityWrapper> >()), Times.Exactly(3));

            MockEntityMetadataCache.Verify(a => a.GetEntityMetadata(It.IsAny <string>()));
            MockEntityMetadataCache.Verify(a => a.GetIdAliasKey(It.IsAny <string>()));

            // queue should be added first
            Assert.AreEqual("queue", actual[0].OriginalEntity.LogicalName);
            Assert.AreEqual("queue", actual[1].OriginalEntity.LogicalName);
        }
        public void GetStartingPassNumberNoPassZeroEntities()
        {
            Mock <ILogger>           logger     = new Mock <ILogger>();
            Mock <IEntityRepository> entityrepo = new Mock <IEntityRepository>();
            DataCrmStoreWriter       dsw        = new DataCrmStoreWriter(logger.Object, entityrepo.Object, 200, null);
            Mock <IDataStoreReader <Entity, EntityWrapper> > storeReader = new Mock <IDataStoreReader <Entity, EntityWrapper> >();
            Mock <ICrmGenericImporterConfig> config = new Mock <ICrmGenericImporterConfig>();

            // setup pass zero entities
            config.SetupGet(c => c.PassOneReferences).Returns(new List <string> {
            });

            // execute test
            TestCrmGenericImporter importer = new TestCrmGenericImporter(logger.Object, storeReader.Object, dsw, config.Object);
            var actual = importer.GetStartingPassNumber();

            Assert.AreEqual((int)PassType.CreateEntity, actual, "Ivalid starting pass number");
        }
Example #15
0
 public CrmDirectMigrator(ILogger logger, DataCrmStoreReader storeReader, DataCrmStoreWriter storeWriter, ICrmGenericImporterConfig config, CancellationToken token)
     : base(logger, storeReader, storeWriter, config, token)
 {
 }
Example #16
0
 public CrmDirectMigrator(ILogger logger, DataCrmStoreReader storeReader, DataCrmStoreWriter storeWriter, ICrmGenericImporterConfig config)
     : base(logger, storeReader, storeWriter, config)
 {
 }
 public CrmFileDataImporter(ILogger logger, DataFileStoreReader storeReader, DataCrmStoreWriter storeWriter, ICrmGenericImporterConfig config)
     : base(logger, storeReader, storeWriter, config)
 {
 }
 public CrmFileDataImporterCsv(ILogger logger, DataFileStoreReaderCsv storeReader, DataCrmStoreWriter storeWriter, ICrmGenericImporterConfig config, CancellationToken token)
     : base(logger, storeReader, storeWriter, config, token)
 {
 }
 protected CrmGenericImporter(ILogger logger, IDataStoreReader <Entity, EntityWrapper> storeReader, DataCrmStoreWriter storeWriter, ICrmGenericImporterConfig config, CancellationToken token)
     : base(logger, storeReader, storeWriter, token)
 {
     this.config   = config;
     targetEntRepo = storeWriter?.GetEntityRepository;
     AddCustomProcessors();
 }