public async void BonusCanBeActivatedAlreadyActivatedFailure()
        {
            //Arrange
            var testUser = await _usersRepository.GetUserByEmailAsync("*****@*****.**");

            var getServicesListDto = new GetServicesListDto {
                PageSize = 100
            };
            var allServices = await _servicesService.GetAllServicesAsync(testUser.Id, getServicesListDto);

            var activateBonusDto = new ActivateBonusDto
            {
                ServiceId = allServices.Items.First().Id,
                Promocode = "itpromocode"
            };

            await _servicesService.ActivateBonusAsync(testUser.Id, activateBonusDto);

            var canBeProcessedDto = await _servicesService.BonusCanBeActivatedAsync(testUser.Id, activateBonusDto);

            //Assert
            Assert.False(canBeProcessedDto.CanBeProcessed);
            Assert.Equal((int)AppConsts.HttpStatusCodes.Status409Conflict, canBeProcessedDto.StatusCode);
            Assert.Equal($"Bonus is already activated for the service.", canBeProcessedDto.RejectionReason);
        }
        public async void BonusShouldBeActivatedSuccess()
        {
            //Arrange
            var testUser = await _usersRepository.GetUserByEmailAsync("*****@*****.**");

            var getServicesListDto = new GetServicesListDto {
                PageSize = 100
            };
            var allServices = await _servicesService.GetAllServicesAsync(testUser.Id, getServicesListDto);

            var activateBonusDto = new ActivateBonusDto
            {
                ServiceId = allServices.Items.First().Id,
                Promocode = "itpromocode"
            };

            //Act
            await _servicesService.ActivateBonusAsync(testUser.Id, activateBonusDto);

            allServices = await _servicesService.GetAllServicesAsync(testUser.Id, getServicesListDto);

            var service = allServices.Items.Single(s => s.Activated);

            //Assert
            Assert.Equal(service.Id, activateBonusDto.ServiceId);
        }
Example #3
0
        /// <summary>
        /// Activates a bonus for a user and a service
        /// </summary>
        /// <param name="userId">User id</param>
        /// <param name="activateBonusDto">Model for activating the bonus with a Service Id and a Promocode</param>
        /// <returns></returns>
        public async Task ActivateBonusAsync(Guid userId, ActivateBonusDto activateBonusDto)
        {
            var activatedBonus = new ActivatedBonus
            {
                UserId    = userId,
                ServiceId = activateBonusDto.ServiceId
            };

            await _servicesRepository.ActivateBonusAsync(activatedBonus);
        }
        public void CredentialsDtoValidatorEmptyServiceIdPromocodeNotValid()
        {
            //Arrange
            var activateBonusDto = new ActivateBonusDto {
            };

            //Act
            var validationResult = new ActivateBonusDtoValidator().Validate(activateBonusDto);

            //Assert
            Assert.Equal(2, validationResult.Errors.Count);
            Assert.True(validationResult.Errors.Count(x => x.PropertyName == "ServiceId") == 1);
            Assert.True(validationResult.Errors.Count(x => x.PropertyName == "Promocode") == 1);
        }
        public void ActivateBonusDtoValidatorValid()
        {
            //Arrange
            var activateBonusDto = new ActivateBonusDto
            {
                ServiceId = Guid.NewGuid(),
                Promocode = "itpromocode"
            };

            //Act
            var validationResult = new ActivateBonusDtoValidator().Validate(activateBonusDto);

            //Assert
            Assert.Empty(validationResult.Errors);
        }
        public async void BonusCanBeActivatedServiceNotFoundFailure()
        {
            //Arrange
            var activateBonusDto = new ActivateBonusDto
            {
                ServiceId = Guid.NewGuid(),
                Promocode = "itpromocode"
            };

            //Act
            var canBeProcessedDto = await _servicesService.BonusCanBeActivatedAsync(Guid.NewGuid(), activateBonusDto);

            //Assert
            Assert.False(canBeProcessedDto.CanBeProcessed);
            Assert.Equal((int)AppConsts.HttpStatusCodes.Status400BadRequest, canBeProcessedDto.StatusCode);
            Assert.Equal($"Service is not found by id={activateBonusDto.ServiceId}.", canBeProcessedDto.RejectionReason);
        }
Example #7
0
        /// <summary>
        /// Verifies that a bonus can be activated for a user and a service
        /// </summary>
        /// <param name="userId">User id</param>
        /// <param name="activateBonusDto">Model for activating the bonus with a Service Id and a Promocode</param>
        /// <returns>A CanBeProcessed result</returns>
        public async Task <CanBeProcessedDto> BonusCanBeActivatedAsync(Guid userId, ActivateBonusDto activateBonusDto)
        {
            var service = await _servicesRepository.GetServiceAsync(userId, activateBonusDto.ServiceId);

            if (service == null)
            {
                return new CanBeProcessedDto
                       {
                           CanBeProcessed  = false,
                           StatusCode      = (int)AppConsts.HttpStatusCodes.Status400BadRequest,
                           RejectionReason = $"Service is not found by id={activateBonusDto.ServiceId}."
                       }
            }
            ;

            if (service.Promocode != activateBonusDto.Promocode)
            {
                return new CanBeProcessedDto
                       {
                           CanBeProcessed  = false,
                           StatusCode      = (int)AppConsts.HttpStatusCodes.Status400BadRequest,
                           RejectionReason = $"Promocode '{activateBonusDto.Promocode}' is not valid for the service."
                       }
            }
            ;


            if (service.ActivatedBonuses.Any())
            {
                return new CanBeProcessedDto
                       {
                           CanBeProcessed  = false,
                           StatusCode      = (int)AppConsts.HttpStatusCodes.Status409Conflict,
                           RejectionReason = $"Bonus is already activated for the service."
                       }
            }
            ;

            return(new CanBeProcessedDto
            {
                CanBeProcessed = true,
                StatusCode = (int)AppConsts.HttpStatusCodes.Status204NoContent,
                RejectionReason = string.Empty
            });
        }
Example #8
0
        public async Task <IActionResult> ActivateBonusAsync(ActivateBonusDto activateBonusDto)
        {
            var validationResult = new ActivateBonusDtoValidator().Validate(activateBonusDto);

            if (!validationResult.IsValid)
            {
                return(UnprocessableEntity(new ExceptionMessage(validationResult.Errors.Select(x => x.ErrorMessage))));
            }

            var userId = Guid.Parse(User.Identity.Name);
            var canBeProcessedResult = await _servicesService.BonusCanBeActivatedAsync(userId, activateBonusDto);

            if (!canBeProcessedResult.CanBeProcessed)
            {
                return(StatusCode(canBeProcessedResult.StatusCode, new ExceptionMessage(canBeProcessedResult.RejectionReason)));
            }

            await _servicesService.ActivateBonusAsync(userId, activateBonusDto);

            return(NoContent());
        }
        public async void BonusCanBeActivatedSuccess()
        {
            //Arrange
            var testUser = await _usersRepository.GetUserByEmailAsync("*****@*****.**");

            var getServicesListDto = new GetServicesListDto {
                PageSize = 100
            };
            var allServices = await _servicesService.GetAllServicesAsync(testUser.Id, getServicesListDto);

            var activateBonusDto = new ActivateBonusDto
            {
                ServiceId = allServices.Items.First().Id,
                Promocode = "itpromocode"
            };

            //Act
            var canBeProcessedDto = await _servicesService.BonusCanBeActivatedAsync(testUser.Id, activateBonusDto);

            //Assert
            Assert.True(canBeProcessedDto.CanBeProcessed);
        }