/// <summary> /// /// </summary> /// <param name="paidAmount"></param> /// <param name="productAmount"></param> /// <returns></returns> private string CalculateChange(string paidAmount, string productAmount) { // Limpa mensagem de erro this.UxTxtOutput.Text = string.Empty; // Monta o request ChangeRequest changeRequest = new ChangeRequest(); changeRequest.PaidAmount = int.Parse(paidAmount); changeRequest.ProductAmount = int.Parse(productAmount); // Chama o calculo do troco ChangeManager changeManager = new ChangeManager(); // Assina o evento de conclusão de processador. changeManager.OnProcessorDone += changeManager_OnProcessorDone; ChangeResponse changeResponse = changeManager.CalculateChange(changeRequest); // Verifica se o calculo foi feito corretamente if (changeResponse.Success == true) { // Instancia montador de string StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendFormat("Moedas:"); foreach (ChangeData changeInCoin in changeResponse.ChangeDataCollection) { stringBuilder.AppendFormat("\r\n{0} {1}(s) de {2} centavo(s)", changeInCoin.Quantity, changeInCoin.Name, changeInCoin.AmountInCents); } // Devolve a mensagem de erro para a interface this.UxTxtOutput.AppendText(stringBuilder.ToString()); // Retorna troco return(changeResponse.ChangeAmount.ToString()); } else { // Instancia montador de string StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendFormat("Deu ruim!"); // Varre a coleção de erros foreach (ErrorReport errorReport in changeResponse.ErrorReport) { stringBuilder.AppendFormat("\r\nErro no campo {0}: {1}", errorReport.Field, errorReport.Message); } // Devolve a mensagem de erro para a interface this.UxTxtOutput.AppendText(stringBuilder.ToString()); // Retorna troco vazio return(string.Empty); } }
public void CalculateChange_NegativeProductAmount() { ChangeManager changeManager = new ChangeManager(); IocFactory.Register <IConfigurationUtility, ConfigurationUtilityMock>(); ChangeRequest changeRequest = new ChangeRequest(); changeRequest.PaidAmount = 100; changeRequest.ProductAmount = -100; ChangeResponse changeResponse = changeManager.CalculateChange(changeRequest); Assert.IsNotNull(changeResponse); Assert.IsNotNull(changeResponse.ErrorReport); Assert.AreEqual(changeResponse.ErrorReport.Count(), 1); Assert.AreEqual(changeResponse.ErrorReport[0].Field, "ChangeRequest.ProductAmount"); Assert.AreEqual(changeResponse.ChangeAmount, 0); }
public void CalculateChange_WithValidValue() { ChangeManager changeManager = new ChangeManager(); ChangeRequest changeRequest = new ChangeRequest(); changeRequest.PaidAmount = 73891; changeRequest.ProductAmount = 100; ChangeResponse changeResponse = changeManager.CalculateChange(changeRequest); Assert.IsNotNull(changeResponse); Assert.IsNotNull(changeResponse.ChangeDataCollection); Assert.AreEqual(7, changeResponse.ChangeDataCollection.SingleOrDefault(o => o.AmountInCents == 10000).Quantity); Assert.AreEqual(1, changeResponse.ChangeDataCollection.SingleOrDefault(o => o.AmountInCents == 2000).Quantity); Assert.AreEqual(1, changeResponse.ChangeDataCollection.SingleOrDefault(o => o.AmountInCents == 1000).Quantity); Assert.AreEqual(1, changeResponse.ChangeDataCollection.SingleOrDefault(o => o.AmountInCents == 500).Quantity); Assert.AreEqual(1, changeResponse.ChangeDataCollection.SingleOrDefault(o => o.AmountInCents == 200).Quantity); Assert.AreEqual(1, changeResponse.ChangeDataCollection.SingleOrDefault(o => o.AmountInCents == 90).Quantity); Assert.AreEqual(1, changeResponse.ChangeDataCollection.SingleOrDefault(o => o.AmountInCents == 1).Quantity); }