public async Task Add_CpfInUse_Exception()
        {
            var model = new NewResellerModel()
            {
                CPF      = "11144477735",
                Name     = "name",
                Email    = "*****@*****.**",
                Password = "******"
            };

            _repository.Setup(m => m.Retrieve(x => x.CPF == model.CPF.ApplyCPFFormat())).Returns(new[] { _validReseller }.AsQueryable);

            Exception _ex = new Exception();

            try
            {
                await _service.Add(model);
            }
            catch (Exception ex)
            {
                _repository.Verify(x => x.Add(It.IsAny <Reseller>()), Times.Never);
                _ex = ex;
            }
            Assert.Equal(typeof(CashbackServiceException), _ex.GetType());
            Assert.Equal(Messages.ResellerCPFInUse, _ex.Message);
        }
示例#2
0
        public async Task <Reseller> Add(NewResellerModel model)
        {
            Validate(model);
            var reseller = TinyMapper.Map <Reseller>(model);

            reseller.Id       = Guid.NewGuid();
            reseller.CPF      = model.CPF.ApplyCPFFormat();
            reseller.Password = Hasher.CreatePasswordHash(model.Email, model.Password);
            await _resellerRepository.Add(reseller);

            _logger.LogDebug($"[ResellerService/Add] {model.Email} adicionado");
            return(reseller);
        }
示例#3
0
        public async Task Post_InvalidValues_BadRequest()
        {
            var request = "/api/v1/reseller";
            var cpf     = "aaa";
            var model   = new NewResellerModel()
            {
                CPF      = cpf,
                Name     = $"Test {cpf}",
                Email    = $"{cpf}@test.com",
                Password = "******"
            };

            var response = await _httpClient.PostAsync(request, _fixture.AsStringContent(model));

            Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
        }
示例#4
0
        public async Task Post_ValidValues_Success()
        {
            var request = "/api/v1/reseller";
            var cpf     = GenerateCPF();
            var model   = new NewResellerModel()
            {
                CPF      = cpf,
                Name     = $"Test {cpf}",
                Email    = $"{cpf}@test.com",
                Password = "******"
            };

            var response = await _httpClient.PostAsync(request, _fixture.AsStringContent(model));

            response.EnsureSuccessStatusCode();
        }
示例#5
0
        private void Validate(NewResellerModel model)
        {
            if (model == null)
            {
                throw new CashbackServiceException(Messages.NullObject);
            }

            if (_resellerRepository.Retrieve(x => x.Email == model.Email).Any())
            {
                throw new CashbackServiceException(Messages.ResellerEmailInUse);
            }

            if (!Validators.EmailIsValid(model.Email))
            {
                throw new CashbackServiceException(Messages.EmailInvalid);
            }

            if (!Validators.CPFIsValid(model.CPF))
            {
                throw new CashbackServiceException(Messages.CPFInvalid);
            }

            if (_resellerRepository.Retrieve(x => x.CPF == model.CPF.ApplyCPFFormat()).Any())
            {
                throw new CashbackServiceException(Messages.ResellerCPFInUse);
            }

            if (string.IsNullOrEmpty(model.Name))
            {
                throw new CashbackServiceException(Messages.NameIsObrigatory);
            }

            if (string.IsNullOrEmpty(model.Password))
            {
                throw new CashbackServiceException(Messages.PasswordIsObrigatory);
            }

            if (model.Name.Length > 100)
            {
                throw new CashbackServiceException(Messages.NameShouldBeLessThan100Chars);
            }
        }
 public async Task Add_InvalidEmail_Exception(string email)
 {
     try
     {
         var model = new NewResellerModel()
         {
             CPF      = "11144477735",
             Name     = "Name X",
             Email    = email,
             Password = "******"
         };
         await _service.Add(model);
     }
     catch (Exception ex)
     {
         _repository.Verify(x => x.Add(It.IsAny <Reseller>()), Times.Never);
         Assert.Equal(typeof(CashbackServiceException), ex.GetType());
         Assert.Equal(Messages.EmailInvalid, ex.Message);
     }
 }
 public async Task Add_InvalidCPF_Exception(string cpf)
 {
     try
     {
         var model = new NewResellerModel()
         {
             CPF      = cpf,
             Name     = "Name X",
             Email    = $"*****@*****.**",
             Password = "******"
         };
         await _service.Add(model);
     }
     catch (Exception ex)
     {
         _repository.Verify(x => x.Add(It.IsAny <Reseller>()), Times.Never);
         Assert.Equal(typeof(CashbackServiceException), ex.GetType());
         Assert.Equal(Messages.CPFInvalid, ex.Message);
     }
 }
        public async Task <IActionResult> Post([FromBody] NewResellerModel model)
        {
            try
            {
                _logger.LogInformation("NewReseller");
                var item = await _resellerService.Add(model);

                return(StatusCode(StatusCodes.Status201Created, TinyMapper.Map <ResellerModel>(item)));
            }
            catch (CashbackServiceException ex)
            {
                _logger.LogWarning($"BadRequest - {ex.Message}");
                return(BadRequest(new { message = ex.Message }));
            }
            catch (Exception ex)
            {
                _logger.LogError($"Error - {ex.Message}");
                return(StatusCode(StatusCodes.Status500InternalServerError, new { message = ex.Message }));
            }
        }
        public async Task Add_ValidData_SaveAndReturn()
        {
            var model = new NewResellerModel()
            {
                CPF      = "11144477735",
                Name     = "name",
                Email    = "*****@*****.**",
                Password = "******"
            };

            _repository.Setup(x => x.Retrieve(It.IsAny <Expression <Func <Reseller, bool> > >()));

            Exception _ex = new Exception();

            var result = await _service.Add(model);

            _repository.Verify(x => x.Add(It.IsAny <Reseller>()), Times.Once);

            Assert.Equal(model.Email, result.Email);
            Assert.Equal(model.Name, result.Name);
            Assert.Equal(model.CPF.ApplyCPFFormat(), result.CPF);
            Assert.NotEqual(Guid.Empty, result.Id);
        }
        public async Task Add_PasswordEmpty_Exception(string password)
        {
            Exception _ex = new Exception();

            try
            {
                var model = new NewResellerModel()
                {
                    CPF      = "11144477735",
                    Name     = "name",
                    Email    = "*****@*****.**",
                    Password = password
                };
                await _service.Add(model);
            }
            catch (Exception ex)
            {
                _repository.Verify(x => x.Add(It.IsAny <Reseller>()), Times.Never);
                _ex = ex;
            }
            Assert.Equal(typeof(CashbackServiceException), _ex.GetType());
            Assert.Equal(Messages.PasswordIsObrigatory, _ex.Message);
        }
        public async Task Add_NameInvalid_Exception()
        {
            Exception _ex = new Exception();

            try
            {
                var model = new NewResellerModel()
                {
                    CPF      = "11144477735",
                    Name     = new string('A', 101),
                    Email    = "*****@*****.**",
                    Password = "******"
                };
                await _service.Add(model);
            }
            catch (Exception ex)
            {
                _repository.Verify(x => x.Add(It.IsAny <Reseller>()), Times.Never);
                _ex = ex;
            }
            Assert.Equal(typeof(CashbackServiceException), _ex.GetType());
            Assert.Equal(Messages.NameShouldBeLessThan100Chars, _ex.Message);
        }