Ejemplo n.º 1
0
        public async Task <IActionResult> AddFeatureToggle([FromBody] AddFeatureToggleModel featureToggleModel)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (!featureToggleModel.ApplicationId.HasValue || featureToggleModel.ApplicationId == Guid.Empty)
            {
                return(BadRequest("Application not specified!"));
            }

            var app = await _applicationsRepository.FindByIdAsync(featureToggleModel.ApplicationId.Value);

            try
            {
                app.AddFeatureToggle(featureToggleModel.FeatureToggleName, featureToggleModel.Notes, featureToggleModel.WorkItemIdentifier, featureToggleModel.IsPermanent);
            }
            catch (BusinessRuleValidationException ex)
            {
                return(BadRequest(ex.Message));
            }

            await _applicationsRepository.UpdateAsync(app);

            return(Ok());
        }
Ejemplo n.º 2
0
        public void AddFeatureToggle_FeatureToggleStatus_IsCreated_ForEveryEnvironment()
        {
            //arrange
            var app = new Application {
                Id = 1, AppName = "BCC"
            };
            var newFeatureToggle = new AddFeatureToggleModel {
                ApplicationId = app.Id, FeatureToggleName = "TestToggle"
            };
            var devEnv = new DeployEnvironment {
                Application = app, Id = 1, ApplicationId = app.Id, EnvName = "DEV"
            };
            var qaEnv = new DeployEnvironment {
                Application = app, Id = 2, ApplicationId = app.Id, EnvName = "QA"
            };


            _context.DeployEnvironments.AddRange(devEnv, qaEnv);
            _context.Applications.Add(app);
            _context.SaveChanges();

            var controller = new FeatureTogglesController(_context);

            //act
            var result = controller.AddFeatureToggle(newFeatureToggle);

            //assert
            result.Should().BeOfType <OkResult>();
            _context.FeatureToggleStatuses.Count().Should().Be(2);
        }
Ejemplo n.º 3
0
        public async Task ReturnBadRequestResult_WhenApplicationNotSpecified()
        {
            //arrange
            var newFeatureToggle = new AddFeatureToggleModel {
                FeatureToggleName = "TestToggle"
            };


            //act
            var result = await _featureToggleController.AddFeatureToggle(newFeatureToggle);

            //assert
            result.Should().BeOfType <BadRequestObjectResult>().Which.Should().NotBeNull();
        }
Ejemplo n.º 4
0
        public void AddFeatureToggle_ReturnBadRequestResult_WhenApplicationNotSpecified()
        {
            //arrange
            var newFeatureToggle = new AddFeatureToggleModel {
                FeatureToggleName = "TestToggle"
            };

            var controller = new FeatureTogglesController(_context);

            //act
            var result = controller.AddFeatureToggle(newFeatureToggle);

            //assert
            result.Should().BeOfType <BadRequestObjectResult>().Which.Should().NotBeNull();
        }
Ejemplo n.º 5
0
        public IActionResult AddFeatureToggle([FromBody] AddFeatureToggleModel featureToggleModel)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (featureToggleModel.ApplicationId <= 0)
            {
                return(BadRequest("Application not speficied!"));
            }

            var toggle = _db.FeatureToggles.FirstOrDefault(ft =>
                                                           ft.ToggleName == featureToggleModel.FeatureToggleName &&
                                                           ft.ApplicationId == featureToggleModel.ApplicationId);

            if (toggle != null)
            {
                return(BadRequest("Feature toggle with the same name already exists for this application!"));
            }

            var environments = GetEnvironmentsPerApp(featureToggleModel.ApplicationId);

            var featureToggle = _db.Add(new FeatureToggle
            {
                ToggleName    = featureToggleModel.FeatureToggleName,
                ApplicationId = featureToggleModel.ApplicationId,
                Notes         = featureToggleModel.Notes,
                IsPermanent   = featureToggleModel.IsPermanent
            });

            _db.SaveChanges();

            foreach (var env in environments)
            {
                _db.Add(new FeatureToggleStatus
                {
                    Enabled         = env.DefaultToggleValue,
                    EnvironmentId   = env.Id,
                    FeatureToggleId = featureToggle.Entity.Id
                });
            }

            _db.SaveChanges();

            return(Ok());
        }
Ejemplo n.º 6
0
        public void AddFeatureToggle_FeatureToggleIsCreated()
        {
            //arrange
            var app = new Application {
                Id = 1, AppName = "BCC"
            };
            var newFeatureToggle = new AddFeatureToggleModel {
                ApplicationId = app.Id, FeatureToggleName = "TestToggle"
            };

            var controller = new FeatureTogglesController(_context);

            //act
            var result = controller.AddFeatureToggle(newFeatureToggle);

            //assert
            result.Should().BeOfType <OkResult>();
            _context.FeatureToggles.FirstOrDefault(x => x.ApplicationId == newFeatureToggle.ApplicationId).Should().NotBeNull();
        }
Ejemplo n.º 7
0
        public async Task ReturnBadRequestResult_WhenFeatureAlreadyExists()
        {
            //arrange
            var app = Application.Create("bcc", "dev", false);

            app.AddFeatureToggle("TestToggle", string.Empty, "workItemId1");

            var newFeatureToggle = new AddFeatureToggleModel {
                ApplicationId = app.Id, FeatureToggleName = "TestToggle"
            };

            await _appRepository.AddAsync(app);


            //act
            var result = await _featureToggleController.AddFeatureToggle(newFeatureToggle);

            //assert
            result.Should().BeOfType <BadRequestObjectResult>().Which.Should().NotBeNull();
        }
Ejemplo n.º 8
0
        public async Task FeatureToggleStatus_IsCreated_ForEveryEnvironment()
        {
            //arrange
            var app = Application.Create("TestApp", "DEV", false);

            app.AddDeployEnvironment("QA", false, false, false);

            var newFeatureToggle = new AddFeatureToggleModel {
                ApplicationId = app.Id, FeatureToggleName = "TestToggle"
            };

            await _appRepository.AddAsync(app);

            //act
            var result = await _featureToggleController.AddFeatureToggle(newFeatureToggle);

            //assert
            result.Should().BeOfType <OkResult>();
            (await _appRepository.FindByIdAsync(app.Id)).FeatureToggles.FirstOrDefault().FeatureToggleStatuses.Count.Should().Be(2);
        }
Ejemplo n.º 9
0
        public async Task FeatureToggleIsCreated()
        {
            //arrange
            var app = Application.Create("tst", "dev", false);
            await _appRepository.AddAsync(app);

            var newFeatureToggle = new AddFeatureToggleModel {
                ApplicationId = app.Id, FeatureToggleName = "TestToggle", WorkItemIdentifier = "1234"
            };


            //act
            var result = await _featureToggleController.AddFeatureToggle(newFeatureToggle);

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

            toggle.Should().NotBeNull();
            toggle.ToggleName.Should().Be("TestToggle");
            toggle.WorkItemIdentifier.Should().Be("1234");
        }
Ejemplo n.º 10
0
        public void AddFeatureToggle_ReturnBadRequestResult_WhenFeatureAlreadyExists()
        {
            //arrange
            var app = new Application {
                Id = 1, AppName = "BCC"
            };
            var existingFeatureToggle = new FeatureToggle {
                Application = app, Id = 2, ApplicationId = app.Id, ToggleName = "TestToggle"
            };
            var newFeatureToggle = new AddFeatureToggleModel {
                ApplicationId = app.Id, FeatureToggleName = "TestToggle"
            };

            _context.FeatureToggles.Add(existingFeatureToggle);
            _context.SaveChanges();

            var controller = new FeatureTogglesController(_context);

            //act
            var result = controller.AddFeatureToggle(newFeatureToggle);

            //assert
            result.Should().BeOfType <BadRequestObjectResult>().Which.Should().NotBeNull();
        }