Exemple #1
0
        public async Task EnvironmentIsOnTheLastPosition_WhenMoveToRightIsTrue_SortOrderForEnvironmentIsNotChanged()
        {
            //arrange
            var application = Application.Create("Test", "DEV", false);
            await _appRepository.AddAsync(application);

            application.DeploymentEnvironments.First().SortOrder = 0;
            application.AddDeployEnvironment("QA", false, false, false, sortOrder: 1);
            application.AddDeployEnvironment("LIVE", false, false, false, sortOrder: 2);

            await _appRepository.UpdateAsync(application);

            var updateEnvironment = new UpdateEnvironmentModel
            {
                ApplicationId      = application.Id,
                DefaultToggleValue = false,
                InitialEnvName     = "LIVE",
                NewEnvName         = "LIVE",
                MoveToLeft         = false,
                MoveToRight        = true
            };

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

            //assert
            var environments = application.DeploymentEnvironments.OrderBy(e => e.SortOrder).ToList();

            environments.Should().BeEquivalentTo(application.DeploymentEnvironments);
            var environment = application.DeploymentEnvironments.FirstOrDefault(e => e.EnvName == "LIVE");

            environment.SortOrder.Should().Be(2);
        }
Exemple #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");
        }
Exemple #3
0
        public async Task DefaultToggleValueChanged_NextToggleHasDefaultValue()
        {
            var app = Application.Create("TestApp", "DEV", true);
            await _appRepository.AddAsync(app);

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

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

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

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

            t1.GetFeatureToggleStatusForEnv("DEV").Enabled.Should().Be(true);
            t2.GetFeatureToggleStatusForEnv("DEV").Enabled.Should().Be(false);
        }
Exemple #4
0
        public void EditEnvironment_EnvironmentIsModifiedWithInvalidID_ThrowsInvalidOperationException()
        {
            //arrange
            var app = new Application {
                Id = 1, AppName = "TestApp"
            };
            var environment = new DeployEnvironment
            {
                Application = app, ApplicationId = app.Id, EnvName = "DEV"
            };

            _context.DeployEnvironments.Add(environment);
            _context.SaveChanges();

            var controller = new FeatureTogglesController(_context);

            var updatedEnvironmentName = "QA";

            var updatedEnvironment = new UpdateEnvironmentModel
            {
                ApplicationId  = environment.ApplicationId + 1,
                InitialEnvName = environment.EnvName,
                NewEnvName     = updatedEnvironmentName
            };

            //act
            controller.UpdateEnvironment(updatedEnvironment);

            //assert
            //throws InvalidOperationException
        }
Exemple #5
0
        public void EditEnvironment_EnvironmentIsBeingModified()
        {
            //arrange
            var app = new Application {
                Id = 1, AppName = "TestApp"
            };
            var environment = new DeployEnvironment
            {
                Application = app, ApplicationId = app.Id, EnvName = "DEV"
            };

            _context.DeployEnvironments.Add(environment);
            _context.SaveChanges();

            var controller = new FeatureTogglesController(_context);

            var updatedEnvironmentName = "QA";

            var updatedEnvironment = new UpdateEnvironmentModel
            {
                ApplicationId  = environment.ApplicationId,
                InitialEnvName = environment.EnvName,
                NewEnvName     = updatedEnvironmentName
            };

            //act
            var result = controller.UpdateEnvironment(updatedEnvironment);

            //assert
            result.Should().BeOfType <OkResult>();
            environment.EnvName.Should().Be(updatedEnvironmentName);
        }
Exemple #6
0
        public async Task <IActionResult> UpdateEnvironment([FromBody] UpdateEnvironmentModel environmentModel)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var app = await _applicationsRepository.FindByIdAsync(environmentModel.ApplicationId);

            var featureTogglesSchedulers = await _toggleScheduleRepository.GetAllAsync();

            try
            {
                app.ChangeEnvironmentValuesToRequireReasonFor(environmentModel.InitialEnvName, environmentModel.RequireReasonForChangeWhenToggleEnabled, environmentModel.RequireReasonForChangeWhenToggleDisabled);
                app.ChangeEnvironmentValuesToRequireReasonFor(environmentModel.InitialEnvName, environmentModel.RequireReasonForChangeWhenToggleEnabled, environmentModel.RequireReasonForChangeWhenToggleDisabled);
                app.ChangeDeployEnvironmentName(environmentModel.InitialEnvName, environmentModel.NewEnvName);
                app.ChangeEnvironmentPosition(environmentModel.NewEnvName, environmentModel.MoveToLeft, environmentModel.MoveToRight);
                app.ChangeEnvironmentDefaultValue(environmentModel.NewEnvName, environmentModel.DefaultToggleValue);
                foreach (var fts in featureTogglesSchedulers)
                {
                    fts.ChangeEnvironmentName(environmentModel.InitialEnvName, environmentModel.NewEnvName);
                    await _toggleScheduleRepository.UpdateAsync(fts);
                }
            }
            catch (BusinessRuleValidationException ex)
            {
                return(BadRequest(ex.Message));
            }

            await _applicationsRepository.UpdateAsync(app);

            return(Ok());
        }
        public IActionResult UpdateEnvironment([FromBody] UpdateEnvironmentModel environmentModel)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var env = _db.DeployEnvironments.FirstOrDefault(e => e.ApplicationId == environmentModel.ApplicationId && e.EnvName == environmentModel.InitialEnvName);

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

            env.EnvName = environmentModel.NewEnvName;
            _db.SaveChanges();

            return(Ok());
        }
Exemple #8
0
        public async Task EnvironmentSortOrderChanged_WhenPositionChangedToRight_OrderIsChanged()
        {
            //arrange
            var application = Application.Create("Test", "DEV", false);
            await _appRepository.AddAsync(application);

            application.DeploymentEnvironments.First().SortOrder = 0;
            application.AddDeployEnvironment("QA", false, false, false, sortOrder: 1);
            application.AddDeployEnvironment("LIVE", false, false, false, sortOrder: 2);

            await _appRepository.UpdateAsync(application);

            var updateEnvironment = new UpdateEnvironmentModel
            {
                ApplicationId      = application.Id,
                DefaultToggleValue = false,
                InitialEnvName     = "DEV",
                NewEnvName         = "DEV",
                MoveToLeft         = false,
                MoveToRight        = true
            };

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

            application.DeploymentEnvironments = application.DeploymentEnvironments.OrderBy(e => e.SortOrder).ToList();

            //assert
            var environment = application.DeploymentEnvironments.FirstOrDefault(e => e.EnvName == "DEV");

            environment.SortOrder.Should().Be(1);
            var leftEnvironmentIndex = application.DeploymentEnvironments.IndexOf(environment) - 1;
            var leftEnvironment      = application.DeploymentEnvironments[leftEnvironmentIndex];

            leftEnvironment.EnvName.Should().Be("QA");
            leftEnvironment.SortOrder.Should().Be(0);
            var rightEnvironmentIndex = application.DeploymentEnvironments.IndexOf(environment) + 1;
            var rightEnvironment      = application.DeploymentEnvironments[rightEnvironmentIndex];

            rightEnvironment.EnvName.Should().Be("LIVE");
            rightEnvironment.SortOrder.Should().Be(2);
        }
Exemple #9
0
        public async Task WhenNewInvironmentName_MatchesAnExistingEnvrionment_TheChangeIsRejected()
        {
            //arrange
            var app = Application.Create("TestApp", "DEV", false);
            await _appRepository.AddAsync(app);

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

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

            //assert
            result.Should().BeOfType <BadRequestObjectResult>();
            (await _appRepository.FindByIdAsync(app.Id)).DeploymentEnvironments.First().EnvName.Should().Be("DEV");
        }
Exemple #10
0
        public async Task WhenEnvironmentIsModifiedWithInvalidID_ThrowsInvalidOperationException()
        {
            //arrange
            var app = Application.Create("TestApp", "DEV", false);
            await _appRepository.AddAsync(app);

            var updatedEnvironmentName = "QA";

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

            //act
            await _featureToggleController.UpdateEnvironment(updatedEnvironment);

            //assert
            //throws InvalidOperationException
        }
Exemple #11
0
        public async Task WhenEnvironmentIsModified_EnvironmentNameForFeatureToggleStatusesUpdated()
        {
            //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 updatedEnvironmentName = "QA";

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

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

            //assert
            result.Should().BeOfType <OkResult>();
            var savedApp = await _appRepository.FindByIdAsync(app.Id);

            var t1Statuses = t1.FeatureToggleStatuses.First();

            t1Statuses.EnvironmentName.Should().Be("QA");
            t1Statuses.Enabled.Should().BeFalse();
            var t2         = savedApp.FeatureToggles.ToList().FirstOrDefault(ft => ft.ToggleName == "t2");
            var t2Statuses = t2.FeatureToggleStatuses.First();

            t2Statuses.EnvironmentName.Should().Be("QA");
            t2Statuses.Enabled.Should().BeTrue();
        }
Exemple #12
0
        public async Task EnvironmentIsBeingModified()
        {
            //arrange
            var app = Application.Create("TestApp", "DEV", false);
            await _appRepository.AddAsync(app);

            var updatedEnvironmentName = "QA";

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

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

            //assert
            result.Should().BeOfType <OkResult>();
            (await _appRepository.FindByIdAsync(app.Id)).DeploymentEnvironments.First().EnvName.Should().Be(updatedEnvironmentName);
        }