From 37fb9fd4daa8180e11f123f2ec6039b6dcc49bd2 Mon Sep 17 00:00:00 2001 From: k-romero Date: Wed, 18 Mar 2020 13:17:53 -0400 Subject: [PATCH 1/7] made changes --- src/main/java/sql/SqlController.java | 1 + src/main/java/stocks/Stock.java | 7 ++++++- src/test/java/account/PortfolioTest.java | 2 +- src/test/java/sql/SqlControllerTest.java | 1 - src/test/java/stocks/StockTest.java | 10 ++++++++++ 5 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/sql/SqlController.java b/src/main/java/sql/SqlController.java index 8c778aa..f9cfc31 100644 --- a/src/main/java/sql/SqlController.java +++ b/src/main/java/sql/SqlController.java @@ -43,6 +43,7 @@ public static void insertStock(){ public static TransactionMeta getStock(String stockSymbol, String month){ TransactionMeta.TransactionMetaBuilder builder = new TransactionMeta.TransactionMetaBuilder(); + connectSqlServer(); try{ Statement statement = connection.createStatement(); String sql = "SELECT * FROM " + stockSymbol + diff --git a/src/main/java/stocks/Stock.java b/src/main/java/stocks/Stock.java index 00d38df..a3ad724 100644 --- a/src/main/java/stocks/Stock.java +++ b/src/main/java/stocks/Stock.java @@ -1,5 +1,7 @@ package stocks; +import sql.SqlController; + import java.util.ArrayList; import java.util.List; @@ -38,11 +40,14 @@ public String getInfo(){ return info; } - //TODO - CONNECT TO DB PER DATE public Double getCurrentStockPrice(){ return currentStockPrice; } + public void updateCurrentStockPrice(String stockSymbol,String month){ + currentStockPrice = SqlController.getStock(stockSymbol,month).getClose(); + } + //TODO - CONNECT TO DB PER DATE public Double getValueOfPosition(){ return valueOfPosition; diff --git a/src/test/java/account/PortfolioTest.java b/src/test/java/account/PortfolioTest.java index 9a1286c..c565687 100644 --- a/src/test/java/account/PortfolioTest.java +++ b/src/test/java/account/PortfolioTest.java @@ -4,7 +4,7 @@ import org.junit.Test; import static org.junit.Assert.*; import stocks.StockEnum; -import stocks.StockEnumTest; + import java.util.logging.Level; import java.util.logging.Logger; diff --git a/src/test/java/sql/SqlControllerTest.java b/src/test/java/sql/SqlControllerTest.java index a316be2..1cfd615 100644 --- a/src/test/java/sql/SqlControllerTest.java +++ b/src/test/java/sql/SqlControllerTest.java @@ -14,7 +14,6 @@ public void connectionTest(){ @Test public void getStockTest(){ - SqlController.connectSqlServer(); TransactionMeta stock = SqlController.getStock("msft", "_2020-03"); Integer actual = stock.getVolume(); Integer expected = 636200296; diff --git a/src/test/java/stocks/StockTest.java b/src/test/java/stocks/StockTest.java index 91deede..ddc3637 100644 --- a/src/test/java/stocks/StockTest.java +++ b/src/test/java/stocks/StockTest.java @@ -97,4 +97,14 @@ public void getTransactionTest(){ public void getTransactionTest2(){ test.getTransaction(expectedDate); } + + @Test + public void updateCurrentStockPriceTest(){ + test.currentStockPrice = 0.0; + test.updateCurrentStockPrice("msft","_2020-03"); + Double expected = 145.70; + Double actual = test.getCurrentStockPrice(); + assertEquals(expected,actual); + + } } From af477f4b1ff67639f5f16a6c5373faa2add29db0 Mon Sep 17 00:00:00 2001 From: k-romero Date: Wed, 18 Mar 2020 14:07:25 -0400 Subject: [PATCH 2/7] fixed tests to work with test DB created methods to update stock values --- src/main/java/stocks/Stock.java | 4 ++-- src/test/java/sql/SqlControllerTest.java | 2 +- src/test/java/stocks/StockTest.java | 13 +++++++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/stocks/Stock.java b/src/main/java/stocks/Stock.java index a3ad724..f2e42b7 100644 --- a/src/main/java/stocks/Stock.java +++ b/src/main/java/stocks/Stock.java @@ -1,5 +1,6 @@ package stocks; +import org.decimal4j.util.DoubleRounder; import sql.SqlController; import java.util.ArrayList; @@ -43,12 +44,11 @@ public String getInfo(){ public Double getCurrentStockPrice(){ return currentStockPrice; } - public void updateCurrentStockPrice(String stockSymbol,String month){ currentStockPrice = SqlController.getStock(stockSymbol,month).getClose(); + valueOfPosition = DoubleRounder.round(totalNumOfShares * currentStockPrice,2); } - //TODO - CONNECT TO DB PER DATE public Double getValueOfPosition(){ return valueOfPosition; } diff --git a/src/test/java/sql/SqlControllerTest.java b/src/test/java/sql/SqlControllerTest.java index 1cfd615..fec62d2 100644 --- a/src/test/java/sql/SqlControllerTest.java +++ b/src/test/java/sql/SqlControllerTest.java @@ -14,7 +14,7 @@ public void connectionTest(){ @Test public void getStockTest(){ - TransactionMeta stock = SqlController.getStock("msft", "_2020-03"); + TransactionMeta stock = SqlController.getStock("test", "_2020-03"); Integer actual = stock.getVolume(); Integer expected = 636200296; assertEquals(actual, expected); diff --git a/src/test/java/stocks/StockTest.java b/src/test/java/stocks/StockTest.java index ddc3637..9f1b058 100644 --- a/src/test/java/stocks/StockTest.java +++ b/src/test/java/stocks/StockTest.java @@ -93,7 +93,6 @@ public void getTransactionTest(){ } @Test -// @Test(expected = NullPointerException.class) public void getTransactionTest2(){ test.getTransaction(expectedDate); } @@ -101,10 +100,20 @@ public void getTransactionTest2(){ @Test public void updateCurrentStockPriceTest(){ test.currentStockPrice = 0.0; - test.updateCurrentStockPrice("msft","_2020-03"); + test.updateCurrentStockPrice("test","_2020-03"); Double expected = 145.70; Double actual = test.getCurrentStockPrice(); assertEquals(expected,actual); } + + @Test + public void getValueOfPositionTest(){ + test.currentStockPrice = 0.0; + test.addTransaction(transaction); + test.updateCurrentStockPrice("test","_2020-03"); + Double expected = 437.10; + Double actual = test.getValueOfPosition(); + assertEquals(expected,actual); + } } From 0b5cbbf39920af0499ef737383b7b98dff92c692 Mon Sep 17 00:00:00 2001 From: k-romero Date: Wed, 18 Mar 2020 16:43:48 -0400 Subject: [PATCH 3/7] create method to make transaction --- src/main/java/account/Portfolio.java | 24 +++++++++++++++++++++++ src/main/java/stocks/Stock.java | 1 + src/main/java/stocks/Transaction.java | 11 +++++------ src/test/java/account/PortfolioTest.java | 11 ++++++++++- src/test/java/stocks/StockTest.java | 13 ++++++++++++ src/test/java/stocks/TransactionTest.java | 22 +++++++++++++++++++++ 6 files changed, 75 insertions(+), 7 deletions(-) diff --git a/src/main/java/account/Portfolio.java b/src/main/java/account/Portfolio.java index 3c7dda6..947f5cd 100644 --- a/src/main/java/account/Portfolio.java +++ b/src/main/java/account/Portfolio.java @@ -1,17 +1,22 @@ package account; import org.decimal4j.util.DoubleRounder; +import stocks.Stock; import stocks.StockEnum; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; public class Portfolio { + private ArrayList mainPortfolio; + private Map portfolio; private Double buyingPower; private Double currentPortfolioValue; public Portfolio() { + this.mainPortfolio = new ArrayList<>(); this.portfolio = new HashMap<>(); this.buyingPower = 2500.00; this.currentPortfolioValue = 0.00; @@ -25,6 +30,25 @@ public Double getCurrentPortfolioValue() { return currentPortfolioValue + buyingPower; } + public boolean addStockToPortfolio(Stock stock){ + if(mainPortfolio.contains(stock)){ + return false; + } else { + mainPortfolio.add(stock); + } + return true; + } + + public void purchaseStock(String stockSymbol, String month, Integer numOfShares){ + + } + + public void updateCurrentPortfolioValue(String month){ + for (Stock s: mainPortfolio) { + s.updateCurrentStockPrice(s.symbol,month); + } + } + public boolean addStockToBasePortfolio(StockEnum stock, Integer numberOfShares){ double costOfShares = stock.getOpen() * numberOfShares; if (costOfShares < buyingPower){ diff --git a/src/main/java/stocks/Stock.java b/src/main/java/stocks/Stock.java index f2e42b7..cf6b8b2 100644 --- a/src/main/java/stocks/Stock.java +++ b/src/main/java/stocks/Stock.java @@ -44,6 +44,7 @@ public String getInfo(){ public Double getCurrentStockPrice(){ return currentStockPrice; } + public void updateCurrentStockPrice(String stockSymbol,String month){ currentStockPrice = SqlController.getStock(stockSymbol,month).getClose(); valueOfPosition = DoubleRounder.round(totalNumOfShares * currentStockPrice,2); diff --git a/src/main/java/stocks/Transaction.java b/src/main/java/stocks/Transaction.java index c7e0656..1eb6001 100644 --- a/src/main/java/stocks/Transaction.java +++ b/src/main/java/stocks/Transaction.java @@ -1,5 +1,6 @@ package stocks; +import org.decimal4j.util.DoubleRounder; import sql.SqlController; public class Transaction { @@ -28,13 +29,11 @@ public Double getCostPerShare(){ } public Double calculateTransactionTotal(){ - return costPerShare * numOfShare; + return DoubleRounder.round(costPerShare * numOfShare,2); } - public Transaction makeTransaction(){ - SqlController.connectSqlServer(); - TransactionMeta.TransactionMetaBuilder builder = TransactionMeta.TransactionMetaBuilder.newInstance(); - - return null; + public static Transaction makeTransaction(String stockSymbol,String month,Integer numOfShares){ + TransactionMeta transactionMeta = SqlController.getStock(stockSymbol,month); + return new Transaction(transactionMeta,numOfShares); } } diff --git a/src/test/java/account/PortfolioTest.java b/src/test/java/account/PortfolioTest.java index c565687..142305c 100644 --- a/src/test/java/account/PortfolioTest.java +++ b/src/test/java/account/PortfolioTest.java @@ -3,8 +3,10 @@ import org.junit.Before; import org.junit.Test; import static org.junit.Assert.*; -import stocks.StockEnum; +import stocks.Stock; +import stocks.StockEnum; +import stocks.Transaction; import java.util.logging.Level; import java.util.logging.Logger; @@ -101,6 +103,13 @@ public void getAllPositionsTest(){ logger.log(Level.INFO, portfolio.getAllPositions()); } + @Test + public void addStockToPortfolio(){ + Stock stock = new Stock("MSFT", "Microsoft"); + Transaction transaction = Transaction.makeTransaction("Test","_2020-03",10); + assertTrue(stock.addTransaction(transaction)); + assertTrue(portfolio.addStockToPortfolio(stock)); + } diff --git a/src/test/java/stocks/StockTest.java b/src/test/java/stocks/StockTest.java index 9f1b058..b052287 100644 --- a/src/test/java/stocks/StockTest.java +++ b/src/test/java/stocks/StockTest.java @@ -116,4 +116,17 @@ public void getValueOfPositionTest(){ Double actual = test.getValueOfPosition(); assertEquals(expected,actual); } + + @Test + public void addTransactionCallingServerTest(){ + test.addTransaction(Transaction.makeTransaction("test","_2020-03",10)); + test.updateCurrentStockPrice("test","_2020-03"); + Integer expectedNumOfShares = 10; + Integer actualNumOfShares = test.getTotalNumOfShares(); + Double expectedValOfPosition = 1457.00; + Double actualValOfPosition = test.getValueOfPosition(); + assertEquals(expectedNumOfShares,actualNumOfShares); + assertEquals(expectedValOfPosition,actualValOfPosition); + } + } diff --git a/src/test/java/stocks/TransactionTest.java b/src/test/java/stocks/TransactionTest.java index c032365..20e14a7 100644 --- a/src/test/java/stocks/TransactionTest.java +++ b/src/test/java/stocks/TransactionTest.java @@ -49,4 +49,26 @@ public void calculateTransactionTest(){ assertEquals(expectedTotal, actualTotal); } + + @Test + public void makeTransactionTest(){ + Transaction transaction = Transaction.makeTransaction("Test","_2020-03",10); + String expected = "_2020-03"; + String actual = transaction.getDateOfTrade(); + assertEquals(expected,actual); + } + + @Test + public void makeTransactionDetailsTest(){ + Transaction transaction = Transaction.makeTransaction("Test","_2020-03",10); + String expectedDate = "_2020-03"; + String actualDate = transaction.getDateOfTrade(); + Double expectedCostPerShare = 145.70; + Double actualCostPerShare = transaction.getCostPerShare(); + Double expectedTransactionTotal = 1457.00; + Double actualTransactionTotal = transaction.calculateTransactionTotal(); + assertEquals(expectedDate,actualDate); + assertEquals(expectedCostPerShare,actualCostPerShare); + assertEquals(expectedTransactionTotal,actualTransactionTotal); + } } \ No newline at end of file From 937314211111904d4cf395d464f49532d29ed522 Mon Sep 17 00:00:00 2001 From: k-romero Date: Wed, 18 Mar 2020 17:40:18 -0400 Subject: [PATCH 4/7] create method to add stocks from DB with tests/remove all old portfolio --- src/main/java/account/Portfolio.java | 114 +++++++---------------- src/main/java/stocks/Stock.java | 6 +- src/test/java/account/PortfolioTest.java | 98 ++++--------------- 3 files changed, 59 insertions(+), 159 deletions(-) diff --git a/src/main/java/account/Portfolio.java b/src/main/java/account/Portfolio.java index 947f5cd..7f00b20 100644 --- a/src/main/java/account/Portfolio.java +++ b/src/main/java/account/Portfolio.java @@ -3,6 +3,8 @@ import org.decimal4j.util.DoubleRounder; import stocks.Stock; import stocks.StockEnum; +import stocks.Transaction; +import utilities.Console; import java.util.ArrayList; import java.util.HashMap; @@ -10,6 +12,7 @@ public class Portfolio { private ArrayList mainPortfolio; + Console console = new Console(System.in,System.out); private Map portfolio; private Double buyingPower; @@ -30,103 +33,58 @@ public Double getCurrentPortfolioValue() { return currentPortfolioValue + buyingPower; } - public boolean addStockToPortfolio(Stock stock){ - if(mainPortfolio.contains(stock)){ - return false; - } else { + public void addStockToPortfolio(Stock stock){ mainPortfolio.add(stock); - } - return true; } public void purchaseStock(String stockSymbol, String month, Integer numOfShares){ - - } - - public void updateCurrentPortfolioValue(String month){ - for (Stock s: mainPortfolio) { - s.updateCurrentStockPrice(s.symbol,month); - } - } - - public boolean addStockToBasePortfolio(StockEnum stock, Integer numberOfShares){ - double costOfShares = stock.getOpen() * numberOfShares; - if (costOfShares < buyingPower){ - if(portfolio.containsKey(stock)){ - portfolio.replace(stock, portfolio.get(stock),portfolio.get(stock) + numberOfShares); - } else { - portfolio.put(stock,numberOfShares); + Double costOfPurchase = DoubleRounder.round(Stock.checkStockPrice(stockSymbol,month) * numOfShares,2); + if(costOfPurchase < buyingPower){ + if(checkToSeeIfOwnStock(stockSymbol)){ + getStockFromPortfolio(stockSymbol).addTransaction(Transaction.makeTransaction(stockSymbol,month,numOfShares)); + } else { + //TODO resolve way to get name for stock per symbol + Stock stock = new Stock(stockSymbol,"TempName"); + stock.addTransaction(Transaction.makeTransaction(stockSymbol,month,numOfShares)); + addStockToPortfolio(stock); + } + buyingPower = buyingPower - costOfPurchase; + } else{ + //TODO Insert method to print "not enough funds to make purchase" } - currentPortfolioValue = currentPortfolioValue + DoubleRounder.round((costOfShares),2); - buyingPower = DoubleRounder.round((buyingPower - costOfShares),2); - return true; - } else { - return false; - } } - public Double getEquityOfShare(String stock){ - for (Map.Entry s : portfolio.entrySet()) { - if (stock.equalsIgnoreCase(String.valueOf(s.getKey()))){ - return DoubleRounder.round((s.getKey().getOpen() * s.getValue()),2); + public Boolean checkToSeeIfOwnStock(String stockSymbol){ + Boolean result = false; + for (Stock s : mainPortfolio) { + if(s.symbol.equalsIgnoreCase(stockSymbol)){ + result = true; + break; } } - return null; + return result; } - public Integer getNumberOfShares(String stock){ - for(Map.Entry s : portfolio.entrySet()){ - if (stock.equalsIgnoreCase(String.valueOf(s.getKey()))){ - return s.getValue(); + public Stock getStockFromPortfolio(String stockSymbol){ + for (Stock s: mainPortfolio) { + if(s.symbol.equalsIgnoreCase(stockSymbol)){ + return s; } } return null; } - public Double getPortfolioDiversityOfShare(String stock){ - Double result = 0.00; - Double equityOfShare = getEquityOfShare(stock); - if(!stock.equalsIgnoreCase("cash")){ - result = DoubleRounder.round ((equityOfShare/getCurrentPortfolioValue()),2); - }else{ - result = DoubleRounder.round ((getBuyingPower()/getCurrentPortfolioValue()),2); - } - - return result; - } - - public Double getDiversityPercentage(String stock){ - return (getPortfolioDiversityOfShare(stock)*100); - } - - - public String getPositionOfShare(String stock){ - StockEnum currentStock = getStock(stock); - StringBuilder builder = new StringBuilder(); - builder.append("****YOUR POSITION****") - .append(String.format("\nSymbol = %s\nShares = %d\nEquity = %.2f\nDiversity = %.2f", - currentStock.getSymbol(), getNumberOfShares(stock),getEquityOfShare(stock),getDiversityPercentage(stock))); - builder.append("%"); - return builder.toString(); - } - - private StockEnum getStock(String stock){ - for (Map.Entry s: portfolio.entrySet()){ - if (String.valueOf(s.getKey()).equalsIgnoreCase(stock)){ - return s.getKey(); - } + public void updateCurrentPortfolioValue(String month){ + Double newCurrentValue = 0.0; + for (Stock s: mainPortfolio) { + s.updateCurrentStockPrice(s.symbol,month); + newCurrentValue += getEquityOfStock(s); } - return null; + currentPortfolioValue = newCurrentValue; } - public String getAllPositions(){ - StringBuilder builder = new StringBuilder(); - for (Map.Entry s: portfolio.entrySet()) { - builder.append(getPositionOfShare(String.valueOf(s.getKey()))) - .append("\n"); - } - return builder.toString(); + public Double getEquityOfStock(Stock stock){ + return DoubleRounder.round(stock.getCurrentStockPrice() * stock.getTotalNumOfShares(),2); } - } diff --git a/src/main/java/stocks/Stock.java b/src/main/java/stocks/Stock.java index cf6b8b2..d80d44b 100644 --- a/src/main/java/stocks/Stock.java +++ b/src/main/java/stocks/Stock.java @@ -46,10 +46,14 @@ public Double getCurrentStockPrice(){ } public void updateCurrentStockPrice(String stockSymbol,String month){ - currentStockPrice = SqlController.getStock(stockSymbol,month).getClose(); + currentStockPrice = checkStockPrice(stockSymbol,month); valueOfPosition = DoubleRounder.round(totalNumOfShares * currentStockPrice,2); } + public static Double checkStockPrice(String stockSymbol,String month){ + return SqlController.getStock(stockSymbol,month).getClose(); + } + public Double getValueOfPosition(){ return valueOfPosition; } diff --git a/src/test/java/account/PortfolioTest.java b/src/test/java/account/PortfolioTest.java index 142305c..c2899c3 100644 --- a/src/test/java/account/PortfolioTest.java +++ b/src/test/java/account/PortfolioTest.java @@ -5,7 +5,6 @@ import static org.junit.Assert.*; import stocks.Stock; -import stocks.StockEnum; import stocks.Transaction; import java.util.logging.Level; @@ -21,94 +20,33 @@ public void setUP(){ portfolio = new Portfolio(); } - @Test - public void addSingleStockTest(){ - assertTrue(portfolio.addStockToBasePortfolio(StockEnum.APPLE,4)); - assertEquals(2500.00, portfolio.getCurrentPortfolioValue(), 0.00); - assertEquals(2134.80, portfolio.getBuyingPower(), 0.00); - } - - @Test - public void addStockFailTest(){ - assertFalse(portfolio.addStockToBasePortfolio(StockEnum.APPLE,900)); - } - - @Test - public void addMultipleStocks(){ - portfolio.addStockToBasePortfolio(StockEnum.MICROSOFT,5); - portfolio.addStockToBasePortfolio(StockEnum.APPLE,5); - portfolio.addStockToBasePortfolio(StockEnum.JPMORGANCHASE,5); - Double expected = 2500.00; - Double actual = portfolio.getCurrentPortfolioValue(); - assertEquals(expected,actual); - assertEquals(1790.80, portfolio.getBuyingPower(), 0.0); - } - - @Test - public void getEquityOfShareTest(){ - portfolio.addStockToBasePortfolio(StockEnum.MICROSOFT,5); - portfolio.addStockToBasePortfolio(StockEnum.APPLE,5); - portfolio.addStockToBasePortfolio(StockEnum.JPMORGANCHASE,5); - Double expected = 153.35; - Double actual = portfolio.getEquityOfShare("jpmorganchase"); - assertEquals(expected,actual); - } - - @Test - public void numberOfSharesTest(){ - portfolio.addStockToBasePortfolio(StockEnum.MICROSOFT,5); - portfolio.addStockToBasePortfolio(StockEnum.APPLE,5); - portfolio.addStockToBasePortfolio(StockEnum.JPMORGANCHASE,10); - Integer expected = 10; - Integer actual = portfolio.getNumberOfShares("jpmorganchase"); - assertEquals(expected,actual); - } - - @Test - public void currentPortfolioValueTest(){ - portfolio.addStockToBasePortfolio(StockEnum.MICROSOFT,5); - portfolio.addStockToBasePortfolio(StockEnum.APPLE,5); - portfolio.addStockToBasePortfolio(StockEnum.JPMORGANCHASE,10); - Double expected = 2500.00; - Double actual = portfolio.getCurrentPortfolioValue(); - assertEquals(expected,actual); - } - @Test - public void portfolioDiversityOfShareTest(){ - portfolio.addStockToBasePortfolio(StockEnum.MICROSOFT,5); - portfolio.addStockToBasePortfolio(StockEnum.APPLE,5); - portfolio.addStockToBasePortfolio(StockEnum.JPMORGANCHASE,5); - assertEquals(0.06, portfolio.getPortfolioDiversityOfShare("jpmorganchase"), 0.00); - assertEquals(0.04, portfolio.getPortfolioDiversityOfShare("microsoft"), 0.00); - assertEquals(0.18, portfolio.getPortfolioDiversityOfShare("Apple"), 0.00); - assertEquals(0.72, portfolio.getPortfolioDiversityOfShare("cash"), 0.00); - logger.log(Level.INFO, portfolio.getPositionOfShare("Apple")); + public void checkToSeeIfOwnStockTest(){ + Stock stock = new Stock("MSFT", "Microsoft"); + Transaction transaction = Transaction.makeTransaction("Test","_2020-03",10); + stock.addTransaction(transaction); + portfolio.addStockToPortfolio(stock); + assertTrue(portfolio.checkToSeeIfOwnStock("MSFT")); } @Test - public void diversityPercentageTest(){ - portfolio.addStockToBasePortfolio(StockEnum.MICROSOFT,5); - portfolio.addStockToBasePortfolio(StockEnum.APPLE,5); - portfolio.addStockToBasePortfolio(StockEnum.JPMORGANCHASE,5); - assertEquals(18.0, portfolio.getDiversityPercentage("Apple"),0.00); - } + public void getEquityOfStockTest(){ - @Test - public void getAllPositionsTest(){ - portfolio.addStockToBasePortfolio(StockEnum.MICROSOFT,5); - portfolio.addStockToBasePortfolio(StockEnum.APPLE,5); - portfolio.addStockToBasePortfolio(StockEnum.JPMORGANCHASE,5); - logger.log(Level.INFO, portfolio.getAllPositions()); } @Test - public void addStockToPortfolio(){ - Stock stock = new Stock("MSFT", "Microsoft"); - Transaction transaction = Transaction.makeTransaction("Test","_2020-03",10); - assertTrue(stock.addTransaction(transaction)); - assertTrue(portfolio.addStockToPortfolio(stock)); + public void purchaseStockTest(){ + assertFalse(portfolio.checkToSeeIfOwnStock("test")); + portfolio.purchaseStock("Test","_2020-03", 10); + assertTrue(portfolio.checkToSeeIfOwnStock("test")); + portfolio.updateCurrentPortfolioValue("_2020-03"); + Double expectedBuyingPower = 1043.00; + Double actualBuyingPower = portfolio.getBuyingPower(); + Double expectedPortfolioValue = 2500.00; + Double actualPortfolioValue = portfolio.getCurrentPortfolioValue(); + assertEquals(expectedPortfolioValue,actualPortfolioValue); + assertEquals(expectedBuyingPower,actualBuyingPower); } From 766829f9dc335fd14509097edb7c2814e4e78670 Mon Sep 17 00:00:00 2001 From: k-romero Date: Wed, 18 Mar 2020 19:04:17 -0400 Subject: [PATCH 5/7] create a get position method with test --- src/main/java/account/Portfolio.java | 17 +++++++++++++++- src/main/java/sql/SqlController.java | 1 - src/test/java/account/PortfolioTest.java | 25 +++++++++++++++++++++--- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/main/java/account/Portfolio.java b/src/main/java/account/Portfolio.java index 7f00b20..98c960d 100644 --- a/src/main/java/account/Portfolio.java +++ b/src/main/java/account/Portfolio.java @@ -84,7 +84,22 @@ public void updateCurrentPortfolioValue(String month){ } public Double getEquityOfStock(Stock stock){ - return DoubleRounder.round(stock.getCurrentStockPrice() * stock.getTotalNumOfShares(),2); + return DoubleRounder.round((stock.getCurrentStockPrice() * stock.getTotalNumOfShares()),2); } + public String getPositionOfStock(String stockSymbol){ + StringBuilder builder = new StringBuilder(); + Stock stock = getStockFromPortfolio(stockSymbol); + builder.append("Name : ") + .append(stock.name) + .append("\nSymbol : ") + .append(stock.symbol) + .append("\nNumber of Shares : ") + .append(stock.totalNumOfShares) + .append("\nCurrent Price : ") + .append(stock.currentStockPrice) + .append("\nEquity : ") + .append(stock.valueOfPosition); + return builder.toString(); + } } diff --git a/src/main/java/sql/SqlController.java b/src/main/java/sql/SqlController.java index f9cfc31..e722dc2 100644 --- a/src/main/java/sql/SqlController.java +++ b/src/main/java/sql/SqlController.java @@ -22,7 +22,6 @@ public static void connectSqlServer(){ System.exit(0); } System.out.println("Database still open"); - } public static void insertStock(){ diff --git a/src/test/java/account/PortfolioTest.java b/src/test/java/account/PortfolioTest.java index c2899c3..64a0ef8 100644 --- a/src/test/java/account/PortfolioTest.java +++ b/src/test/java/account/PortfolioTest.java @@ -32,7 +32,17 @@ public void checkToSeeIfOwnStockTest(){ @Test public void getEquityOfStockTest(){ - + Stock stock = new Stock("Test", "Microsoft"); + Transaction transaction = Transaction.makeTransaction("Test","_2020-03",10); + stock.addTransaction(transaction); + portfolio.addStockToPortfolio(stock); + stock.updateCurrentStockPrice("Test", "_2020-03"); + Integer expectedNumOfShares = 10; + Integer actualNumOfShares = stock.getTotalNumOfShares(); + Double expected = 1457.00; + Double actual = portfolio.getEquityOfStock(portfolio.getStockFromPortfolio("Test")); + assertEquals(expectedNumOfShares,actualNumOfShares); + assertEquals(expected,actual); } @Test @@ -49,7 +59,16 @@ public void purchaseStockTest(){ assertEquals(expectedBuyingPower,actualBuyingPower); } - - + @Test + public void getPositionOfStock(){ + Stock stock = new Stock("Test", "Microsoft"); + Transaction transaction = Transaction.makeTransaction("Test","_2020-03",10); + stock.addTransaction(transaction); + portfolio.addStockToPortfolio(stock); + stock.updateCurrentStockPrice("Test", "_2020-03"); + String expected = "Name : Microsoft\nSymbol : Test\nNumber of Shares : 10\nCurrent Price : 145.7\nEquity : 1457.0"; + String actual = portfolio.getPositionOfStock("Test"); + assertEquals(expected,actual); + } } From 63110f5a66b2d66ee2011fdee7253ad57a323e92 Mon Sep 17 00:00:00 2001 From: k-romero Date: Wed, 18 Mar 2020 20:52:30 -0400 Subject: [PATCH 6/7] create method to get all positions in portfolio --- src/main/java/account/Portfolio.java | 15 +++++++++++---- src/main/java/utilities/Messages.java | 2 ++ src/test/java/account/PortfolioTest.java | 14 +++++++++++--- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/main/java/account/Portfolio.java b/src/main/java/account/Portfolio.java index 98c960d..a1740b9 100644 --- a/src/main/java/account/Portfolio.java +++ b/src/main/java/account/Portfolio.java @@ -5,6 +5,7 @@ import stocks.StockEnum; import stocks.Transaction; import utilities.Console; +import utilities.Messages; import java.util.ArrayList; import java.util.HashMap; @@ -13,14 +14,11 @@ public class Portfolio { private ArrayList mainPortfolio; Console console = new Console(System.in,System.out); - - private Map portfolio; private Double buyingPower; private Double currentPortfolioValue; public Portfolio() { this.mainPortfolio = new ArrayList<>(); - this.portfolio = new HashMap<>(); this.buyingPower = 2500.00; this.currentPortfolioValue = 0.00; } @@ -50,7 +48,7 @@ public void purchaseStock(String stockSymbol, String month, Integer numOfShares) } buyingPower = buyingPower - costOfPurchase; } else{ - //TODO Insert method to print "not enough funds to make purchase" + console.println(Messages.notEnough); } } @@ -102,4 +100,13 @@ public String getPositionOfStock(String stockSymbol){ .append(stock.valueOfPosition); return builder.toString(); } + + public String getAllPositionsFromPortfolio(){ + StringBuilder builder = new StringBuilder(); + for (Stock s : mainPortfolio) { + builder.append(getPositionOfStock(s.symbol)) + .append("\n"); + } + return builder.toString(); + } } diff --git a/src/main/java/utilities/Messages.java b/src/main/java/utilities/Messages.java index cc26fc7..a82aabd 100644 --- a/src/main/java/utilities/Messages.java +++ b/src/main/java/utilities/Messages.java @@ -6,6 +6,7 @@ public class Messages { public static String enterLastName = "Please enter your last name."; public static String startingGuide = "Lets get you started!\nWe have created a basic portfolio for with a buying power of $2500.\nUse these funds to purchase stocks from the list below."; public static String chooseNum = "Choose a number to make a selection:"; + public static String notEnough = "Sorry, you don't have enough funds to make that purchase"; @@ -31,4 +32,5 @@ public static String startingStocks(){ } + } diff --git a/src/test/java/account/PortfolioTest.java b/src/test/java/account/PortfolioTest.java index 64a0ef8..3b39fe5 100644 --- a/src/test/java/account/PortfolioTest.java +++ b/src/test/java/account/PortfolioTest.java @@ -6,8 +6,6 @@ import stocks.Stock; import stocks.Transaction; - -import java.util.logging.Level; import java.util.logging.Logger; public class PortfolioTest { @@ -65,10 +63,20 @@ public void getPositionOfStock(){ Transaction transaction = Transaction.makeTransaction("Test","_2020-03",10); stock.addTransaction(transaction); portfolio.addStockToPortfolio(stock); - stock.updateCurrentStockPrice("Test", "_2020-03"); + portfolio.updateCurrentPortfolioValue("_2020-03"); String expected = "Name : Microsoft\nSymbol : Test\nNumber of Shares : 10\nCurrent Price : 145.7\nEquity : 1457.0"; String actual = portfolio.getPositionOfStock("Test"); assertEquals(expected,actual); } + @Test + public void getPositionOfAllStock(){ + Stock stock = new Stock("Test", "Microsoft"); + Transaction transaction = Transaction.makeTransaction("Test","_2020-03",10); + stock.addTransaction(transaction); + portfolio.addStockToPortfolio(stock); + portfolio.updateCurrentPortfolioValue("_2020-03"); + System.out.println(portfolio.getAllPositionsFromPortfolio()); + } + } From 4c1e5a57c12e5dd364d9d96a1be4992d84ace432 Mon Sep 17 00:00:00 2001 From: k-romero Date: Wed, 18 Mar 2020 21:29:08 -0400 Subject: [PATCH 7/7] clean up --- src/main/java/account/Portfolio.java | 8 ++++---- src/test/java/account/PortfolioTest.java | 9 +++++++-- src/test/java/controller/ApiControllerTest.java | 9 +++++++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/java/account/Portfolio.java b/src/main/java/account/Portfolio.java index a1740b9..f708cc0 100644 --- a/src/main/java/account/Portfolio.java +++ b/src/main/java/account/Portfolio.java @@ -2,14 +2,12 @@ import org.decimal4j.util.DoubleRounder; import stocks.Stock; -import stocks.StockEnum; import stocks.Transaction; import utilities.Console; import utilities.Messages; import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; + public class Portfolio { private ArrayList mainPortfolio; @@ -104,7 +102,9 @@ public String getPositionOfStock(String stockSymbol){ public String getAllPositionsFromPortfolio(){ StringBuilder builder = new StringBuilder(); for (Stock s : mainPortfolio) { - builder.append(getPositionOfStock(s.symbol)) + builder.append("*******************") + .append("\n") + .append(getPositionOfStock(s.symbol)) .append("\n"); } return builder.toString(); diff --git a/src/test/java/account/PortfolioTest.java b/src/test/java/account/PortfolioTest.java index 3b39fe5..8474bce 100644 --- a/src/test/java/account/PortfolioTest.java +++ b/src/test/java/account/PortfolioTest.java @@ -71,10 +71,15 @@ public void getPositionOfStock(){ @Test public void getPositionOfAllStock(){ - Stock stock = new Stock("Test", "Microsoft"); - Transaction transaction = Transaction.makeTransaction("Test","_2020-03",10); + Stock stock = new Stock("test", "Microsoft"); + Transaction transaction = Transaction.makeTransaction("test","_2020-03",10); + stock.addTransaction(transaction); + Stock stock2 = new Stock("test2", "Apple"); + Transaction transaction2 = Transaction.makeTransaction("test2","_2020-03",4); stock.addTransaction(transaction); + stock2.addTransaction(transaction2); portfolio.addStockToPortfolio(stock); + portfolio.addStockToPortfolio(stock2); portfolio.updateCurrentPortfolioValue("_2020-03"); System.out.println(portfolio.getAllPositionsFromPortfolio()); } diff --git a/src/test/java/controller/ApiControllerTest.java b/src/test/java/controller/ApiControllerTest.java index d004f1f..28b270b 100644 --- a/src/test/java/controller/ApiControllerTest.java +++ b/src/test/java/controller/ApiControllerTest.java @@ -2,10 +2,15 @@ import org.junit.Test; +import java.util.logging.Level; +import java.util.logging.Logger; + import static org.junit.Assert.assertEquals; public class ApiControllerTest { + Logger logger = Logger.getLogger(ApiControllerTest.class.getName()); + @Test public void testCreateApiQuery(){ String symbol = "msft"; @@ -18,9 +23,9 @@ public void testCreateApiQuery(){ // IMPORTANT! This test makes calls to the API, change the symbol to retrieve different stock tickers! @Test public void testFetchApiQuery(){ - String symbol = "HD"; + String symbol = "AAPL"; String resultOfCall = ApiController.fetchApiQuery(ApiController.createApiQuery(symbol)); - System.out.println(resultOfCall); + logger.log(Level.INFO,resultOfCall); } }