Example #1
0
        public async Task ShouldNotGetExclusive()
        {
            var dto1 = new ToggleDto
            {
                Name         = "isButtonBlue",
                DefaultValue = ToggleValue.True,
                ToggleValue  = null
            };

            var dto2 = new ToggleDto
            {
                Name         = "isButtonGreen",
                DefaultValue = ToggleValue.Exclusive,
                ToggleValue  = null
            };


            _toggleRepository.Setup(s => s.GetAll("ABC", 1)).ReturnsAsync(new[] { dto1, dto2 });

            var toggles = await _service.GetAll("ABC", 1);

            toggles.ShouldNotBeEmpty();
            toggles.Count().ShouldBe(1);

            toggles.First().Name.ShouldBe("isButtonBlue");
            toggles.First().ToBoolValue().ShouldBeTrue();
        }
        /// <summary>
        /// Defines the toggle dto.
        /// </summary>
        /// <returns></returns>
        private static ToggleDto DefineToggleDto()
        {
            var id     = Guid.NewGuid().ToString();
            var toggle = new ToggleDto
            {
                Id           = id,
                Name         = $"isNewToggle {id}",
                Version      = "v1",
                Applications = new List <ApplicationDto>
                {
                    new ApplicationDto
                    {
                        Name = "XPTO",
                        Id   = "1de8cb5d-72ab-4ef4-be90-c1baefbdd732"
                    },

                    new ApplicationDto
                    {
                        Name = "ABC",
                        Id   = "f7456d63-0583-4307-ad0e-b244abbcd8c5"
                    }
                }
            };

            return(toggle);
        }
        public void Should_MapToggleDtoToToggle()
        {
            ToggleDto toggleDto = new ToggleDto
            {
                Id          = Guid.NewGuid(),
                Name        = "testName",
                Value       = true,
                Overrides   = true,
                ServiceList = new List <ServiceDto>
                {
                    new ServiceDto
                    {
                        Id      = Guid.NewGuid(),
                        Name    = "testName",
                        Version = "testVersion",
                        ApiKey  = "testApiKey"
                    }
                }
            };

            Toggle toggle = Mapper.Map <ToggleDto, Toggle>(toggleDto);

            Assert.NotNull(toggle);
            Assert.AreEqual(toggleDto.Id, toggle.Id);
            Assert.AreEqual(toggleDto.Name, toggle.Name);
            Assert.AreEqual(toggleDto.Value, toggle.Value);
            Assert.AreEqual(toggleDto.Overrides, toggle.Overrides);
            Assert.NotNull(toggleDto.ServiceList);
            Assert.AreEqual(toggleDto.ServiceList.FirstOrDefault()?.Id, toggle.ServiceList.FirstOrDefault()?.Id);
            Assert.AreEqual(toggleDto.ServiceList.FirstOrDefault()?.Name, toggle.ServiceList.FirstOrDefault()?.Name);
            Assert.AreEqual(toggleDto.ServiceList.FirstOrDefault()?.Version, toggle.ServiceList.FirstOrDefault()?.Version);
            Assert.AreEqual(toggleDto.ServiceList.FirstOrDefault()?.ApiKey, toggle.ServiceList.FirstOrDefault()?.ApiKey);
        }
Example #4
0
        public void Should_Insert()
        {
            IConfiguration    config            = InitConfiguration();
            TogglerController togglerController = new TogglerController(config);

            ToggleDto toggle = new ToggleDto
            {
                Id          = Guid.Empty,
                Name        = "ToggleNameTestInsert",
                ServiceList = new List <ServiceDto>(),
                Value       = true,
                Overrides   = false
            };

            var farfetchMessage = togglerController.Insert(toggle);

            Assert.NotNull(farfetchMessage);
            Assert.AreEqual(typeof(FarfetchMessage <ToggleDto>), farfetchMessage.GetType());
            Assert.NotNull(farfetchMessage.Result);
            Assert.AreEqual(toggle.Name, farfetchMessage.Result.Name);
            Assert.AreEqual(toggle.Value, farfetchMessage.Result.Value);
            Assert.AreEqual(toggle.Overrides, farfetchMessage.Result.Overrides);
            Assert.NotNull(farfetchMessage.Result.ServiceList);
            Assert.IsEmpty(farfetchMessage.Result.ServiceList);
        }
        /// <inheritdoc />
        public FarfetchMessage <ToggleDto> Get(Guid id)
        {
            if (_togglerService == null)
            {
                throw new NullReferenceException("Toggler Service hasn't been defined");
            }
            Toggle toggle = _togglerService.GetById(id);

            if (toggle == null)
            {
                return(new FarfetchMessage <ToggleDto>
                {
                    Result = null
                });
            }
            ToggleDto toggleDto = Mapper.Map <Toggle, ToggleDto>(toggle);

            if (toggleDto == null)
            {
                throw new AutoMapperMappingException("Error mapping types");
            }

            return(new FarfetchMessage <ToggleDto>
            {
                Result = toggleDto
            });
        }
        /// <inheritdoc />
        public FarfetchMessage <ToggleDto> Update(ToggleDto toggleDto)
        {
            if (_togglerService == null)
            {
                throw new NullReferenceException("Toggler Service hasn't been defined");
            }

            Toggle toggle = Mapper.Map <ToggleDto, Toggle>(toggleDto);

            if (toggle == null)
            {
                throw new AutoMapperMappingException("Error mapping types");
            }
            _togglerService.Update(toggle);
            toggle = _togglerService.GetById(toggle.Id);

            toggleDto = Mapper.Map <Toggle, ToggleDto>(toggle);
            if (toggle == null)
            {
                throw new AutoMapperMappingException("Error mapping types");
            }
            return(new FarfetchMessage <ToggleDto>
            {
                Result = toggleDto,
            });
        }
        /// <inheritdoc />
        public FarfetchMessage <ToggleDto> Insert(ToggleDto toggleDto)
        {
            if (_togglerService == null)
            {
                throw new NullReferenceException("Toggler Service hasn't been defined");
            }

            Toggle toggle = Mapper.Map <ToggleDto, Toggle>(toggleDto);

            if (toggle == null)
            {
                throw new AutoMapperMappingException("Error mapping types");
            }
            _togglerService.Insert(toggle);
            toggle    = _togglerService.GetByExpression(x => x.Value == toggleDto.Value && x.Overrides == toggleDto.Overrides && x.Name == toggleDto.Name);
            toggleDto = Mapper.Map <Toggle, ToggleDto>(toggle);
            if (toggle == null)
            {
                throw new AutoMapperMappingException("Error mapping types");
            }
            return(new FarfetchMessage <ToggleDto>
            {
                Result = toggleDto,
            });
        }
Example #8
0
        public static bool ToBoolValue(this ToggleDto dto)
        {
            if (dto.ToggleValue.HasValue)
            {
                return(dto.ToggleValue.Value == ToggleValue.True);
            }

            return(dto.DefaultValue == ToggleValue.True);
        }
Example #9
0
 public IActionResult Put(int id, [FromBody] ToggleDto toggleDto)
 {
     try
     {
         _toggleService.Put(id, toggleDto);
         return(Ok());
     }
     catch (System.Exception ex)
     {
         return(BadRequest(new { message = ex.Message }));
     }
 }
Example #10
0
        public async Task ShouldGetTogglesAndOverrideIsButtonBlue()
        {
            var dto1 = new ToggleDto
            {
                Name         = "isButtonBlue",
                DefaultValue = ToggleValue.True,
                ToggleValue  = ToggleValue.False
            };

            _toggleRepository.Setup(s => s.GetAll("ABC", 1)).ReturnsAsync(new[] { dto1 });

            var toggles = await _service.GetAll("ABC", 1);

            toggles.ShouldNotBeEmpty();
            toggles.Count().ShouldBe(1);
            toggles.Last().ToBoolValue().ShouldBeFalse();
        }
Example #11
0
        public void Should_GetForService()
        {
            IConfiguration    config            = InitConfiguration();
            TogglerController togglerController = new TogglerController(config);

            ToggleDto toggle = new ToggleDto
            {
                Id          = Guid.Empty,
                Name        = "ToggleNameTestUpdate",
                ServiceList = new List <ServiceDto>()
                {
                    new ServiceDto
                    {
                        Id      = Guid.NewGuid(),
                        Name    = "ServiceTestIntegration",
                        Version = "1.0",
                        ApiKey  = "apiKey"
                    }
                },
                Value     = true,
                Overrides = false
            };

            var farfetchMessage = togglerController.Insert(toggle);

            Assert.NotNull(farfetchMessage);
            Assert.AreEqual(typeof(FarfetchMessage <ToggleDto>), farfetchMessage.GetType());
            Assert.NotNull(farfetchMessage.Result);
            Assert.AreEqual(toggle.Name, farfetchMessage.Result.Name);
            Assert.AreEqual(toggle.Value, farfetchMessage.Result.Value);
            Assert.AreEqual(toggle.Overrides, farfetchMessage.Result.Overrides);
            Assert.NotNull(farfetchMessage.Result.ServiceList);
            Assert.IsNotEmpty(farfetchMessage.Result.ServiceList);

            farfetchMessage.Result.Value = false;

            var farfetchMessage2 = togglerController.GetForService(toggle.Name, toggle.Value, toggle.ServiceList.FirstOrDefault().Name,
                                                                   toggle.ServiceList.FirstOrDefault().Version);

            Assert.NotNull(farfetchMessage2);
            Assert.AreEqual(typeof(FarfetchMessage <bool>), farfetchMessage2.GetType());
            Assert.NotNull(farfetchMessage2.Result);
            Assert.AreEqual(true, farfetchMessage2.Result);
        }
        public async Task <IHttpActionResult> PostToggleAsync(ToggleDto toogDto)
        {
            try
            {
                if (toogDto == null)
                {
                    // if application id is null the request is wrong
                    return(BadRequest());
                }
                var result = await _toggleBusinessManager.PostToggleAsync(toogDto);

                return(Ok(result));
            }
            catch (Exception ex)
            {
                // in some cases the exception could not be sent and it is only written in log system
                return(InternalServerError(ex));
            }
        }
Example #13
0
        /// <summary>
        /// To the toggle dto.
        /// </summary>
        /// <param name="toggle">The toggle.</param>
        /// <returns></returns>
        private static ToggleDto ToToggleDto(Toggle toggle)
        {
            var apps = new List <ApplicationDto>();

            if (toggle.Configs != null)
            {
                apps.AddRange(toggle.Configs.Select(config => new ApplicationDto
                {
                    Id      = config.ApplicationId,
                    Name    = config.Application?.Name,
                    Version = config.Version
                }));
            }

            var dto = new ToggleDto
            {
                Id           = toggle.Id,
                Name         = toggle.Name,
                Applications = apps
            };

            return(dto);
        }
        public async Task <IActionResult> PutToggleAsync(ToggleDto toogDto)
        {
            try
            {
                if (toogDto == null)
                {
                    // if application id is null the request is wrong
                    return(BadRequest());
                }
                var result = await _toggleBusinessManager.PutToggleAsync(toogDto);

                return(Ok(result));
            }
            catch (ArgumentOutOfRangeException e)
            {
                return(NotFound());
            }
            catch (Exception ex)
            {
                // in some cases the exception could not be sent and it is only written in log system
                return(StatusCode(500, ex));
            }
        }
Example #15
0
        public void Put(int id, ToggleDto toggleDto)
        {
            Toggle toggle = _context.Toggles.Find(id);

            if (toggle != null)
            {
                if (!string.IsNullOrWhiteSpace(toggleDto.Name))
                {
                    toggle.Name  = toggleDto.Name;
                    toggle.State = toggleDto.State;
                    _context.Toggles.Update(toggle);
                    _context.SaveChanges();
                }
                else
                {
                    throw new ArgumentException("The name can't be null");
                }
            }
            else
            {
                throw new ArgumentException("Toggle Not Found");
            }
        }
Example #16
0
        /// <summary>
        /// Puts a toggle asynchronous.
        /// </summary>
        /// <param name="toogDto">The toog dto.</param>
        /// <returns>The toggle,</returns>
        /// <exception cref="ArgumentNullException">toogDto</exception>
        public async Task <Response <ToggleDto> > PutToggleAsync(ToggleDto toogDto)
        {
            if (toogDto == null)
            {
                throw new ArgumentNullException(nameof(toogDto));
            }
            if (string.IsNullOrEmpty(toogDto.Id))
            {
                throw new ArgumentNullException(nameof(toogDto.Id));
            }
            var toggleRepository = GetToggleRepository();
            var toogle           = toggleRepository.FindIdAsync(toogDto.Id);

            if (toogle == null)
            {
                throw new ArgumentOutOfRangeException();
            }

            // todo update data

            return(await Task.FromResult(new Response <ToggleDto> {
                IsValid = false, ErrorCode = "301", Message = "Method not compled."
            }));
        }
Example #17
0
        public async Task ShouldGetTogglesDefault()
        {
            var dto1 = new ToggleDto
            {
                Name         = "isButtonBlue",
                DefaultValue = ToggleValue.True,
                ToggleValue  = null
            };

            var dto2 = new ToggleDto
            {
                Name         = "isButtonGreen",
                DefaultValue = ToggleValue.True,
                ToggleValue  = null
            };

            var dto3 = new ToggleDto
            {
                Name         = "isButtonRed",
                DefaultValue = ToggleValue.True,
                ToggleValue  = null
            };


            _toggleRepository.Setup(s => s.GetAll("ABC", 1)).ReturnsAsync(new[] { dto1, dto2, dto3 });

            var toggles = await _service.GetAll("ABC", 1);

            toggles.ShouldNotBeEmpty();
            toggles.Count().ShouldBe(3);

            foreach (var toggle in toggles)
            {
                toggle.ToBoolValue().ShouldBeTrue();
            }
        }
Example #18
0
        /// <summary>
        /// Posts a toggle asynchronous.
        /// </summary>
        /// <param name="toogDto">The toog dto.</param>
        /// <returns>The toggle,</returns>
        /// <exception cref="ArgumentNullException">toogDto</exception>
        public async Task <Response <ToggleDto> > PostToggleAsync(ToggleDto toogDto)
        {
            if (toogDto == null)
            {
                throw new ArgumentNullException(nameof(toogDto));
            }

            if (string.IsNullOrEmpty(toogDto.Name))
            {
                throw new ArgumentNullException(nameof(toogDto.Name));
            }

            if (toogDto.Applications == null && !toogDto.Applications.Any())
            {
                throw new ArgumentNullException(nameof(toogDto.Applications));
            }

            //get all repositories
            var toggleRepository       = GetToggleRepository();
            var toggleConfigRepository = _repositoryFactory.CreateRepository <ToggleConfig>(_unitOfWork);
            var applicationRepository  = _repositoryFactory.CreateRepository <Application>(_unitOfWork) as ApplicationRepository;


            // define toggle
            var toggle = new ToggleBuilder().WithId(toogDto.Id ?? Guid.NewGuid().ToString())
                         .WithName(toogDto.Name)
                         .Build();

            // get apps from database to set the new toggle
            var apps = applicationRepository.GetApplications(toogDto.Applications.Select(c => c.Id).ToList());

            foreach (var app in apps)
            {
                app.IsToggleServiceAllowed = true;
                var toggleConfig = new ToggleConfig
                {
                    Id            = Guid.NewGuid().ToString(),
                    Version       = toogDto.Version,
                    Value         = true,
                    ToggleId      = toggle.Id,
                    Toggle        = toggle,
                    ApplicationId = app.Id,
                    Application   = app,
                    CreatedAt     = DateTime.UtcNow,
                    UpdateAt      = DateTime.UtcNow
                };
                if (toggle.Configs == null)
                {
                    toggle.Configs = new List <ToggleConfig>();
                }
                if (app.Configs == null)
                {
                    app.Configs = new List <ToggleConfig>();
                }

                // set toggle configs
                app.Configs.Add(toggleConfig);
                toggle.Configs.Add(toggleConfig);
                applicationRepository.Update(app);
                toggleConfigRepository.Insert(toggleConfig);
            }

            toggleRepository.Insert(toggle);
            await _unitOfWork.SaveAsync();

            return(await Task.FromResult(new Response <ToggleDto> {
                IsValid = true, Result = ToToggleDto(toggle)
            }));
        }
Example #19
0
 public FarfetchMessage <ToggleDto> Update([FromBody] ToggleDto toggleDto)
 {
     return(Service?.Update(toggleDto));
 }
Example #20
0
 public FarfetchMessage <ToggleDto> Insert([FromBody] ToggleDto toggleDto)
 {
     return(Service?.Insert(toggleDto));
 }