From 8cc72cea2756a23c703bc58da3974def1f33486c Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 20 Apr 2026 09:04:09 +0200 Subject: [PATCH] Fix/test" Fix portfolio rounding bug, adding test for that --- .../controller/fileIO/StockFileReader.java | 14 +++++++++++--- .../millions/model/calculators/SaleCalculator.java | 9 ++++++--- src/test/java/millions/PortfolioTest.java | 12 +++++++++++- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/main/java/millions/controller/fileIO/StockFileReader.java b/src/main/java/millions/controller/fileIO/StockFileReader.java index 22852cf..47a0809 100644 --- a/src/main/java/millions/controller/fileIO/StockFileReader.java +++ b/src/main/java/millions/controller/fileIO/StockFileReader.java @@ -1,6 +1,10 @@ package millions.controller.fileIO; -import java.io.*; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; @@ -16,8 +20,12 @@ public StockFileReader(Path path) { public List readFile() { File file = new File(filePath.toString()); List lines = new ArrayList<>(); - try (Reader reader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(reader)) { - lines = bufferedReader.readAllLines(); + try (Reader reader = new FileReader(file); + BufferedReader bufferedReader = new BufferedReader(reader)) { + String line; + while ((line = bufferedReader.readLine()) != null) { + lines.add(line); + } } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/millions/model/calculators/SaleCalculator.java b/src/main/java/millions/model/calculators/SaleCalculator.java index 96bc6b1..5adbfaf 100644 --- a/src/main/java/millions/model/calculators/SaleCalculator.java +++ b/src/main/java/millions/model/calculators/SaleCalculator.java @@ -23,7 +23,7 @@ public BigDecimal calculateGross() { @Override public BigDecimal calculateCommission() { - return this.calculateGross().divide(new BigDecimal("100"), RoundingMode.HALF_UP); + return this.calculateGross().divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP); } @Override @@ -33,11 +33,14 @@ public BigDecimal calculateTax() { this.calculateGross().subtract(this.calculateCommission()).subtract(purchaseCosts); return earnings .multiply(new BigDecimal("30")) - .divide(new BigDecimal("100"), RoundingMode.HALF_UP); + .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP); } @Override public BigDecimal calculateTotal() { - return this.calculateGross().subtract(this.calculateCommission()).subtract(this.calculateTax()); + return this.calculateGross() + .subtract(this.calculateCommission()) + .subtract(this.calculateTax()) + .stripTrailingZeros(); } } diff --git a/src/test/java/millions/PortfolioTest.java b/src/test/java/millions/PortfolioTest.java index 286da55..b151f94 100644 --- a/src/test/java/millions/PortfolioTest.java +++ b/src/test/java/millions/PortfolioTest.java @@ -3,7 +3,6 @@ import static org.junit.jupiter.api.Assertions.*; import java.math.BigDecimal; - import millions.model.Portfolio; import millions.model.Share; import millions.model.Stock; @@ -56,6 +55,17 @@ public void testGettersAndSetters() { assertEquals(1, portfolio.getShares().size()); } + @Test + public void testGetNetWorth() { + Portfolio portfolio = new Portfolio(); + Stock stock = new Stock("PEAR", "Pear Inc.", BigDecimal.valueOf(100)); + Share share = new Share(stock, 1, BigDecimal.valueOf(50)); + + portfolio.addShare(share); + + assertEquals(new BigDecimal("84.3"), portfolio.getNetWorth()); + } + @Test public void testNullsAndInvalid() { Stock stock1 = new Stock("PEAR", "Pear Inc.", BigDecimal.valueOf(300));