private void GetAndShowBuy(string command) { string[] split = command.Split(' '); string username = split[0]; int productID = Convert.ToInt32(split[1]); bool success = false; BuyTransaction trans = null; try { trans = Core.BuyProduct(Core.GetUserByUsername(username), Core.GetProductByID(productID)); success = Core.ExecuteTransaction(trans); } catch (UserNotFoundException e) { Ui.DisplayUserNotFound(e.Message); } catch (ProductNotFoundException e) { Ui.DisplayProductNotFound(e.Message); } catch (InsufficientFundsException e) { Ui.DisplayInsufficientCash(e.Message); } if (success == true) { Ui.DisplayUserBuysProduct(trans); } }
private void MultiBuyProduct(User user, Product product, int count) { if (!product.Active) { throw new NotActiveProductException($"This product is not active: {product.Name}"); } if (count <= 0) { throw new InvalidDataException($"Amount has to be positive! typed: ({count})"); } BuyTransaction bt = null; if (user.Balance < (product.Price * count) && !product.CanBeBoughtOnCredit) { SUI.DisplayInsufficientCash(user, product, count); } else { for (int i = 0; i < count; i++) { bt = S.BuyProduct(user, product); } SUI.DisplayUserBuysProduct(count, bt); } }
public BuyTransaction CreateBuyTransaction(IUser user, IProduct product) { BuyTransaction transaction = new BuyTransaction(user, DateTime.Now, product); transaction.NewTransactionExecutedEvent += TransactionController.Add; return(transaction); }
public BuyTransaction BuyProduct(IUser user, IProduct product, uint count = 1) { BuyTransaction buyTransaction = new BuyTransaction(user, product, DateTime.Now, count); ExecuteTransaction(buyTransaction); return(buyTransaction); }
public void DisplayUserBuysProduct(int count, BuyTransaction transaction) { Console.WriteLine($"proukter købt:"); for (int i = 0; i < count; i++) { Console.WriteLine(transaction.ToString()); } }
public void ExecuteTest() { var user = new User("test", "test", "test", "*****@*****.**", 99); var product1 = new BuyTransaction(DateTime.Now, user, new Product("test", 100, true)); var product2 = new BuyTransaction(DateTime.Now, user, new Product("test", 0, false)); Assert.Throws <InsufficientCreditsException>(new TestDelegate(() => { product1.Execute(); })); Assert.Throws <NotActiveException>(new TestDelegate(() => { product2.Execute(); })); }
public void ExecuteInvalidBuyTransaction_WithCreditOff_ThrowError() { User user = new User("first name", "last name", "username", "*****@*****.**", 0); Product product = new Product(69, "TestProduct", 25, true, false); BuyTransaction bt = new BuyTransaction(user, product.Price, product); Assert.Throws <InsufficientCreditsException>(() => bt.Execute()); }
public void ExecuteInvalidBuyTransaction_WithInactiveProduct_ThrowError() { User user = new User("first name", "last name", "username", "*****@*****.**", 500); Product product = new Product(69, "TestProduct", 25, false, true); BuyTransaction bt = new BuyTransaction(user, product.Price, product); Assert.Throws <NotActiveProductException>(() => bt.Execute()); }
public BuyTransaction BuyProduct(IUser user, IProductBase product, decimal amount) { BuyTransaction buyTransaction = new BuyTransaction(user, DateTime.Now, product); ExecuteTransaction(buyTransaction); return(buyTransaction); }
public void CreateValidBuyTransaction_Succes() { User user = new User("first name", "last name", "username", "*****@*****.**", 500); Product product = new Product(69, "TestProduct", 25, true, false); BuyTransaction bt = new BuyTransaction(user, product.Price, product); Assert.IsTrue(bt.User == user && bt.ProductBought == product && bt.AmountAtPurchase == product.Price); }
public void ExecuteTransactions_ListOfTransactions_shouldAddSucceededTransactionsToListOfExecutedTransactions(string desc) { //arrange User user = new User(id: 1, firstname: "jakob1", lastname: "skov", username: "******", email: "*****@*****.**", balance: 100, lowBalanceDefinition: 50); Product A = new Product(id: 1, name: "A", price: 50, canBeBoughtOnCredit: true); Product B = new Product(id: 2, name: "B", price: 60, active: false, canBeBoughtOnCredit: true); Product C = new Product(id: 3, name: "C", price: 70, canBeBoughtOnCredit: true); Product D = new Product(id: 4, name: "D", price: 80, canBeBoughtOnCredit: true); BuyTransaction btr1 = new BuyTransaction(user: user, product: A); BuyTransaction btr2 = new BuyTransaction(user: user, product: B); BuyTransaction btr3 = new BuyTransaction(user: user, product: C); BuyTransaction btr4 = new BuyTransaction(user: user, product: D); InsertCashTransaction Itr1 = new InsertCashTransaction(user, 100); //InsertCashTransaction Itr2 = new InsertCashTransaction(user, 10); List <Product> products = new List <Product>() { A, B, C, D }; List <User> users = new List <User>() { user }; Stregsystem stregsystem = new Stregsystem(users: users, products: products); List <Transaction> expected = new List <Transaction>() { btr1, Itr1, btr3, btr4 }; //act try { stregsystem.ExecuteTransaction(btr1); } catch { } try { stregsystem.ExecuteTransaction(btr2); } catch { } try { stregsystem.ExecuteTransaction(Itr1); } catch { } try { stregsystem.ExecuteTransaction(btr3); } catch { } try { stregsystem.ExecuteTransaction(btr4); } catch { } List <Transaction> actual = stregsystem.ExecutedTransactions; //assert Assert.AreEqual(expected, actual, $"{desc}: actual:{actual} expected:{expected}"); }
public void BuyTransaction_CallToString_ReturnsString() { const decimal amount = 10; Product product = Substitute.For <Product>("Milk", amount); User user = Substitute.For <User>(userArgs); BuyTransaction transaction = new BuyTransaction(user, product); Assert.That(transaction.ToString(), Is.TypeOf <string>()); }
public void ExecuteValidBuyTransaction_Succes(decimal amount) { User user = new User("first name", "last name", "username", "*****@*****.**", amount); Product product = new Product(69, "TestProduct", 25, true, true); BuyTransaction bt = new BuyTransaction(user, product.Price, product); bt.Execute(); Assert.IsTrue((amount - product.Price) == user.Balance); }
public void BuyProduct_UserBuysProduct_ExpectTransactionUserEqualsUser() { BarcodeSystemManager systemManager = new BarcodeSystemManager(); IUser user = CreateUser(100); IProduct product = CreateProduct(100, false); BuyTransaction transaction = systemManager.BuyProduct(user, product); Assert.AreEqual(user, transaction.User); }
public void Execute_UserBuysProduct_IsUserBalanceUpdatedCorrectly(decimal userBalance, decimal productPrice) { IUser user = CreateUser(userBalance); IProduct product = CreateProduct(productPrice); ITransaction transaction = new BuyTransaction(user, product, DateTime.Now); transaction.Execute(); Assert.AreEqual(userBalance - productPrice, user.Balance); }
public void GetTransactions_UserInt_shouldReturnListOf3LatestUserTransactions(string desc) { //arrange User user = new User(id: 1, firstname: "jakob1", lastname: "skov", username: "******", email: "*****@*****.**", balance: 1000, lowBalanceDefinition: 50); Product A = new Product(id: 1, name: "A", price: 50); Product B = new Product(id: 2, name: "B", price: 60); Product C = new Product(id: 3, name: "C", price: 70); Product D = new Product(id: 4, name: "D", price: 80); BuyTransaction btr1 = new BuyTransaction(user: user, product: A); BuyTransaction btr2 = new BuyTransaction(user: user, product: B); BuyTransaction btr3 = new BuyTransaction(user: user, product: C); BuyTransaction btr4 = new BuyTransaction(user: user, product: D); InsertCashTransaction Itr1 = new InsertCashTransaction(user, 100); //InsertCashTransaction Itr2 = new InsertCashTransaction(user, 10); List <Product> products = new List <Product>() { A, B, C, D }; List <User> users = new List <User>() { user }; Stregsystem stregsystem = new Stregsystem(users: users, products: products); List <Transaction> expected = new List <Transaction>() { Itr1, btr3, btr4 }; //act try { stregsystem.ExecuteTransaction(btr1); } catch { } try { stregsystem.ExecuteTransaction(btr2); } catch { } try { stregsystem.ExecuteTransaction(Itr1); } catch { } try { stregsystem.ExecuteTransaction(btr3); } catch { } try { stregsystem.ExecuteTransaction(btr4); } catch { } List <Transaction> actual = stregsystem.GetTransactions(user, 3); //assert Assert.AreEqual(expected, actual, $"{desc}: actual:{actual} expected:{expected}"); }
public override void Execute() { if (!HasEnoughArguments(2)) { return; } string username = Command[0]; string productIdString = Command[1]; int amountToPurchase = 1; Product product; User user; if (Command.Length == 3 && !int.TryParse(Command[2], out amountToPurchase)) { barcodeCli.DisplayGeneralError($"{Command[2]} is not a valid amount."); return; } try { user = barcodeSystem.GetUserByUsername(username); if (uint.TryParse(productIdString, out uint productId)) { try { product = barcodeSystem.GetProductById(productId); try { BuyTransaction transaction = barcodeSystem.BuyProduct(user, product, amountToPurchase); this.transaction = transaction; Succeeded = transaction.Succeeded; barcodeCli.DisplayUserBuysProduct(transaction); } catch (InsufficientCreditsException) { barcodeCli.DisplayInsufficientCash(user, product); } } catch (ProductNotFoundException) { barcodeCli.DisplayProductNotFound(productIdString); } } } catch (UserNotFoundException) { barcodeCli.DisplayUserNotFound(username); } base.Execute(); }
public void ExecuteTransaction_AddsTransactionToListIfSuccessful_True() { BarcodeSystem barcodeSystem = Substitute.For <BarcodeSystem>(log); User user = Substitute.For <User>(userArgs); Product product = Substitute.For <Product>(productArgs); user.Balance = 100m; BuyTransaction successfulTransaction = barcodeSystem.BuyProduct(user, product); Assert.That(barcodeSystem.Transactions.Contains(successfulTransaction), Is.True); }
public void BuyTransaction_buyingSomethingYouCantAfford_ShouldThrowInsufficientCreditsException(string desc) { //arrange User user = new User(id: 1, firstname: "jakob1", lastname: "skov", username: "******", email: "*****@*****.**", balance: 100, lowBalanceDefinition: 50); Product apple = new Product(id: 1, name: "apple", price: 199); BuyTransaction tr = new BuyTransaction(user: user, product: apple); //act //assert Assert.Throws <InsufficientCreditsException>(() => tr.Execute(), desc); }
public void BuyTransaction_BuyProductWithInsufficientCredits_ThrowsException(decimal productPrice, decimal userBalance) { Product product = Substitute.For <Product>("Milk", productPrice); User user = Substitute.For <User>(userArgs); user.Balance = userBalance; BuyTransaction transaction = new BuyTransaction(user, product); Assert.Throws <InsufficientCreditsException>(transaction.Execute); }
public void BuyProduct_UserBuysProduct_ExpectTransactionAmountEqualsProductPrice() { const decimal productPrice = 100; BarcodeSystemManager systemManager = new BarcodeSystemManager(); IUser user = CreateUser(100); IProduct product = CreateProduct(productPrice, false); BuyTransaction transaction = systemManager.BuyProduct(user, product); Assert.AreEqual(productPrice, transaction.Amount); }
public void BuyTransaction_buyingInactiveProduct_ShouldThrowProductNotActivatedException(string desc) { //arrange User user = new User(id: 1, firstname: "jakob1", lastname: "skov", username: "******", email: "*****@*****.**", balance: 100, lowBalanceDefinition: 50); Product apple = new Product(id: 1, name: "apple", price: 10, active: false); BuyTransaction tr = new BuyTransaction(user: user, product: apple); //act //assert Assert.Throws <ProductNotActivatedException>(() => tr.Execute(), desc); }
public void BuyProduct_PurchaseWithEnoughCredit_Succeeds() { BarcodeSystem barcodeSystem = Substitute.For <BarcodeSystem>(log); User user = Substitute.For <User>(userArgs); Product product = Substitute.For <Product>(productArgs); user.Balance = 100m; BuyTransaction buyTransaction = barcodeSystem.BuyProduct(user, product); Assert.That(buyTransaction.Succeeded, Is.True); }
public void BuyTransaction_BuyProductWithSufficientCredits_Success(decimal productPrice) { Product product = Substitute.For <Product>("Milk", productPrice); User user = Substitute.For <User>(userArgs); user.Balance = productPrice; BuyTransaction transaction = new BuyTransaction(user, product); transaction.Execute(); Assert.That(transaction.Succeeded, Is.True); }
public void BuyTransaction_buyingProduct_ShouldWithdrawAmountFromUserBalance(string desc) { //arrange User user = new User(id: 1, firstname: "jakob1", lastname: "skov", username: "******", email: "*****@*****.**", balance: 100, lowBalanceDefinition: 50); Product apple = new Product(id: 1, name: "apple", price: 10, active: true); BuyTransaction tr = new BuyTransaction(user, apple); decimal expected = 90; //act tr.Execute(); //assert Assert.AreEqual(expected, user.Balance, $"{desc}: actual:{tr.User.Balance},expected:{expected}"); }
/// <summary> /// performs a buy transaction for coin having <paramref name="buyTransaction"/>.CoinId. /// </summary> /// <seealso cref="PortfolioEntry.Buy(Transaction)"/> /// <param name="buyTransaction"></param> /// <exception cref="ManagerNotInitializedException"> /// <seealso cref="GetPortfolioEntry(long)"/> /// </exception> /// <exception cref="CoinNotInPortfolioException"> /// <seealso cref="GetPortfolioEntry(long)"/> /// </exception> /// <exception cref="InvalidPriceException"> /// <seealso cref="PortfolioEntry.Buy(Transaction))"/> /// </exception> /// <exception cref="DatabaseCommunicationException"> /// <seealso cref="handleDatabaseHandlerException(string, SQLiteDatabaseHandlerException)"/> /// </exception> public void BuyCoin(BuyTransaction buyTransaction) { assertManagerInitialized("BuyCoin"); PortfolioEntry portfolioEntry = GetPortfolioEntry(buyTransaction.CoinId); try { portfolioEntry.Buy(buyTransaction); } catch (SQLiteDatabaseHandlerException sqliteDatabaseHandlerException) { handleDatabaseHandlerException("BuyCoin", sqliteDatabaseHandlerException); } }
public void ID_isGenerated_ShouldBeOrderedByTimeCreated(string desc) { //arrange User user = new User(); Product A = new Product(id: 1, name: "A ", price: 10); Product B = new Product(id: 2, name: "B ", price: 100); Product C = new Product(id: 3, name: "C ", price: 10); Product D = new Product(id: 4, name: "D ", price: 100); //TODO find en bedre test!! BuyTransaction tr1 = new BuyTransaction(user, A); System.Threading.Thread.Sleep(50); BuyTransaction tr2 = new BuyTransaction(user, B); System.Threading.Thread.Sleep(50); BuyTransaction tr3 = new BuyTransaction(user, C); System.Threading.Thread.Sleep(50); BuyTransaction tr4 = new BuyTransaction(user, D); List <BuyTransaction> expectedList = new List <BuyTransaction>() { tr4, tr3, tr2, tr1 }; string expected = ""; foreach (BuyTransaction item in expectedList) { expected += $"\n{item.Product.Name}{item.ID}"; } List <BuyTransaction> actualList = new List <BuyTransaction>() { tr2, tr1, tr3, tr4 }; string actual = ""; //act actualList.Sort(); foreach (BuyTransaction item in actualList) { actual += $"\n{item.Product.Name}{item.ID}"; } //assert Assert.AreEqual(expectedList, actualList, $"desc: \nactual:{actual}\nexpected:{expected}"); }
public void BuyTransaction_UndoProductPurchase_Success() { const decimal amount = 10; Product product = Substitute.For <Product>("Milk", amount); User user = Substitute.For <User>(userArgs); user.Balance = amount; BuyTransaction transaction = new BuyTransaction(user, product); transaction.Execute(); transaction.Undo(); Assert.That(transaction.Undone, Is.True); Assert.That(user.Balance, Is.EqualTo(amount)); }
public void UndoTransaction_UndoTransaction_Success() { const decimal productPrice = 10; BarcodeSystem barcodeSystem = Substitute.For <BarcodeSystem>(log); User user = Substitute.For <User>(userArgs); Product product = Substitute.For <Product>("Milk", productPrice); user.Balance = productPrice; BuyTransaction transaction = barcodeSystem.BuyProduct(user, product); barcodeSystem.UndoTransaction(transaction); Assert.That(transaction.Undone, Is.True); Assert.That(user.Balance, Is.EqualTo(productPrice)); }
public void ToString_BuyTransAction_ShouldReturnString(string desc) { //arrange User user = new User(); Product A = new Product(id: 1, name: "A ", price: 10); DateTime date = Convert.ToDateTime("1 / 1 / 2020"); Guid id = Guid.NewGuid(); decimal amount = 20; BuyTransaction tr = new BuyTransaction(user: user, product: A, date: date, id: id, amount: amount); string expected = $"{date};{id};Buy;{user};{A};{amount}"; //act string actual = tr.ToString(); //assert Assert.AreEqual(expected, actual, desc); }