Exemplo n.º 1
0
        public async Task GetCustomers_should_return_error_when_get_customers_from_db_failed()
        {
            var repository = new Mock <ICustomerRepository>();

            repository.Setup(r => r.GetListAsync(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <object>())).Returns(Task.FromResult((IEnumerable <CustomerEntity>)null));
            var sut    = new CustomerService(repository.Object);
            var filter = new GetCustomersFilter();

            var result = await sut.GetCustomersAsync(filter);

            Assert.False(result.IsSuccessful);
            Assert.Equal("Get customers failed.", result.ErrorMessage);
        }
Exemplo n.º 2
0
        public async Task GetCustomers_should_return_correct_no_customer_when_no_match_found()
        {
            var repository = new Mock <ICustomerRepository>();

            var customers = BuildCustomers();

            repository.Setup(r => r.GetListAsync(1, 1, "test desc", It.IsAny <string>(), It.IsAny <object>())).Returns(Task.FromResult(BuildCustomers()));
            var sut    = new CustomerService(repository.Object);
            var filter = new GetCustomersFilter()
            {
                OrderBy = "test_no_match", OrderByDirection = "desc", Page = 1, RecordsPerPage = 1
            };
            var result = await sut.GetCustomersAsync(filter);

            Assert.True(result.IsSuccessful);
            Assert.Empty(result.Result.Items);
        }
Exemplo n.º 3
0
        public async Task GetCustomers_should_return_correct_customer()
        {
            var repository = new Mock <ICustomerRepository>();

            var customers = BuildCustomers();

            repository.Setup(r => r.GetListAsync(1, 1, "test desc", It.IsAny <string>(), It.IsAny <object>())).Returns(Task.FromResult(BuildCustomers()));
            var sut    = new CustomerService(repository.Object);
            var filter = new GetCustomersFilter()
            {
                OrderBy = "test", OrderByDirection = "desc", Page = 1, RecordsPerPage = 1
            };
            var result = await sut.GetCustomersAsync(filter);

            Assert.True(result.IsSuccessful);
            Assert.Single(result.Result.Items);

            Assert.Equal(customers.First().FirstName, result.Result.Items.First().FirstName);
            Assert.Equal(customers.First().LastName, result.Result.Items.First().LastName);
            Assert.Equal(customers.First().DOB, result.Result.Items.First().DOB);
            Assert.Equal(customers.First().Email, result.Result.Items.First().Email);
        }
Exemplo n.º 4
0
        public async Task <List <GetCustomerWithImageResponse> > GetAllCustomers(GetCustomersFilter filter)
        {
            // prepare filter predicate
            var predicate = PredicateBuilder.New <Customer>(true);

            if (!string.IsNullOrEmpty(filter?.SearchString))
            {
                predicate = predicate.Or(p => p.CompanyName.ToLower().Contains(filter.SearchString.ToLower()));
                predicate = predicate.Or(p => p.VatNumber.ToLower().Contains(filter.SearchString.ToLower()));
                predicate = predicate.Or(p => p.Id.ToString().ToLower().Contains(filter.SearchString.ToLower()));
            }

            var customers = await _unitOfWork.Customers.FindWithAccount(predicate);

            return(customers.Select(customer => new GetCustomerWithImageResponse()
            {
                Id = customer.Id,
                AccountId = customer.AccountId,
                Image = customer.Account.Image,
                CompanyName = customer.CompanyName,
                VatNumber = customer.VatNumber,
            })
                   .ToList());
        }
Exemplo n.º 5
0
 public async Task <ActionResult <List <GetCustomerResponse> > > GetCustomers([FromQuery] GetCustomersFilter filter)
 {
     return(Ok(await _customerService.GetAllCustomers(filter)));
 }
Exemplo n.º 6
0
        //This function supports pagination, and it will get first 5 records of first page by default.
        public async Task <ExecutionResult <PagedResult <CustomerEntity> > > GetCustomersAsync(GetCustomersFilter filter)
        {
            var result    = new ExecutionResult <PagedResult <CustomerEntity> >();
            var query     = "";
            var firstName = "";
            var lastName  = "";
            var email     = "";

            var page             = 1;
            var recordsPerpage   = 5;
            var orderBy          = "dob, lastName";
            var orderByDirection = "asc";

            if (!string.IsNullOrWhiteSpace(filter.FirstName))
            {
                query     = " FirstName=@FirstName";
                firstName = filter.FirstName;
            }

            if (!string.IsNullOrWhiteSpace(filter.LastName))
            {
                query   += " LastName=@LastName";
                lastName = filter.LastName;
            }

            if (!string.IsNullOrWhiteSpace(filter.Email))
            {
                query += " Email=@Email";
                email  = filter.Email;
            }

            if (filter.Page > 0)
            {
                page = filter.Page;
            }

            if (filter.RecordsPerPage > 0)
            {
                recordsPerpage = filter.RecordsPerPage;
            }

            if (!string.IsNullOrWhiteSpace(filter.OrderBy))
            {
                orderBy = filter.OrderBy;
            }

            if (!string.IsNullOrWhiteSpace(filter.OrderByDirection))
            {
                orderByDirection = filter.OrderByDirection;
            }

            if (!string.IsNullOrWhiteSpace(query))
            {
                query = $"where {query}";
            }

            var parameters = new { firstName, lastName, email };

            var customers = await _customerRepository.GetListAsync(page, recordsPerpage, $"{orderBy} {orderByDirection}", query, parameters);

            if (customers == null)
            {
                result.IsSuccessful = false;
                result.ErrorMessage = "Get customers failed.";
                return(result);
            }
            var totalCount = await _customerRepository.CountAsync();

            result.IsSuccessful = true;
            var collectionResult = new PagedResult <CustomerEntity>();

            collectionResult.TotalCount     = totalCount;
            collectionResult.Page           = page;
            collectionResult.RecordsPerPage = recordsPerpage;
            collectionResult.Items          = customers;
            result.Result = collectionResult;

            return(result);
        }