public void AddCustomProcessorsObjectTypeCodeConfigAddsObjectTypeCodeProcessor()
        {
            string expectedLoggerOutput = "Using ObjectTypeCodeProcessor processor";

            MockCrmGenericImporterConfig.SetupGet(c => c.ObjectTypeCodeMappingConfig).Returns(objectTypeCodeMappingConfig);

            var importer = new TestCrmGenericImporter(MockLogger.Object, mockStoreReader.Object, storeWriter, MockCrmGenericImporterConfig.Object);

            Assert.IsNotNull(importer);

            MockLogger.Verify(l => l.LogVerbose(expectedLoggerOutput), Times.Once);
            MockCrmGenericImporterConfig.VerifyAll();
        }
        public void DeactivateAllProcesses()
        {
            MockCrmGenericImporterConfig.SetupGet(c => c.ObjectTypeCodeMappingConfig).Returns(new ObjectTypeCodeMappingConfiguration());

            MockCrmGenericImporterConfig.SetupGet(c => c.DeactivateAllProcesses).Returns(true);
            MockCrmGenericImporterConfig.Setup(a => a.ResetProcessesToDeactivate());
            MockCrmGenericImporterConfig.Setup(a => a.ResetPluginsToDeactivate());

            var importer = new TestCrmGenericImporter(MockLogger.Object, mockStoreReader.Object, storeWriter, MockCrmGenericImporterConfig.Object);

            importer.Should().NotBeNull();
            MockCrmGenericImporterConfig.VerifyAll();
        }
        public void EntitiesToSync()
        {
            List <string> entitiesToSync = new List <string>()
            {
                "contactid"
            };

            MockCrmGenericImporterConfig.SetupGet(c => c.ObjectTypeCodeMappingConfig).Returns(new ObjectTypeCodeMappingConfiguration());

            MockCrmGenericImporterConfig.SetupGet(c => c.EntitiesToSync).Returns(entitiesToSync);

            var importer = new TestCrmGenericImporter(MockLogger.Object, mockStoreReader.Object, storeWriter, MockCrmGenericImporterConfig.Object);

            importer.Should().NotBeNull();
            MockCrmGenericImporterConfig.VerifyAll();
        }
        public void FiledsToIgnore()
        {
            List <string> fieldsToIgnore = new List <string>()
            {
                "contactid"
            };

            MockCrmGenericImporterConfig.SetupGet(c => c.ObjectTypeCodeMappingConfig).Returns(new ObjectTypeCodeMappingConfiguration());

            MockCrmGenericImporterConfig.SetupGet(c => c.FiledsToIgnore).Returns(fieldsToIgnore);

            var importer = new TestCrmGenericImporter(MockLogger.Object, mockStoreReader.Object, storeWriter, MockCrmGenericImporterConfig.Object);

            importer.Should().NotBeNull();
            MockCrmGenericImporterConfig.VerifyAll();
        }
        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 ProcessesToDeactivate()
        {
            List <string> processesToDeactivate = new List <string>()
            {
                "contactid"
            };

            MockCrmGenericImporterConfig.SetupGet(c => c.ObjectTypeCodeMappingConfig).Returns(new ObjectTypeCodeMappingConfiguration());

            MockCrmGenericImporterConfig.SetupGet(c => c.ProcessesToDeactivate).Returns(processesToDeactivate);
            MockCrmGenericImporterConfig.Setup(a => a.ResetPluginsToDeactivate());

            var importer = new TestCrmGenericImporter(MockLogger.Object, mockStoreReader.Object, storeWriter, MockCrmGenericImporterConfig.Object);

            importer.Should().NotBeNull();

            MockCrmGenericImporterConfig.VerifyAll();
        }
        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");
        }