From 77e61f4fd9ca727dacdd8479ba61760c41be2e26 Mon Sep 17 00:00:00 2001 From: Elisabeth Berg Date: Sun, 24 May 2026 22:34:02 +0200 Subject: [PATCH] Added more tests to StockTest --- src/test/java/StockTest.java | 159 +++++++++++++++++++++++++--- target/test-classes/StockTest.class | Bin 1373 -> 6225 bytes 2 files changed, 142 insertions(+), 17 deletions(-) diff --git a/src/test/java/StockTest.java b/src/test/java/StockTest.java index fcc0d09..6a6a477 100644 --- a/src/test/java/StockTest.java +++ b/src/test/java/StockTest.java @@ -1,3 +1,4 @@ +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import Model.Stock; @@ -5,35 +6,159 @@ import static org.junit.jupiter.api.Assertions.*; import java.math.BigDecimal; - +import java.util.List; public class StockTest { - @Test - public void testGetSalesPrice() { - Stock stock = new Stock("AAPL", "APPLE", new BigDecimal("1000")); + private Stock stock; + + @BeforeEach + void setUp() { + stock = new Stock("AAPL", "Apple", new BigDecimal("1000")); + } + + // ---- Positive tests ---- + + @Test + void testGetSymbol() { + assertEquals("AAPL", stock.getSymbol()); + } + + @Test + void testGetCompany() { + assertEquals("Apple", stock.getCompany()); + } + + @Test + void testGetSalesPrice() { assertEquals(new BigDecimal("1000"), stock.getSalesPrice()); } - - @Test - public void testAddNewSalesPrice() { - Stock stock = new Stock("AAPL", "APPLE", new BigDecimal("1000")); + + @Test + void testGetSalesPriceZero() { + Stock zeroStock = new Stock("ZERO", "ZeroCorp", new BigDecimal("0")); + assertEquals(new BigDecimal("0"), zeroStock.getSalesPrice()); + } + + @Test + void testAddNewSalesPrice() { stock.addNewSalesPrice(new BigDecimal("1200")); assertEquals(new BigDecimal("1200"), stock.getSalesPrice()); } - @Test - public void testGetSalesPriceNone() { - Stock stock = new Stock("AAPL", "APPLE", new BigDecimal("0")); + @Test + void testAddNewSalesPriceZero() { + stock.addNewSalesPrice(new BigDecimal("0")); assertEquals(new BigDecimal("0"), stock.getSalesPrice()); } - @Test - public void testAddNewSalesPriceNone() { - Stock stock = new Stock("AAPL", "APPLE", new BigDecimal("1000")); - stock.addNewSalesPrice(new BigDecimal("0")); - assertEquals(new BigDecimal("0"), stock.getSalesPrice()); + @Test + void testGetHistoricalPricesInitial() { + List history = stock.getHistoricalPrices(); + assertEquals(1, history.size()); + assertEquals(new BigDecimal("1000"), history.get(0)); + } + + @Test + void testGetHistoricalPricesAfterUpdates() { + stock.addNewSalesPrice(new BigDecimal("1100")); + stock.addNewSalesPrice(new BigDecimal("1200")); + assertEquals(3, stock.getHistoricalPrices().size()); + } + + @Test + void testGetHighestPrice() { + stock.addNewSalesPrice(new BigDecimal("1500")); + stock.addNewSalesPrice(new BigDecimal("800")); + assertEquals(new BigDecimal("1500"), stock.getHighestPrice()); + } + + @Test + void testGetLowestPrice() { + stock.addNewSalesPrice(new BigDecimal("1500")); + stock.addNewSalesPrice(new BigDecimal("800")); + assertEquals(new BigDecimal("800"), stock.getLowestPrice()); + } + + @Test + void testGetLatestPriceChangePositive() { + stock.addNewSalesPrice(new BigDecimal("1100")); + assertEquals(new BigDecimal("100"), stock.getLatestPriceChange()); + } + + @Test + void testGetLatestPriceChangeNegative() { + stock.addNewSalesPrice(new BigDecimal("900")); + assertEquals(new BigDecimal("-100"), stock.getLatestPriceChange()); + } + + @Test + void testGetLatestPriceChangeOnlyOnePrice() { + assertEquals(BigDecimal.ZERO, stock.getLatestPriceChange()); + } + + @Test + void testHistoricalPricesIsDefensiveCopy() { + List history = stock.getHistoricalPrices(); + history.add(new BigDecimal("9999")); + assertEquals(1, stock.getHistoricalPrices().size()); + } + + // ---- Negative tests ---- + + @Test + void testNullSymbolThrows() { + assertThrows(IllegalArgumentException.class, () -> + new Stock(null, "Apple", new BigDecimal("100")) + ); + } + + @Test + void testBlankSymbolThrows() { + assertThrows(IllegalArgumentException.class, () -> + new Stock(" ", "Apple", new BigDecimal("100")) + ); } - + @Test + void testNullCompanyThrows() { + assertThrows(IllegalArgumentException.class, () -> + new Stock("AAPL", null, new BigDecimal("100")) + ); + } + + @Test + void testBlankCompanyThrows() { + assertThrows(IllegalArgumentException.class, () -> + new Stock("AAPL", " ", new BigDecimal("100")) + ); + } + + @Test + void testNullInitialPriceThrows() { + assertThrows(IllegalArgumentException.class, () -> + new Stock("AAPL", "Apple", null) + ); + } + + @Test + void testNegativeInitialPriceThrows() { + assertThrows(IllegalArgumentException.class, () -> + new Stock("AAPL", "Apple", new BigDecimal("-1")) + ); + } + + @Test + void testAddNullPriceThrows() { + assertThrows(IllegalArgumentException.class, () -> + stock.addNewSalesPrice(null) + ); + } + + @Test + void testAddNegativePriceThrows() { + assertThrows(IllegalArgumentException.class, () -> + stock.addNewSalesPrice(new BigDecimal("-10")) + ); + } } diff --git a/target/test-classes/StockTest.class b/target/test-classes/StockTest.class index 1a942861ec9e00b95e7616525ed76e5f340df15e..0008700068cbbe4a7129761956c9351e88fe7dbe 100644 GIT binary patch literal 6225 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 s%Gbz8zd;VnZjWOb{}jV8CH z+WUub_gp#*6M7(6WyrWB{7$$HZV0Dt%QoGf|JXBK*%eLcNV;A#P0Qu3v`o6as9SbN zyXcW28ZV_QY>i(^P5G}Tkfr?Z$)2HkB1z=PZ>?6>lPEBZ*6MZrD1kYKocGKwch9v$ z*?A+{vdfJm?o#+}rBX>@7K`e6OAPsTh=Uleo2QuMVHHc?Dqi(w@iNX>DC?LkYUgl&d2_fC#J_qahIx5A$Lm9B<7 z`zNa2qmF72@}`H#Qt5K4bhWdyWASxRy(Bb+a8Du3U^k6D>{C1zzre$))jDp8BZ7|okE$ed>HWb-$eJ)mub3y8Wjr8dhKG^bj<3BRsa^KOcgV>VD#3cl zNEUIjpCcoAtf4@~n+=)S56mnFW*$YFi3agF3_@*&^!p$dNPUq&EQPc;1MLBbr;*zK g144=a1rcea4`S8ButvY;9@ax