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); }
/// <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); }
/// <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 }); }
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); }