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); }
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()); }
public static void NotifyClient(this IHubContext <IsDueHub, IIsDueHub> hub, ToggleSchedule toggle) { hub.Clients.All.IsDue(toggle); }