Esempio n. 1
0
        public async Task DeleteApp_SchedulersForAppAreDeleted()
        {
            //arrange
            var app = Application.Create("TestApp", "dev", false);
            await _appApplicationRepository.AddAsync(app);

            var date = new DateTime(2099, 3, 2, 15, 45, 0);

            app.AddDeployEnvironment("QA", false, false, false);
            app.AddFeatureToggle("t1", null, "workItemID1");
            app.AddFeatureToggle("t2", null, "workItemID2");
            await _appApplicationRepository.AddAsync(app);

            var schedule = ToggleSchedule.Create("TestApp", "t1", new[] { "dev" }, true, date, "updatedBy", true);
            await _toggleScheduleRepository.AddAsync(schedule);

            var controller = new ApplicationsController(_appApplicationRepository, _toggleScheduleRepository);

            //act
            await controller.RemoveApp(app.Id);

            //assert
            var schedulers = await _toggleScheduleRepository.GetAllAsync();

            schedulers.Count().Should().Be(0);
        }
Esempio n. 2
0
        public async Task WhenEnvironmentNameIsChanged_EnvironmentNameForToggleSchedulersIsChanged()
        {
            //arrange
            var app = Application.Create("TestApp", "DEV", true);
            await _appRepository.AddAsync(app);

            app.AddFeatureToggle("t1", string.Empty, "workItemId1");
            app.AddFeatureToggle("t2", string.Empty, "workItemId2");
            var t1 = app.FeatureToggles.ToList().FirstOrDefault(ft => ft.ToggleName == "t1");

            app.SetToggle(t1.Id, "DEV", false, "bla");
            var schedule = ToggleSchedule.Create("TestApp", "t1", new[] { "DEV" }, true, new DateTime(2018, 1, 1, 15, 30, 0), "updatedBy", true);
            await _toggleScheduleRepository.AddAsync(schedule);

            var updatedEnvironmentName = "QA";

            var updatedEnvironment = new UpdateEnvironmentModel
            {
                ApplicationId  = app.Id,
                InitialEnvName = "DEV",
                NewEnvName     = updatedEnvironmentName
            };

            //act
            var result = await _featureToggleController.UpdateEnvironment(updatedEnvironment);

            //assert
            var ts1 = (await _toggleScheduleRepository.GetAllAsync()).FirstOrDefault(fts => fts.ToggleName == "t1");

            ts1.Environments.Should().Contain("QA");
            ts1.Environments.Should().NotContain("DEV");
        }
        public async Task FlipToggles_HavingSheduledTimeInThePast()
        {
            //arrange
            var app = Application.Create("tst", "DEV", false);

            app.AddFeatureToggle("offToggle", null, "workItemId1");
            app.AddFeatureToggle("onToggle", null, "workItemId1");
            app.SetToggle(app.FeatureToggles.Single(f => f.ToggleName == "offToggle").Id, "DEV", false, "username");
            app.SetToggle(app.FeatureToggles.Single(f => f.ToggleName == "onToggle").Id, "DEV", true, "username");
            await _appRepository.AddAsync(app);

            var schedule  = ToggleSchedule.Create("tst", "offToggle", new[] { "DEV" }, true, _dateInThePast, "updatedBy", true);
            var schedule2 = ToggleSchedule.Create("tst", "onToggle", new[] { "DEV" }, false, _dateInThePast, "updatedBy", true);
            await _toggleSchedulesRepository.AddAsync(schedule);

            await _toggleSchedulesRepository.AddAsync(schedule2);

            //act
            await _sut.StartAsync(_cts.Token);

            await _sut.StopAsync(_cts.Token);

            //assert
            var updatedApp = await _appRepository.FindByIdAsync(app.Id);

            var status = FeatureToggleTestHelper.GetFeatureToggleStatus(updatedApp, "offtoggle", "DEV");

            status.Enabled.Should().BeTrue();
            var status2 = FeatureToggleTestHelper.GetFeatureToggleStatus(updatedApp, "onToggle", "DEV");

            status2.Enabled.Should().BeFalse();
        }
        public async Task IfFeatureToggleIsDeleted_BeforeScheduledDate_RemovesTheSchedule()
        {
            //arrange
            var app = Application.Create("tst", "DEV", false);
            await _appRepository.AddAsync(app);

            var schedule = ToggleSchedule.Create("tst", "DeletedToggle", new[] { "DEV" }, true, _dateInThePast, "updatedBy");
            await _toggleSchedulesRepository.AddAsync(schedule);

            //act
            await _sut.StartAsync(_cts.Token);

            await _sut.StopAsync(_cts.Token);

            //assert
            (await _toggleSchedulesRepository.GetAllAsync()).Count().Should().Be(0);
        }
        public async Task OnceToggleIsSet_TheScheduleIsRemoved()
        {
            //arrange
            var app = Application.Create("tst", "DEV", false);

            app.AddFeatureToggle("t1", null, "workItemId1");
            await _appRepository.AddAsync(app);

            var schedule = ToggleSchedule.Create("tst", "t1", new[] { "DEV" }, true, _dateInThePast, "updatedBy");
            await _toggleSchedulesRepository.AddAsync(schedule);

            //act
            await _sut.StartAsync(_cts.Token);

            await _sut.StopAsync(_cts.Token);

            //assert
            (await _toggleSchedulesRepository.GetAllAsync()).Count().Should().Be(0);
        }
        public async Task ForceCacheRefresh_OnToggleSchedule_IfEnabled()
        {
            //arrange
            var app = Application.Create("tst", "DEV", false);

            app.AddFeatureToggle("t1", null, "workItemId1");

            await _appRepository.AddAsync(app);

            var schedule = ToggleSchedule.Create("tst", "t1", new[] { "DEV" }, true, _dateInThePast, "updatedBy", true);
            await _toggleSchedulesRepository.AddAsync(schedule);

            //act
            await _sut.StartAsync(_cts.Token);

            await _sut.StopAsync(_cts.Token);

            //assert
            _busMock.Verify(x => x.Publish(It.Is <RefreshTogglesCache>(e => e.ApplicationName == "tst" && e.Environment == "DEV"), default), Times.Once);
        }
        public async Task <IActionResult> ScheduleToggles([FromBody] ScheduleTogglesModel model)
        {
            var updatedBy = _httpContextAccessor.HttpContext.User.Identity.Name;

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var app = await _applicationRepository.FindByIdAsync(model.ApplicationId);

            if (app == null)
            {
                throw new InvalidOperationException("Application does not exist!");
            }

            foreach (var toggle in model.FeatureToggles)
            {
                var toggleSchedule = ToggleSchedule.Create(app.AppName, toggle, model.Environments, model.State, model.ScheduleDate.ToUniversalTime(), updatedBy, model.ForceCacheRefresh);
                await _toggleScheduleRepository.AddAsync(toggleSchedule);
            }

            return(Ok());
        }
Esempio n. 8
0
 public static void NotifyClient(this IHubContext <IsDueHub, IIsDueHub> hub, ToggleSchedule toggle)
 {
     hub.Clients.All.IsDue(toggle);
 }