public void ShouldFillOperationColumns() { // Arrange SalesService salesService = new SalesService( this.operationTableRepository, this.balanceTableRepository, this.blockedMoneyTableRepository, this.sharesNumberTableRepository, this.blockedSharesNumberTableRepository, this.shareTableRepository); var testBlockedMoney = new BlockedMoneyEntity() { Id = 2, CreatedAt = DateTime.Now, ClientBalance = new BalanceEntity() { Id = 2 }, Operation = new OperationEntity() { Id = 1 }, Customer = new ClientEntity() { Id = 2 }, Total = 1000.00M }; var testBlockedSharesNumber = new BlockedSharesNumberEntity() { Id = 2, CreatedAt = DateTime.Now, ClientSharesNumber = new SharesNumberEntity() { Id = 4 }, Operation = new OperationEntity() { Id = 1 }, Seller = new ClientEntity() { Id = 1 }, Share = new ShareEntity() { Id = 3 }, ShareTypeName = "sharename", Cost = 500, Number = 3, }; // Act salesService.FillOperationColumns(testBlockedMoney, testBlockedSharesNumber); // Assert operationTableRepository.Received(1).FillAllColumns(testBlockedMoney, testBlockedSharesNumber, Arg.Any <DateTime>()); operationTableRepository.Received(1).SaveChanges(); }
public void FillSellerColumns(BlockedSharesNumberEntity blockedSharesNumber) { var operation = this.dBContext.Operations.First(o => o.Id == blockedSharesNumber.Operation.Id); // it will fall here if we can't find operation.Seller = blockedSharesNumber.Seller; operation.Share = blockedSharesNumber.Share; operation.ShareTypeName = blockedSharesNumber.ShareTypeName; operation.Cost = blockedSharesNumber.Cost; operation.Number = blockedSharesNumber.Number; }
public void FillAllColumns(BlockedMoneyEntity blockedMoney, BlockedSharesNumberEntity blockedSharesNumber, DateTime chargeDate) { var operation = this.dBContext.Operations.First(o => o.Id == blockedMoney.Operation.Id); // it will fall here if we can't find operation.DebitDate = blockedMoney.CreatedAt; operation.Customer = blockedMoney.Customer; operation.Total = blockedMoney.Total; operation.Seller = blockedSharesNumber.Seller; operation.Share = blockedSharesNumber.Share; operation.ShareTypeName = blockedSharesNumber.ShareTypeName; operation.Cost = blockedSharesNumber.Cost; operation.Number = blockedSharesNumber.Number; operation.ChargeDate = chargeDate; }
public void FillOperationColumns(BlockedMoneyEntity blockedMoney, BlockedSharesNumberEntity blockedSharesNumber) { /* Operation entity: * DateTime DebitDate { get; set; } // it's date from Customer blocked money * ClientEntity Customer { get; set; } * DateTime ChargeDate { get; set; } // it's date of finish * ClientEntity Seller { get; set; } * ShareEntity Share { get; set; } * string ShareTypeName { get; set; } // see ShareTypeEntity.Name (The name will be fixed here at the time of purchase) * decimal Cost { get; set; } // see ShareTypeEntity.Cost (The cost will be fixed here at the time of purchase) * int Number { get; set; } // Number of shares for deal * decimal Total { get; set; } // Total = Cost * Number */ this.operationTableRepository.FillAllColumns(blockedMoney, blockedSharesNumber, DateTime.Now); this.operationTableRepository.SaveChanges(); }
/* 'Blocked shares number' methods */ public BlockedSharesNumberEntity CreateBlockedSharesNumber(BlockedSharesNumberRegistrationInfo args) { var entityToAdd = new BlockedSharesNumberEntity() { CreatedAt = DateTime.Now, ClientSharesNumber = args.ClientSharesNumber, Operation = args.Operation, Seller = args.ClientSharesNumber.Client, Share = args.ClientSharesNumber.Share, ShareTypeName = args.ClientSharesNumber.Share.Type.Name, Cost = args.ClientSharesNumber.Share.Type.Cost, Number = args.Number }; this.blockedSharesNumberTableRepository.Add(entityToAdd); this.blockedSharesNumberTableRepository.SaveChanges(); return(entityToAdd); }
public void ShouldRemoveBlockedSharesNumberItem() { // Arrange SalesService salesService = new SalesService( this.operationTableRepository, this.balanceTableRepository, this.blockedMoneyTableRepository, this.sharesNumberTableRepository, this.blockedSharesNumberTableRepository); var blockedSharesNumber = new BlockedSharesNumberEntity() { Id = 43 }; // Act salesService.RemoveBlockedSharesNumber(blockedSharesNumber); // Assert blockedSharesNumberTableRepository.Received(1).Remove(blockedSharesNumber.Id); blockedSharesNumberTableRepository.Received(1).SaveChanges(); }
/* Sale * 0. Get info about purchase from program (Customer, Number of Shares, Total (money)) * 1. Create empty operation * 2.1 Get Customer balance info * 2.2 - Customer balance amount * 3. Create blocked money * 4.1 Get Seller shares number info * 4.2 - Seller shares number * 5. Create blocked shares number // after that action purchase can't cancel * 6.1 Get Seller balance info * 6.2 + Seller balance amount * 7.1 Get Customer shares number info * 7.2 + Customer shares number * 8. Fill operation columns * 9. Remove blocked money * 10. Remove blocked shares number */ public void Deal(int customerId, int sellerId, int shareId, int requiredSharesNumber) { OperationEntity operation = null; SharesNumberEntity customerSharesNumber = null; SharesNumberEntity sellerSharesNumber = null; ClientEntity customer = null; //ClientEntity seller = null; BalanceEntity customerBalance = null; BalanceEntity sellerBalance = null; ShareEntity share = null; BlockedMoneyEntity blockedMoney = null; bool blockedMoneyFlag = false; BlockedSharesNumberEntity blockedSharesNumber = null; bool blockedSharesNumberFlag = false; decimal customerBalanceAmount = 0M; decimal total = 0M; int sellerSharesNumberNumber = 0; operation = CreateOperation(); try { sellerSharesNumber = SearchSharesNumberForBuy(shareId, requiredSharesNumber); // search required shares on stock exchange //seller = sellerSharesNumber.Client; //share = sellerSharesNumber.Share; share = GetShare(shareId); customerBalance = SearchBalanceByClientId(customerId); customer = customerBalance.Client; //sellerBalance = SearchBalanceByClientId(seller.Id); sellerBalance = SearchBalanceByClientId(sellerId); // get total CheckShareAndShareTypeStatuses(share); total = share.Type.Cost * requiredSharesNumber; // Blocked money customerBalanceAmount = customerBalance.Amount; if (customerBalanceAmount < total) { throw new ArgumentException("Customer don't have enough money."); } blockedMoneyFlag = ChangeBalance(customerBalance, customerBalanceAmount - total); blockedMoney = CreateBlockedMoney(new BlockedMoneyRegistrationInfo() { Operation = operation, ClientBalance = customerBalance, Total = total }); // Blocked shares Number sellerSharesNumberNumber = sellerSharesNumber.Number; blockedSharesNumberFlag = ChangeSharesNumber(sellerSharesNumber, sellerSharesNumberNumber - requiredSharesNumber); blockedSharesNumber = CreateBlockedSharesNumber(new BlockedSharesNumberRegistrationInfo() { ClientSharesNumber = sellerSharesNumber, Operation = operation, //Share = sellerSharesNumber.Share, //ShareTypeName = sellerSharesNumber.Share.Type.Name, //Cost = sellerSharesNumber.Share.Type.Cost, Number = requiredSharesNumber }); } catch { RemoveOperation(operation); if (blockedMoneyFlag) { ChangeBalance(customerBalance, customerBalanceAmount + total); if (blockedMoney != null) { RemoveBlockedMoney(blockedMoney); } } if (blockedSharesNumberFlag) { ChangeSharesNumber(sellerSharesNumber, sellerSharesNumberNumber + requiredSharesNumber); if (blockedSharesNumber != null) { RemoveBlockedSharesNumber(blockedSharesNumber); } } // throw new ArgumentException($"Deal was broken cause: {e.Message}"); throw; } if (sellerSharesNumber.Number == 0) { RemoveSharesNumber(sellerSharesNumber); } ChangeBalance(sellerBalance, sellerBalance.Amount + total); customerSharesNumber = SearchOrCreateSharesNumberForAddition(customer, share); ChangeSharesNumber(customerSharesNumber, customerSharesNumber.Number + requiredSharesNumber); FillOperationColumns(blockedMoney, blockedSharesNumber); RemoveBlockedMoney(blockedMoney); RemoveBlockedSharesNumber(blockedSharesNumber); }
public void RemoveBlockedSharesNumber(BlockedSharesNumberEntity blockedSharesNumber) { this.blockedSharesNumberTableRepository.Remove(blockedSharesNumber.Id); this.blockedSharesNumberTableRepository.SaveChanges(); }
public void Add(BlockedSharesNumberEntity entity) { this.dBContext.BlockedSharesNumbers.Add(entity); }