public IActionResult AssociateCustomerUser([FromBody] AssociateCustomerUserEvent customerUser) { try { customerUser.ReceivedUTC = DateTime.UtcNow; if (customerService.GetCustomer(customerUser.CustomerUID) == null) { logger.LogInformation(Messages.CustomerDoesntExist); return(BadRequest(Messages.CustomerDoesntExist)); } var userCustomerInDb = userCustomerService.GetCustomerUser(customerUser.CustomerUID, customerUser.UserUID); if (userCustomerInDb != null) { logger.LogInformation(Messages.CustomerUserAlreadyExists); return(BadRequest(Messages.CustomerUserAlreadyExists)); } if (userCustomerService.AssociateCustomerUser(customerUser)) { return(Ok()); } logger.LogWarning(Messages.UnableToSaveToDb); return(BadRequest(Messages.UnableToSaveToDb)); } catch (Exception ex) { logger.LogError(string.Format(Messages.ExceptionOccured, ex.Message, ex.StackTrace)); return(StatusCode((int)HttpStatusCode.InternalServerError, ex.Message)); } }
public void AssociateCustomerUser_GivenPayload_ExpectedTransactionStatus(AssociateCustomerUserEvent userEvent, bool hasValidCustomer, bool transactionStatus, int upsertCalls, int publishCalls, bool hasException) { //Arrange DbCustomer customerData = hasValidCustomer ? new DbCustomer() { CustomerID = 109 } : null; if (hasException) { transaction.Get <DbCustomer>(Arg.Any <string>()).Returns(e => throw new Exception()); } else { transaction.Get <DbCustomer>(Arg.Any <string>()).Returns(new List <DbCustomer> { customerData }); } transaction.Execute(Arg.Any <List <Action> >()) .Returns(a => { a.Arg <List <Action> >().ForEach(action => action.Invoke()); return(true); }); //Act if (hasException) { Assert.Throws <Exception>(() => userCustomerService.AssociateCustomerUser(userEvent)); } else { var resultData = userCustomerService.AssociateCustomerUser(userEvent); Assert.Equal(transactionStatus, resultData); } //Assert transaction.Received(upsertCalls).Upsert( Arg.Is <DbUserCustomer>(userCust => ValidateCustomerUserObject(userEvent, userCust, customerData))); transaction.Received(publishCalls).Publish( Arg.Is <List <KafkaMessage> >(messages => messages .TrueForAll(m => ValidateCustomerUserKafkaObject(false, m, userEvent)))); }