public void Pay_InvalidParameters_CauseArgumentException(string cardName, string orderId, int amount) { var mock = new Mock <IPacketTransport>(); mock.Setup(tp => tp.SendRequest <Payment, OperationStatus>(It.IsAny <Payment>())) .Returns(new OperationStatus { ResultCode = ResultCode.Ok }); Card invalidCard = SampleData.cards.Find(card => card.Name == cardName); SuatmmExchange api = new SuatmmExchange(mock.Object); Action testCode = () => api.Pay(orderId, invalidCard.Number.Replace(" ", ""), invalidCard.ExpiryMonth, invalidCard.ExpiryYear, invalidCard.Cvv, invalidCard.CardHolderName, amount); Assert.Throws <ArgumentException>(testCode); }
public void Pay_ValidCard_ReturnsOk() { var mock = new Mock <IPacketTransport>(); mock.Setup(tp => tp.SendRequest <Payment, OperationStatus>(It.IsAny <Payment>())) .Returns(new OperationStatus { ResultCode = ResultCode.Ok }); SuatmmExchange api = new SuatmmExchange(mock.Object); Card unlimitedCard = SampleData.cards.Find(card => card.Name == "Безлимитная карта"); ResultCode resultCode = api.Pay("100", unlimitedCard.Number.Replace(" ", ""), unlimitedCard.ExpiryMonth, unlimitedCard.ExpiryYear, unlimitedCard.Cvv, unlimitedCard.CardHolderName, 100); Assert.Equal(ResultCode.Ok, resultCode); }
static void Main(string[] args) { string host = "localhost"; string port = "13000"; foreach (string arg in args) { if (arg.ToLowerInvariant().StartsWith("site=")) { host = arg.Split('=')[1]; } else if (arg.ToLowerInvariant().StartsWith("port=")) { port = arg.Split('=')[1]; } else { Console.WriteLine("usage: SUATMM_Demo.exe [site=<site>] [port=<port>]"); Console.WriteLine("example: SUATMM_Demo.exe site=thisserver.* port=8080"); return; } } Uri serverUri = new Uri($"http://{host}:{port}"); Console.WriteLine($"Сервер {serverUri.ToString()}"); SuatmmExchange api = new SuatmmExchange(new HttpPacketTransport(serverUri)); //тестовые карты var cards = SampleData.cards; string command = "0"; while (command != "4") { switch (command) { case "1": #region Pay { //Выбор карты int chosenCardId = int.Parse( AskConsole( question: string.Format("Выбор карты:\r\n{0}", PrintList(cards)), isAnswerCorrect: answer => int.TryParse(answer, out chosenCardId) && chosenCardId < cards.Count)); Card card = cards[chosenCardId]; //Суммы int amount = int.Parse( AskConsole( question: "Сумма заказа (в копейках)", isAnswerCorrect: answer => int.TryParse(answer, out amount) && amount > 0)); //Номер заказа string orderid = AskConsole( question: "Номер заказа", isAnswerCorrect: answer => !String.IsNullOrWhiteSpace(answer)); //Подытог Console.WriteLine(""); Console.WriteLine("Карта оплаты: {0}", card.ToString()); Console.WriteLine("Сумма: {0} копеек ({1} рублей)", amount, decimal.Divide(amount, 100)); Console.WriteLine("Номер заказа:{0}", orderid); Console.WriteLine(""); //Вызов Api if (AskCountinue()) { try { ResultCode code = api.Pay(orderid, card.Number.Replace(" ", ""), card.ExpiryMonth, card.ExpiryYear, card.Cvv, card.CardHolderName, amount); switch (code) { //ok case ResultCode.Ok: Console.WriteLine("Оплата выполнена успешно"); break; //error case ResultCode.CardDoesNotExist: Console.WriteLine("Карта с такими параметрами не найдена"); break; case ResultCode.CardIsExpired: Console.WriteLine("Срок действия карты закончился"); break; case ResultCode.CardIsFrozen: Console.WriteLine("Карта заблокирована"); break; case ResultCode.DuplicateOrderId: Console.WriteLine("Заказ таким номером уже был обработан ранее"); break; case ResultCode.InsufficientFunds: Console.WriteLine("Недостаточно средств"); break; //general error case ResultCode.GeneralError: Console.WriteLine("Операция не может быть проведена банком. Попробуйте выполнить позже"); break; default: Console.WriteLine($"Результат обработки: {code}"); break; } } catch (ArgumentException ex) { Console.WriteLine("Неверный параметр"); Console.WriteLine(ex.Message); } catch (Exception ex) { Console.WriteLine("Неожидаемое исключение"); Console.WriteLine(ex.Message); throw; } } } break; #endregion case "2": #region GetStatus { string orderid = AskConsole("Номер заказа:", a => !String.IsNullOrWhiteSpace(a)); Console.WriteLine(""); Console.WriteLine($"Номер заказа: {orderid}"); Console.WriteLine(""); //Вызов Api if (AskCountinue()) { try { ResultCode code = api.GetStatus(orderid); switch (code) { //status case ResultCode.OrderNotFound: Console.WriteLine("Заказ с таким номером не был обработан ранее"); break; case ResultCode.OrderPaid: Console.WriteLine("Заказ оплачен"); break; case ResultCode.OrderOnHold: Console.WriteLine("Оплата заказа была приостановлена"); break; case ResultCode.OrderRefunded: Console.WriteLine("Заказ аннулирован, средства возвращены плательщику"); break; //general error case ResultCode.GeneralError: Console.WriteLine("Операция не может быть проведена банком. Попробуйте выполнить позже"); break; default: Console.WriteLine($"Результат обработки: {code}"); break; } } catch (ArgumentException ex) { Console.WriteLine("Неверный параметр"); Console.WriteLine(ex.Message); } catch (PacketTransportException ex) { Console.WriteLine("Ошибка соединения с сервером"); Console.WriteLine(ex.InnerException.Message); } catch (Exception ex) { Console.WriteLine("Неожидаемое исключение"); Console.WriteLine(ex.Message); throw; } } } break; #endregion case "3": #region Refund { string orderid = AskConsole("Номер заказа для возврата:", a => !String.IsNullOrWhiteSpace(a)); Console.WriteLine(""); Console.WriteLine($"Номер заказа: {orderid}"); Console.WriteLine(""); //Вызов Api if (AskCountinue()) { try { ResultCode code = api.Refund(orderid); switch (code) { //ok case ResultCode.Ok: Console.WriteLine("Возврат выполнен успешно"); break; //status case ResultCode.OrderNotFound: Console.WriteLine("Заказ с таким номером не был обработан ранее"); break; case ResultCode.OrderIsNotPaid: Console.WriteLine("Заказ был возвращен ранее или приостеновлен"); break; case ResultCode.CardIsExpired: Console.WriteLine("Срок действия карты для возврата закончился"); break; case ResultCode.CardIsFrozen: Console.WriteLine("Карта для возврата заблокирована"); break; //general error case ResultCode.GeneralError: Console.WriteLine("Операция не может быть проведена банком. Попробуйте выполнить позже"); break; default: Console.WriteLine($"Результат обработки: {code}"); break; } } catch (ArgumentException ex) { Console.WriteLine("Неверный параметр"); Console.WriteLine(ex.Message); } catch (PacketTransportException ex) { Console.WriteLine("Ошибка соединения с сервером"); Console.WriteLine(ex.InnerException.Message); } catch (Exception ex) { Console.WriteLine("Неожидаемое исключение"); Console.WriteLine(ex.Message); throw; } } } break; #endregion default: break; } Console.WriteLine(""); Console.WriteLine("1. Pay (Оплата заказа)"); Console.WriteLine("2. GetStatus (Проверка статуса заказа)"); Console.WriteLine("3. Refund (Возврат заказа)"); Console.WriteLine("4. Выход"); Console.WriteLine(""); command = Console.ReadLine(); } }