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(); }
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(); }
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"); }
public CrmDirectMigrator(ILogger logger, DataCrmStoreReader storeReader, DataCrmStoreWriter storeWriter, ICrmGenericImporterConfig config, CancellationToken token) : base(logger, storeReader, storeWriter, config, token) { }
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(); }