Beispiel #1
0
        public void Test_Erase_For_Non_Transactional_Platform()
        {
            //arrange
            var transaction = new Mock <IDbTransaction>();

            var connection          = new Mock <IDbConnection>();
            var localVersionService = new Mock <ILocalVersionService>();

            var configurationService = new Mock <IConfigurationDataService>();

            configurationService.Setup(s => s.ExecuteSql(It.IsAny <IDbConnection>(), "SELECT 'erase'", null, It.IsAny <IDbTransaction>(), It.IsAny <ITraceService>()));

            var dataService = new Mock <IDataService>();

            dataService.Setup(s => s.CreateConnection()).Returns(connection.Object);
            dataService.Setup(s => s.BreakStatements("SELECT 'erase'")).Returns(new List <string> {
                "SELECT 'erase'"
            });

            var bulkImportService = new Mock <IBulkImportService>();
            var directoryService  = new Mock <IDirectoryService>();
            var fileService       = new Mock <IFileService>();

            directoryService.Setup(s => s.GetAllFiles(@"c:\temp\_erase", "*.sql")).Returns(new string[] { @"c:\temp\_erase\sql_erase.sql" });
            directoryService.Setup(s => s.FilterFiles(@"c:\temp\_erase", null, It.IsAny <List <string> >())).Returns(new string[] { @"c:\temp\_erase\sql_erase.sql" });

            fileService.Setup(s => s.ReadAllText(@"c:\temp\_erase\sql_erase.sql")).Returns("SELECT 'erase'");

            var tokenReplacementService = new Mock <ITokenReplacementService>();

            tokenReplacementService.Setup(s => s.Replace(null, "SELECT 'erase'")).Returns("SELECT 'erase'");

            var traceService = new Mock <ITraceService>();

            //act
            var sut = new MigrationService(
                localVersionService.Object,
                dataService.Object,
                bulkImportService.Object,
                configurationService.Object,
                tokenReplacementService.Object,
                directoryService.Object,
                fileService.Object,
                traceService.Object);

            sut.Erase(workingPath: @"c:\temp");

            //assert
            configurationService.Verify(s => s.ExecuteSql(It.IsAny <IDbConnection>(), "SELECT 'erase'", null, It.IsAny <IDbTransaction>(), It.IsAny <ITraceService>()));

            dataService.Verify(s => s.CreateConnection());
            directoryService.Verify(s => s.GetAllFiles(@"c:\temp\_erase", "*.sql"));
            fileService.Verify(s => s.ReadAllText(@"c:\temp\_erase\sql_erase.sql"));
            dataService.Verify(s => s.BreakStatements("SELECT 'erase'"));
            tokenReplacementService.Verify(s => s.Replace(null, "SELECT 'erase'"));

            connection.Verify(s => s.Open());
        }
        public void Test_Erase_With_Error_Must_Rollback()
        {
            //arrange
            var transaction = new Mock <IDbTransaction>();

            var connection = new Mock <IDbConnection>();

            connection.Setup(s => s.BeginTransaction()).Returns(transaction.Object);

            var localVersionService = new Mock <ILocalVersionService>();

            var configurationService = new Mock <IConfigurationDataService>();

            var dataService = new Mock <IDataService>();

            dataService.Setup(s => s.IsAtomicDDLSupported).Returns(true);
            dataService.Setup(s => s.CreateConnection()).Returns(connection.Object);
            dataService.Setup(s => s.BreakStatements("SELECT 'erase'")).Returns(new List <string> {
                "SELECT 'erase'"
            });
            //dataService.Setup(s => s.ExecuteNonQuery("sql-connection-string", "SELECT erase", DefaultConstants.CommandTimeoutSecs));

            var bulkImportService = new Mock <IBulkImportService>();
            var directoryService  = new Mock <IDirectoryService>();
            var fileService       = new Mock <IFileService>();

            directoryService.Setup(s => s.GetAllFiles(@"c:\temp\_erase", "*.sql")).Returns(new string[] { @"c:\temp\_erase\sql_erase.sql" });
            directoryService.Setup(s => s.FilterFiles(@"c:\temp\_erase", null, It.IsAny <List <string> >())).Returns(new string[] { @"c:\temp\_erase\sql_erase.sql" });

            //simulates that an exception happens while erase is executing
            fileService.Setup(s => s.ReadAllText(@"c:\temp\_erase\sql_erase.sql")).Throws(new ApplicationException("Fake exception"));

            var tokenReplacementService = new Mock <ITokenReplacementService>();

            tokenReplacementService.Setup(s => s.Replace(null, "SELECT 'erase'")).Returns("SELECT 'erase'");

            var traceService = new Mock <ITraceService>();

            //act
            Assert.ThrowsException <ApplicationException>(() =>
            {
                var sut = new MigrationService(
                    localVersionService.Object,
                    dataService.Object,
                    bulkImportService.Object,
                    configurationService.Object,
                    tokenReplacementService.Object,
                    directoryService.Object,
                    fileService.Object,
                    traceService.Object);
                sut.Erase(workingPath: @"c:\temp");
            }).Message.ShouldBe("Fake exception");

            //assert
            dataService.Verify(s => s.CreateConnection());
            directoryService.Verify(s => s.GetAllFiles(@"c:\temp\_erase", "*.sql"));
            fileService.Verify(s => s.ReadAllText(@"c:\temp\_erase\sql_erase.sql"));
            connection.Verify(s => s.Open());
            connection.Verify(s => s.BeginTransaction());
            transaction.Verify(s => s.Rollback());
        }