예제 #1
0
        public async Task When_DeletingDbConfig_Should_RemoveFromRepositoryAndPurge()
        {
            var databaseBackupRepository = new Mock <IDatabaseBackupRepository>();
            var backupFilePurger         = new Mock <IBackupFilePurger>();
            var controller = new HomeController(Mock.Of <ILogger <HomeController> >(), Mock.Of <IConfigRepository>(),
                                                databaseBackupRepository.Object, backupFilePurger.Object, Mock.Of <IBackupAuditRepository>());

            var dbBackup = _fixture
                           .Build <DatabaseBackup>()
                           .With(x => x.DatabasePath, Path.Combine(_fixture.CreateMany <string>().ToArray()))
                           .Create();
            var request = new AddOrDeleteDbConfig {
                Delete = dbBackup.DatabaseBackupId
            };

            databaseBackupRepository.Setup(r => r.GetAsync(request.Delete.Value)).ReturnsAsync(dbBackup);

            var response = await controller.DbConfigs(request);

            Assert.IsType <RedirectResult>(response);
            var redirect = (RedirectResult)response;

            Assert.Equal("~/", redirect.Url);
            Assert.False(redirect.Permanent);

            databaseBackupRepository.Verify(d => d.DeleteAsync(dbBackup), Times.Once);
            backupFilePurger.Verify(p => p.PurgeBackups(It.IsAny <DirectoryInfo>(), 0, dbBackup), Times.Once);
            backupFilePurger.VerifyNoOtherCalls();
        }
        public async Task <ActionResult> DbConfigs([FromForm] AddOrDeleteDbConfig addOrDeleteDbConfig)
        {
            if (!string.IsNullOrEmpty(addOrDeleteDbConfig.Add) && addOrDeleteDbConfig.NewDatabaseModel != null)
            {
                _logger.LogInformation($"Adding db to backup: {addOrDeleteDbConfig.NewDatabaseModel.DatabasePath}");
                await _databaseBackupRepository.AddAsync(
                    addOrDeleteDbConfig.NewDatabaseModel.DatabasePath,
                    addOrDeleteDbConfig.NewDatabaseModel.BackupFrequency,
                    addOrDeleteDbConfig.NewDatabaseModel.UploadToDropbox,
                    addOrDeleteDbConfig.NewDatabaseModel.UploadToDropboxFrequency
                    );
            }

            if (addOrDeleteDbConfig.Delete.HasValue)
            {
                _logger.LogInformation($"Deleting db backup id: {addOrDeleteDbConfig.Delete}");
                var dbToDelete = await _databaseBackupRepository.GetAsync(addOrDeleteDbConfig.Delete.Value);

                if (dbToDelete != null)
                {
                    await _databaseBackupRepository.DeleteAsync(dbToDelete);

                    _backupFilePurger.PurgeBackups(
                        new DirectoryInfo(await _configRepository.GetBackupPathAsync()), 0, dbToDelete);
                }
            }

            return(Redirect("~/"));
        }
예제 #3
0
        public async Task When_AddingNewConfig_Should_UpdateRepository()
        {
            var databaseBackupRepository = new Mock <IDatabaseBackupRepository>();
            var backupFilePurger         = new Mock <IBackupFilePurger>(MockBehavior.Strict);
            var controller = new HomeController(Mock.Of <ILogger <HomeController> >(), Mock.Of <IConfigRepository>(),
                                                databaseBackupRepository.Object, backupFilePurger.Object, Mock.Of <IBackupAuditRepository>());

            var request = new AddOrDeleteDbConfig
            {
                Add = "add",
                NewDatabaseModel = _fixture.Create <DatabaseBackup>()
            };
            var response = await controller.DbConfigs(request);

            Assert.IsType <RedirectResult>(response);
            var redirect = (RedirectResult)response;

            Assert.Equal("~/", redirect.Url);
            Assert.False(redirect.Permanent);

            databaseBackupRepository.Verify(d => d.AddAsync(request.NewDatabaseModel.DatabasePath,
                                                            request.NewDatabaseModel.BackupFrequency, request.NewDatabaseModel.UploadToDropbox,
                                                            request.NewDatabaseModel.UploadToDropboxFrequency), Times.Once);
            databaseBackupRepository.VerifyNoOtherCalls();
        }