public IActionResult CreateCustomer([FromBody] CustomerCreateModel customer)
        {
            if (customer == null || !ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var newCustomer = new CustomerDataTransferObject
            {
                Name     = customer.Name,
                Adress   = customer.Adress,
                Code     = customer.Code,
                Discount = customer.Discount
            };

            var newCustomerId = _customerService.CreateCustomer(newCustomer);

            var customerUser = new CustomerInfoDataTransferObject
            {
                UserName   = customer.Email,
                Email      = customer.Email,
                CustomerId = newCustomerId
            };

            _customerService.AddCustomerUser(_userManager, customerUser, customer.Password).Wait();

            return(CreatedAtRoute("GetCustomer", new { id = newCustomerId },
                                  new CustomerGetModel
            {
                Id = newCustomerId,
                Name = newCustomer.Name,
                Code = newCustomer.Code,
                Adress = newCustomer.Adress,
                Discount = newCustomer.Discount
            }));
        }
Ejemplo n.º 2
0
        public async Task PutAsyncNonExistingCustomerReturns404NotFound()
        {
            using (var customersDataProvider = CreateTestCustomerDataProvider(SampleListOfCustomerDataTransferObjects))
            {
                // arrange
                var testLogger          = CreateTestLogger();
                var customersController = CreateTestCustomersController(customersDataProvider, testLogger);

                var customerUpdateInfo = new CustomerDataTransferObject
                {
                    FirstName   = "Joe",
                    LastName    = "Smith",
                    PhoneNumber = "555-555-5555"
                };

                // act
                var guid   = Guid.NewGuid();
                var result = await customersController.PutAsync(guid, customerUpdateInfo);

                // assert
                var expectedErrorMessage = string.Format(CustomerNotFoundErrorText, guid);
                Assert.Equal(StatusCodes.Status404NotFound, result.StatusCode);
                Assert.Equal(expectedErrorMessage, result.Value);
                VerifyLogMessage(testLogger, $"PutAsync: {expectedErrorMessage}", LogLevel.Error, 1);
            }
        }
Ejemplo n.º 3
0
        public async Task PutAsyncExistingCustomerInformationUpdatesAndReturns200OK()
        {
            using (var customersDataProvider = CreateTestCustomerDataProvider(SampleListOfCustomerDataTransferObjects))
            {
                // arrange
                var testLogger          = CreateTestLogger();
                var customersController = CreateTestCustomersController(customersDataProvider, testLogger);

                var customerUpdateInfo = new CustomerDataTransferObject
                {
                    FirstName   = "Joe",
                    LastName    = "Smith",
                    PhoneNumber = "555-555-5555"
                };

                // act
                var customerToUpdateId = customersDataProvider.GetCustomers().First().Id;
                await customersController.PutAsync(customerToUpdateId, customerUpdateInfo);

                // assert logging
                Assert.Equal(2, testLogger.LoggedMessages.Count);
                VerifyLogMessage(testLogger, string.Format(LoggingUpdatingCustomerText, customerToUpdateId));
                VerifyLogMessage(testLogger, string.Format(LoggingUpdatedCustomerText, customerToUpdateId), LogLevel.Information, 1);

                // assert information updated
                var customerToUpdate = customersController.Get(customerToUpdateId);
                Assert.NotNull(customerToUpdate);
                Assert.Equal(StatusCodes.Status200OK, customerToUpdate.StatusCode);
                Assert.Equal("Joe", ((CustomerEntity)customerToUpdate.Value).FirstName);
                Assert.Equal("Smith", ((CustomerEntity)customerToUpdate.Value).LastName);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Adds a customer using the customerDataTransferObject
        /// </summary>
        public async Task <CustomerEntity> AddCustomerAsync(CustomerDataTransferObject customerDataTransferObject)
        {
            if (customerDataTransferObject == null)
            {
                throw new ArgumentNullException();
            }

            if (!customerDataTransferObject.ValidateCustomerDataTransferObject())
            {
                throw new ArgumentException();
            }

            var newCustomerEntity = new CustomerEntity();

            UpdateCustomerInfo(newCustomerEntity, customerDataTransferObject);
            var customerEntityAdded = Customers.Add(newCustomerEntity);

            if (customerEntityAdded?.Entity == null)
            {
                return(null);
            }

            await SaveChangesAsync();

            return(customerEntityAdded.Entity);
        }
        public async Task TryUpdateCustomerAsyncExistingCustomerInformationUpdatesAndReturnsTrue()
        {
            using (var customersDataProvider = CreateTestCustomerDataProvider(SampleListOfCustomerDataTransferObjects))
            {
                // arrange
                var customerToUpdateId         = customersDataProvider.GetCustomers().First().Id;
                var customerDataTransferObject = new CustomerDataTransferObject
                {
                    FirstName   = "Joe",
                    LastName    = "Smith",
                    PhoneNumber = "555-555-5555"
                };

                // act
                var customerDataActionResult =
                    await customersDataProvider.TryUpdateCustomerAsync(customerToUpdateId, customerDataTransferObject);

                // assert
                Assert.True(customerDataActionResult.IsSuccess);
                Assert.Equal("Joe", customerDataActionResult.CustomerEntity.FirstName);
                Assert.Equal("Smith", customerDataActionResult.CustomerEntity.LastName);

                // assert
                var customerToUpdate = customersDataProvider.FindCustomer(customerToUpdateId);
                Assert.NotNull(customerToUpdate);
                Assert.Equal("Joe", customerToUpdate.FirstName);
                Assert.Equal("Smith", customerToUpdate.LastName);
            }
        }
        public async Task <ObjectResult> PutAsync(Guid id, [FromBody] CustomerDataTransferObject customerDataTransferObject)
        {
            if (customerDataTransferObject == null || !customerDataTransferObject.ValidateCustomerDataTransferObject())
            {
                _logger.LogError(BuildLogInfo(nameof(PutAsync), "CustomerInfoInvalid"));
                return(BadRequest(BuildStringFromResource("CustomerInfoInvalid")));
            }

            _logger.LogInformation(BuildLogInfo(nameof(PutAsync), "LoggingUpdatingCustomer", id));

            if (!_customersDataProvider.CustomerExists(id))
            {
                _logger.LogError(BuildLogInfo(nameof(PutAsync), "CustomerNotFound", id));
                return(new NotFoundObjectResult(BuildStringFromResource("CustomerNotFound", id)));
            }

            var customerDataActionResult = await _customersDataProvider.TryUpdateCustomerAsync(id, customerDataTransferObject);

            if (!customerDataActionResult.IsSuccess)
            {
                _logger.LogError(BuildLogInfo(nameof(PutAsync), "UnexpectedServerError"));
                return(StatusCode(StatusCodes.Status500InternalServerError, BuildStringFromResource("UnexpectedServerError")));
            }

            _logger.LogInformation(BuildLogInfo(nameof(PutAsync), "LoggingUpdatedCustomer", id));
            return(Ok(customerDataActionResult.CustomerEntity));
        }
Ejemplo n.º 7
0
        public async Task PostAsyncWithValidCustomerInfoAddsCustomerAndReturns200OK()
        {
            using (var customersDataProvider = CreateCustomersDataProvider())
            {
                // arrange
                var testLogger          = CreateTestLogger();
                var customersController = CreateTestCustomersController(customersDataProvider, testLogger);
                var newCustomer         = new CustomerDataTransferObject
                {
                    FirstName   = "Jon",
                    LastName    = "Smith",
                    PhoneNumber = "555-555-5555"
                };

                // act
                // Pass the ResourceManager explicitly since there's no global service provider to provide it
                var result = await customersController.PostAsync(newCustomer, _serviceProvider.GetRequiredService <ResourceManager>());

                // assert status code
                Assert.Equal(StatusCodes.Status200OK, result.StatusCode);

                // assert logging
                var customerName = $"{newCustomer.FirstName} {newCustomer.LastName}";
                Assert.Equal(2, testLogger.LoggedMessages.Count);
                VerifyLogMessage(testLogger, string.Format(LoggingAddingCustomerText, customerName));
                VerifyLogMessage(testLogger, string.Format(LoggingAddedCustomerText, customerName), LogLevel.Information, 1);

                // assert customer was added
                var customersResult = customersController.Get();
                Assert.Equal(1, customersResult.Count());
                var customerResult = customersResult.First();
                Assert.Equal(newCustomer.FirstName, customerResult.FirstName);
                Assert.Equal(newCustomer.LastName, customerResult.LastName);
            }
        }
Ejemplo n.º 8
0
 /// <summary>
 /// Ensures each customer property except id are equal in both customer objects
 /// </summary>
 internal void CompareCustomers(CustomerDataTransferObject customerInfo, CustomerEntity customerEntity)
 {
     foreach (var item in customerInfo.GetType().GetTypeInfo().GetProperties())
     {
         var customerEntityPropertyInfo = GetCustomerEntityPropertyInfo(item);
         Assert.Equal(customerEntityPropertyInfo.GetValue(customerEntity), item.GetValue(customerInfo));
     }
 }
        public async Task AddCustomerAsyncWithNullCustomerInfoThrowsArgumentNullException()
        {
            using (var customersDataProvider = CreateCustomersDataProvider())
            {
                CustomerDataTransferObject customerInfo = null;

                await Assert.ThrowsAsync <ArgumentNullException>(async() => await customersDataProvider.AddCustomerAsync(customerInfo));
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Updates an existing customer's information to the customerDataTransferObject
        /// </summary>
        public async Task <CustomerEntity> UpdateCustomerAsync(Guid id, CustomerDataTransferObject customerDataTransferObject)
        {
            var customerEntity = FindCustomer(id);

            UpdateCustomerInfo(customerEntity, customerDataTransferObject);

            await SaveChangesAsync();

            return(customerEntity);
        }
 public void UpdateCustomerAfterJsonPatchDocument(CustomerDataTransferObject customerModified)
 {
     _database.Customers.Update(new Customer
     {
         Name     = customerModified.Name,
         Code     = customerModified.Code,
         Adress   = customerModified.Adress,
         Discount = customerModified.Discount
     });
     _database.Save();
 }
Ejemplo n.º 12
0
        public async Task <IActionResult> AddCustomer(CustomerDataTransferObject customer)
        {
            SetCorrelationId();

            if (ModelState.IsValid)
            {
                await _customersService.AddCustomerAsync(customer);

                return(RedirectToAction(nameof(CustomersList)));
            }

            return(View(customer));
        }
        public async Task TryAddCustomerAsyncWithInvalidCustomerInfoReturnsFalse()
        {
            using (var customersDataProvider = CreateCustomersDataProvider())
            {
                // arrange
                var customerDataTransferObject = new CustomerDataTransferObject();

                // Assert
                var result = await customersDataProvider.TryAddCustomerAsync(customerDataTransferObject);

                Assert.False(result.IsSuccess);
                Assert.Null(result.CustomerEntity);
            }
        }
        public Guid CreateCustomer(CustomerDataTransferObject customer)
        {
            Guid Id = Guid.NewGuid();

            _database.Customers.Create(new Customer
            {
                Id       = Id,
                Name     = customer.Name,
                Code     = customer.Code,
                Adress   = customer.Adress,
                Discount = customer.Discount
            });
            _database.Save();
            return(Id);
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Updates an existing customer's information with the customerDataTransferObject
        /// </summary>
        private void UpdateCustomerInfo(CustomerEntity customerEntity,
                                        CustomerDataTransferObject customerDataTransferObject)
        {
            if (customerEntity == null ||
                customerDataTransferObject == null ||
                !customerDataTransferObject.ValidateCustomerDataTransferObject())
            {
                throw new ArgumentException();
            }

            foreach (var item in customerDataTransferObject.GetType().GetTypeInfo().GetProperties())
            {
                var desinationPropertyInfo = typeof(CustomerEntity).GetProperty(item.Name);
                desinationPropertyInfo?.SetValue(customerEntity, item.GetValue(customerDataTransferObject));
            }
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Returns a list of customers
        /// </summary>
        public async Task <IActionResult> AddCustomerAsync(CustomerDataTransferObject customer)
        {
            var query   = "/Api/Customers";
            var content = new StringContent(JsonConvert.SerializeObject(customer), Encoding.UTF8, "application/json");

            try
            {
                var result = await ExecuteWithResiliencePolicies(() => _client.PostAsync(query, content));

                return(new StatusCodeResult((int)result.StatusCode));
            }
            catch (HttpRequestException)
            {
                return(new StatusCodeResult(StatusCodes.Status503ServiceUnavailable));
            }
        }
Ejemplo n.º 17
0
        /// <summary>
        /// Tries to add a customer. If the customer is added, then returns true
        /// </summary>
        public async Task <CustomerDataActionResult> TryAddCustomerAsync(CustomerDataTransferObject customerDataTransferObject)
        {
            try
            {
                var customerEntity = await AddCustomerAsync(customerDataTransferObject);

                if (customerEntity == null)
                {
                    return(_failedCustomerDataActionResult);
                }

                return(new CustomerDataActionResult(true, customerEntity));
            }
            catch
            {
                return(_failedCustomerDataActionResult);
            }
        }
        public async Task UpdateAsyncNonExistingCustomerThrowsInvalidOperationException()
        {
            using (var customersDataProvider = CreateTestCustomerDataProvider(SampleListOfCustomerDataTransferObjects))
            {
                // arrange
                var customerDataTransferObject = new CustomerDataTransferObject
                {
                    FirstName   = "Joe",
                    LastName    = "Smith",
                    PhoneNumber = "555-555-5555"
                };

                var guid = Guid.NewGuid();

                // assert
                await Assert.ThrowsAsync <InvalidOperationException>(async() => await
                                                                     customersDataProvider.UpdateCustomerAsync(guid, customerDataTransferObject));
            }
        }
        public async Task AddCustomerAsyncWithValidCustomerInfoAddsCustomer()
        {
            using (var customersDataProvider = CreateCustomersDataProvider())
            {
                // arrange
                var customerInfo = new CustomerDataTransferObject
                {
                    FirstName   = "Jon",
                    LastName    = "Smith",
                    PhoneNumber = "555-555-5555"
                };

                // act
                var result = await customersDataProvider.AddCustomerAsync(customerInfo);

                // assert
                Assert.NotEqual(Guid.Empty, result.Id);
                Assert.Equal(customerInfo.FirstName, result.FirstName);
                Assert.Equal(customerInfo.LastName, result.LastName);
            }
        }
        public async Task TryUpdateCustomerAsyncNonExistingCustomerReturnsFalse()
        {
            using (var customersDataProvider = CreateTestCustomerDataProvider(SampleListOfCustomerDataTransferObjects))
            {
                // arrange
                var customerDataTransferObject = new CustomerDataTransferObject
                {
                    FirstName   = "Joe",
                    LastName    = "Smith",
                    PhoneNumber = "555-555-5555"
                };

                var guid = Guid.NewGuid();

                // act
                var customerDataActionResult =
                    await customersDataProvider.TryUpdateCustomerAsync(guid, customerDataTransferObject);

                // assert
                Assert.False(customerDataActionResult.IsSuccess);
                Assert.Null(customerDataActionResult.CustomerEntity);
            }
        }
Ejemplo n.º 21
0
        /// <summary>
        /// Tries to update an existing customer with the customerDataTransferObject
        /// </summary>
        public async Task <CustomerDataActionResult> TryUpdateCustomerAsync(Guid id, CustomerDataTransferObject customerDataTransferObject)
        {
            if (!CustomerExists(id))
            {
                return(_failedCustomerDataActionResult);
            }

            try
            {
                var customerEntity = await UpdateCustomerAsync(id, customerDataTransferObject);

                if (customerEntity == null)
                {
                    return(_failedCustomerDataActionResult);
                }

                return(new CustomerDataActionResult(true, customerEntity));
            }
            catch
            {
                return(_failedCustomerDataActionResult);
            }
        }
        public async Task <ObjectResult> PostAsync([FromBody] CustomerDataTransferObject customerDataTransferObject,
                                                   [FromServices] ResourceManager resourceManager)
        {
            if (customerDataTransferObject == null || !customerDataTransferObject.ValidateCustomerDataTransferObject())
            {
                _logger.LogError(BuildLogInfo(nameof(PostAsync), "CustomerInfoInvalid"));
                return(BadRequest(BuildStringFromResource("CustomerInfoInvalid")));
            }

            var customerName = $"{customerDataTransferObject.FirstName} {customerDataTransferObject.LastName}";

            _logger.LogInformation(BuildLogInfo(nameof(PostAsync), "LoggingAddingCustomer", customerName));
            var customerDataActionResult = await _customersDataProvider.TryAddCustomerAsync(customerDataTransferObject);

            if (!customerDataActionResult.IsSuccess)
            {
                _logger.LogError(BuildLogInfo(nameof(PostAsync), "UnexpectedServerError"));
                return(StatusCode(StatusCodes.Status500InternalServerError, BuildStringFromResource("UnexpectedServerError")));
            }

            _logger.LogInformation(BuildLogInfo(nameof(PostAsync), "LoggingAddedCustomer", customerName));
            return(Ok(customerDataActionResult.CustomerEntity));
        }