From 3003934b508438a46d0e54b3966b61d5d9fc4635 Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Fri, 13 Mar 2026 21:39:03 +0100 Subject: [PATCH 01/14] =?UTF-8?q?dette=20b=C3=B8r=20fikse=20problemet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/edu/ntnu/idi/idatt2003/g40/mappe/Exchange.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Exchange.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Exchange.java index 2083d6a..6276925 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Exchange.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Exchange.java @@ -55,12 +55,14 @@ public Transaction buy(String symbol, BigDecimal quantity, Player player) { Stock stock = stockMap.get(symbol); Share share = new Share(stock, quantity, stock.getSalesPrice()); TransactionCalculator calculator = new PurchaseCalculator(share); - return new Purchase(share, week, calculator, player); + player.withdrawMoney(calculator.calculateTotal()); + return new Purchase(share, week, calculator); } public Transaction sell(Share share, Player player) { TransactionCalculator calculator = new SaleCalculator(share); - return new Sale(share, week, calculator, player); + player.addMoney(calculator.calculateTotal()); + return new Sale(share, week, calculator); } public void advance() { From 4b40322d9e44bfbbd808232553f69e74601a8c40 Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Sat, 14 Mar 2026 06:35:06 +0100 Subject: [PATCH 02/14] unit test --- .../ntnu/idi/idatt2003/g40/mappe/Player.java | 1 - .../idi/idatt2003/g40/mappe/ShareTest.java | 51 +++++++++++++++++-- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Player.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Player.java index 0114bbf..0d5939d 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Player.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Player.java @@ -1,7 +1,6 @@ package edu.ntnu.idi.idatt2003.g40.mappe; import java.math.BigDecimal; -import java.util.Objects; public class Player { diff --git a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/ShareTest.java b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/ShareTest.java index 2e94fdf..0a5deb1 100644 --- a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/ShareTest.java +++ b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/ShareTest.java @@ -1,3 +1,48 @@ -public class ShareTest { - -} +package edu.ntnu.idi.idatt2003.g40.mappe; + +import org.junit.jupiter.api.Test; + +import java.math.BigDecimal; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; + +class ShareTest { + + @Test + void constructorStoresAllValuesCorrectly() { + Stock stock = new Stock("AAPL", "Apple Inc.", new BigDecimal("150.00")); + BigDecimal quantity = new BigDecimal("10"); + BigDecimal purchasePrice = new BigDecimal("145.50"); + + Share share = new Share(stock, quantity, purchasePrice); + + assertSame(stock, share.getStock()); + assertEquals(quantity, share.getQuantity()); + assertEquals(purchasePrice, share.getPurchasePrice()); + } + + @Test + void shareSupportsDecimalValues() { + Stock stock = new Stock("TSLA", "Tesla Inc.", new BigDecimal("200.00")); + + Share share = new Share( + stock, + new BigDecimal("2.5"), + new BigDecimal("198.75") + ); + + assertEquals(new BigDecimal("2.5"), share.getQuantity()); + assertEquals(new BigDecimal("198.75"), share.getPurchasePrice()); + } + + @Test + void getStockReturnsCorrectStockObject() { + Stock stock = new Stock("NVDA", "NVIDIA Corporation", new BigDecimal("875.40")); + Share share = new Share(stock, new BigDecimal("4"), new BigDecimal("850.00")); + + assertSame(stock, share.getStock()); + assertEquals("NVDA", share.getStock().getSymbol()); + assertEquals("NVIDIA Corporation", share.getStock().getCompany()); + } +} \ No newline at end of file From f09f2dd253309bcbd7b6f3a2cbb7c7c7b0b1a472 Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Sat, 14 Mar 2026 06:38:55 +0100 Subject: [PATCH 03/14] Update ShareTest.java --- .../idi/idatt2003/g40/mappe/ShareTest.java | 51 +++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/ShareTest.java b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/ShareTest.java index 2e94fdf..0a5deb1 100644 --- a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/ShareTest.java +++ b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/ShareTest.java @@ -1,3 +1,48 @@ -public class ShareTest { - -} +package edu.ntnu.idi.idatt2003.g40.mappe; + +import org.junit.jupiter.api.Test; + +import java.math.BigDecimal; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; + +class ShareTest { + + @Test + void constructorStoresAllValuesCorrectly() { + Stock stock = new Stock("AAPL", "Apple Inc.", new BigDecimal("150.00")); + BigDecimal quantity = new BigDecimal("10"); + BigDecimal purchasePrice = new BigDecimal("145.50"); + + Share share = new Share(stock, quantity, purchasePrice); + + assertSame(stock, share.getStock()); + assertEquals(quantity, share.getQuantity()); + assertEquals(purchasePrice, share.getPurchasePrice()); + } + + @Test + void shareSupportsDecimalValues() { + Stock stock = new Stock("TSLA", "Tesla Inc.", new BigDecimal("200.00")); + + Share share = new Share( + stock, + new BigDecimal("2.5"), + new BigDecimal("198.75") + ); + + assertEquals(new BigDecimal("2.5"), share.getQuantity()); + assertEquals(new BigDecimal("198.75"), share.getPurchasePrice()); + } + + @Test + void getStockReturnsCorrectStockObject() { + Stock stock = new Stock("NVDA", "NVIDIA Corporation", new BigDecimal("875.40")); + Share share = new Share(stock, new BigDecimal("4"), new BigDecimal("850.00")); + + assertSame(stock, share.getStock()); + assertEquals("NVDA", share.getStock().getSymbol()); + assertEquals("NVIDIA Corporation", share.getStock().getCompany()); + } +} \ No newline at end of file From dfcddb252bf9bb2e349da78c7dfbc5285d7f598a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Espen=20Tinius=20Roli=20S=C3=B8rensen?= Date: Sat, 14 Mar 2026 06:41:38 +0100 Subject: [PATCH 04/14] Update ShareTest.java --- .../idi/idatt2003/g40/mappe/ShareTest.java | 47 +------------------ 1 file changed, 1 insertion(+), 46 deletions(-) diff --git a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/ShareTest.java b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/ShareTest.java index 0a5deb1..92414c2 100644 --- a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/ShareTest.java +++ b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/ShareTest.java @@ -1,48 +1,3 @@ -package edu.ntnu.idi.idatt2003.g40.mappe; - -import org.junit.jupiter.api.Test; - -import java.math.BigDecimal; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertSame; - class ShareTest { - @Test - void constructorStoresAllValuesCorrectly() { - Stock stock = new Stock("AAPL", "Apple Inc.", new BigDecimal("150.00")); - BigDecimal quantity = new BigDecimal("10"); - BigDecimal purchasePrice = new BigDecimal("145.50"); - - Share share = new Share(stock, quantity, purchasePrice); - - assertSame(stock, share.getStock()); - assertEquals(quantity, share.getQuantity()); - assertEquals(purchasePrice, share.getPurchasePrice()); - } - - @Test - void shareSupportsDecimalValues() { - Stock stock = new Stock("TSLA", "Tesla Inc.", new BigDecimal("200.00")); - - Share share = new Share( - stock, - new BigDecimal("2.5"), - new BigDecimal("198.75") - ); - - assertEquals(new BigDecimal("2.5"), share.getQuantity()); - assertEquals(new BigDecimal("198.75"), share.getPurchasePrice()); - } - - @Test - void getStockReturnsCorrectStockObject() { - Stock stock = new Stock("NVDA", "NVIDIA Corporation", new BigDecimal("875.40")); - Share share = new Share(stock, new BigDecimal("4"), new BigDecimal("850.00")); - - assertSame(stock, share.getStock()); - assertEquals("NVDA", share.getStock().getSymbol()); - assertEquals("NVIDIA Corporation", share.getStock().getCompany()); - } -} \ No newline at end of file +} From 497f04eac283341290ad290239e11196dc6ef8c0 Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Sat, 14 Mar 2026 07:06:22 +0100 Subject: [PATCH 05/14] unit test Player class --- .../ntnu/idi/idatt2003/g40/mappe/Player.java | 1 - .../idi/idatt2003/g40/mappe/PlayerTest.java | 51 +++++++++++++++++-- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Player.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Player.java index 0114bbf..0d5939d 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Player.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Player.java @@ -1,7 +1,6 @@ package edu.ntnu.idi.idatt2003.g40.mappe; import java.math.BigDecimal; -import java.util.Objects; public class Player { diff --git a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PlayerTest.java b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PlayerTest.java index e3c1316..f62c0d5 100644 --- a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PlayerTest.java +++ b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PlayerTest.java @@ -1,3 +1,48 @@ -public class PlayerTest { - -} +package edu.ntnu.idi.idatt2003.g40.mappe; + +import org.junit.jupiter.api.Test; + +import java.math.BigDecimal; + +import static org.junit.jupiter.api.Assertions.*; + +class PlayerTest { + + @Test + void constructorSetsNameMoneyPortfolioAndArchive() { + Player player = new Player("Alice", new BigDecimal("1000")); + + assertEquals("Alice", player.getName()); + assertEquals(new BigDecimal("1000"), player.getMoney()); + assertNotNull(player.getPortfolio()); + assertNotNull(player.getTransactionArchive()); + } + + @Test + void addMoneyIncreasesBalance() { + Player player = new Player("Bob", new BigDecimal("500")); + + player.addMoney(new BigDecimal("200")); + + assertEquals(new BigDecimal("700"), player.getMoney()); + } + + @Test + void withdrawMoneyDecreasesBalance() { + Player player = new Player("Charlie", new BigDecimal("500")); + + player.withdrawMoney(new BigDecimal("150")); + + assertEquals(new BigDecimal("350"), player.getMoney()); + } + + @Test + void addAndWithdrawMoneyUpdateBalanceCorrectly() { + Player player = new Player("Dana", new BigDecimal("1000")); + + player.addMoney(new BigDecimal("250")); + player.withdrawMoney(new BigDecimal("300")); + + assertEquals(new BigDecimal("950"), player.getMoney()); + } +} \ No newline at end of file From 2acd865adbf90f836dd53ee93f0f3baaef663ca8 Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Sat, 14 Mar 2026 07:37:22 +0100 Subject: [PATCH 06/14] Unit test --- .../g40/mappe/TransactionArchiveTest.java | 133 +++++++++++++++++- 1 file changed, 130 insertions(+), 3 deletions(-) diff --git a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/TransactionArchiveTest.java b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/TransactionArchiveTest.java index cf935b8..17726ad 100644 --- a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/TransactionArchiveTest.java +++ b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/TransactionArchiveTest.java @@ -1,3 +1,130 @@ -public class TransactionArchiveTest { - -} +package edu.ntnu.idi.idatt2003.g40.mappe; + +import org.junit.jupiter.api.Test; + +import java.math.BigDecimal; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class TransactionArchiveTest { + + private final TransactionCalculator calculator = new TransactionCalculator() { + @Override + public BigDecimal calculateGross() { + return BigDecimal.ZERO; + } + + @Override + public BigDecimal calculateCommission() { + return BigDecimal.ZERO; + } + + @Override + public BigDecimal calculateTax() { + return BigDecimal.ZERO; + } + + @Override + public BigDecimal calculateTotal() { + return BigDecimal.ZERO; + } + }; + + @Test + void newArchiveIsEmpty() { + TransactionArchive archive = new TransactionArchive(); + + assertTrue(archive.isEmpty()); + } + + @Test + void addMakesArchiveNonEmpty() { + TransactionArchive archive = new TransactionArchive(); + Transaction transaction = createPurchase("AAPL", "Apple", 1); + + boolean result = archive.add(transaction); + + assertTrue(result); + assertFalse(archive.isEmpty()); + } + + @Test + void getTransactionsReturnsOnlyTransactionsFromGivenWeek() { + TransactionArchive archive = new TransactionArchive(); + + Transaction transaction1 = createPurchase("AAPL", "Apple", 1); + Transaction transaction2 = createSale("TSLA", "Tesla", 2); + Transaction transaction3 = createPurchase("NVDA", "Nvidia", 1); + + archive.add(transaction1); + archive.add(transaction2); + archive.add(transaction3); + + List result = archive.getTransactions(1); + + assertEquals(2, result.size()); + assertTrue(result.contains(transaction1)); + assertTrue(result.contains(transaction3)); + } + + @Test + void getPurchasesReturnsOnlyPurchasesFromGivenWeek() { + TransactionArchive archive = new TransactionArchive(); + + Purchase purchase1 = createPurchase("AAPL", "Apple", 1); + Purchase purchase2 = createPurchase("NVDA", "Nvidia", 2); + Sale sale = createSale("TSLA", "Tesla", 1); + + archive.add(purchase1); + archive.add(purchase2); + archive.add(sale); + + List result = archive.getPurchases(1); + + assertEquals(1, result.size()); + assertTrue(result.contains(purchase1)); + } + + @Test + void getSalesReturnsOnlySalesFromGivenWeek() { + TransactionArchive archive = new TransactionArchive(); + + Sale sale1 = createSale("TSLA", "Tesla", 1); + Sale sale2 = createSale("NVDA", "Nvidia", 2); + Purchase purchase = createPurchase("AAPL", "Apple", 1); + + archive.add(sale1); + archive.add(sale2); + archive.add(purchase); + + List result = archive.getSales(1); + + assertEquals(1, result.size()); + assertTrue(result.contains(sale1)); + } + + @Test + void countDistinctWeeksCountsUniqueWeeksOnly() { + TransactionArchive archive = new TransactionArchive(); + + archive.add(createPurchase("AAPL", "Apple", 1)); + archive.add(createSale("TSLA", "Tesla", 1)); + archive.add(createPurchase("NVDA", "Nvidia", 2)); + archive.add(createSale("META", "Meta", 3)); + + assertEquals(3, archive.countDistinctWeeks()); + } + + private Purchase createPurchase(String symbol, String company, int week) { + Stock stock = new Stock(symbol, company, new BigDecimal("100")); + Share share = new Share(stock, BigDecimal.ONE, new BigDecimal("100")); + return new Purchase(share, week, calculator); + } + + private Sale createSale(String symbol, String company, int week) { + Stock stock = new Stock(symbol, company, new BigDecimal("100")); + Share share = new Share(stock, BigDecimal.ONE, new BigDecimal("100")); + return new Sale(share, week, calculator); + } +} \ No newline at end of file From a103b348ed1ecf7902f9a570435868ec0b6e8bee Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Sat, 14 Mar 2026 08:02:38 +0100 Subject: [PATCH 07/14] Unit test SaleCalculator class --- .../g40/mappe/SaleCalculatorTest.java | 58 ++++++++++++++++++- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/SaleCalculatorTest.java b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/SaleCalculatorTest.java index 5422865..3b7a0c6 100644 --- a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/SaleCalculatorTest.java +++ b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/SaleCalculatorTest.java @@ -1,3 +1,55 @@ -public class SaleCalculatorTest { - -} +package edu.ntnu.idi.idatt2003.g40.mappe; + +import org.junit.jupiter.api.Test; + +import java.math.BigDecimal; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class SaleCalculatorTest { + + @Test + void calculateGrossReturnsSalesPriceTimesQuantity() { + Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); + Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); + SaleCalculator calculator = new SaleCalculator(share); + + assertEquals(new BigDecimal("300"), calculator.calculateGross()); + } + + @Test + void calculateCommissionReturnsOnePercentOfGross() { + Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); + Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); + SaleCalculator calculator = new SaleCalculator(share); + + assertEquals(new BigDecimal("3.00"), calculator.calculateCommission()); + } + + @Test + void calculateTaxReturnsThirtyPercentOfProfitWhenProfitIsPositive() { + Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); + Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); + SaleCalculator calculator = new SaleCalculator(share); + + assertEquals(new BigDecimal("29.1000"), calculator.calculateTax()); + } + + @Test + void calculateTaxReturnsZeroWhenProfitIsZeroOrNegative() { + Stock stock = new Stock("AAPL", "Apple", new BigDecimal("90")); + Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); + SaleCalculator calculator = new SaleCalculator(share); + + assertEquals(BigDecimal.ZERO, calculator.calculateTax()); + } + + @Test + void calculateTotalReturnsGrossMinusCommissionMinusTax() { + Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); + Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); + SaleCalculator calculator = new SaleCalculator(share); + + assertEquals(new BigDecimal("267.9000"), calculator.calculateTotal()); + } +} \ No newline at end of file From e260cfaaa0c01ccef134ad8f8149c57c1417afcf Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Sat, 14 Mar 2026 08:16:51 +0100 Subject: [PATCH 08/14] Unit Test PurchaseCalculator class --- .../g40/mappe/PurchaseCalculatorTest.java | 48 +++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java index 6737cf2..15091a7 100644 --- a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java +++ b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java @@ -1,3 +1,45 @@ -public class PurchaseCalculatorTest { - -} +package edu.ntnu.idi.idatt2003.g40.mappe; + +import org.junit.jupiter.api.Test; +import java.math.BigDecimal; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class PurchaseCalculatorTest { + + @Test + void calculateGrossReturnsPurchasePriceTimesQuantity() { + Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); + Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); + PurchaseCalculator calculator = new PurchaseCalculator(share); + + assertEquals(new BigDecimal("200"), calculator.calculateGross()); + } + + @Test + void calculateCommissionReturnsHalfPercentOfGross() { + Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); + Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); + PurchaseCalculator calculator = new PurchaseCalculator(share); + + assertEquals(new BigDecimal("1.000"), calculator.calculateCommission()); + } + + @Test + void calculateTaxReturnsZero() { + Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); + Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); + PurchaseCalculator calculator = new PurchaseCalculator(share); + + assertEquals(BigDecimal.ZERO, calculator.calculateTax()); + } + + @Test + void calculateTotalReturnsGrossPlusCommission() { + Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); + Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); + PurchaseCalculator calculator = new PurchaseCalculator(share); + + assertEquals(new BigDecimal("201.000"), calculator.calculateTotal()); + } +} \ No newline at end of file From 44e2aa3fb815a3288e6484ba76e40761d9d8dea8 Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Sat, 14 Mar 2026 09:31:06 +0100 Subject: [PATCH 09/14] Unit Test PuraseCalculator class --- .../g40/mappe/PurchaseCalculatorTest.java | 48 +++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java index 6737cf2..15091a7 100644 --- a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java +++ b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java @@ -1,3 +1,45 @@ -public class PurchaseCalculatorTest { - -} +package edu.ntnu.idi.idatt2003.g40.mappe; + +import org.junit.jupiter.api.Test; +import java.math.BigDecimal; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class PurchaseCalculatorTest { + + @Test + void calculateGrossReturnsPurchasePriceTimesQuantity() { + Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); + Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); + PurchaseCalculator calculator = new PurchaseCalculator(share); + + assertEquals(new BigDecimal("200"), calculator.calculateGross()); + } + + @Test + void calculateCommissionReturnsHalfPercentOfGross() { + Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); + Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); + PurchaseCalculator calculator = new PurchaseCalculator(share); + + assertEquals(new BigDecimal("1.000"), calculator.calculateCommission()); + } + + @Test + void calculateTaxReturnsZero() { + Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); + Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); + PurchaseCalculator calculator = new PurchaseCalculator(share); + + assertEquals(BigDecimal.ZERO, calculator.calculateTax()); + } + + @Test + void calculateTotalReturnsGrossPlusCommission() { + Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); + Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); + PurchaseCalculator calculator = new PurchaseCalculator(share); + + assertEquals(new BigDecimal("201.000"), calculator.calculateTotal()); + } +} \ No newline at end of file From 2079d3850fa70cd4aca272a88a78c3b8cfe1817a Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Sat, 14 Mar 2026 09:35:40 +0100 Subject: [PATCH 10/14] Unit Test portfolio class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit nĂ¥ er det faktisk portfoliotesten som ligger med og ikke bare en kopi av den andre testen --- .../idatt2003/g40/mappe/PortfolioTest.java | 83 ++++++++++++++++++- 1 file changed, 80 insertions(+), 3 deletions(-) diff --git a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PortfolioTest.java b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PortfolioTest.java index 3518005..c8a5e3a 100644 --- a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PortfolioTest.java +++ b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PortfolioTest.java @@ -1,3 +1,80 @@ -public class PortfolioTest { - -} +package edu.ntnu.idi.idatt2003.g40.mappe; + +import org.junit.jupiter.api.Test; + +import java.math.BigDecimal; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class PortfolioTest { + + @Test + void addShareAddsShareToPortfolio() { + Portfolio portfolio = new Portfolio(); + Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); + Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); + + boolean result = portfolio.addShare(share); + + assertTrue(result); + assertTrue(portfolio.contains(share)); + } + + @Test + void removeShareRemovesShareFromPortfolio() { + Portfolio portfolio = new Portfolio(); + Stock stock = new Stock("TSLA", "Tesla", new BigDecimal("200")); + Share share = new Share(stock, new BigDecimal("1"), new BigDecimal("200")); + + portfolio.addShare(share); + boolean result = portfolio.removeShare(share); + + assertTrue(result); + assertFalse(portfolio.contains(share)); + } + + @Test + void getSharesReturnsAllShares() { + Portfolio portfolio = new Portfolio(); + + Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); + Share share = new Share(stock, new BigDecimal("3"), new BigDecimal("150")); + + portfolio.addShare(share); + + List shares = portfolio.getShares(); + + assertEquals(1, shares.size()); + assertTrue(shares.contains(share)); + } + + @Test + void getSharesWithSymbolReturnsMatchingShares() { + Portfolio portfolio = new Portfolio(); + + Stock apple = new Stock("AAPL", "Apple", new BigDecimal("150")); + Stock tesla = new Stock("TSLA", "Tesla", new BigDecimal("200")); + + Share appleShare = new Share(apple, new BigDecimal("1"), new BigDecimal("150")); + Share teslaShare = new Share(tesla, new BigDecimal("1"), new BigDecimal("200")); + + portfolio.addShare(appleShare); + portfolio.addShare(teslaShare); + + List result = portfolio.getShares("AAPL"); + + assertEquals(1, result.size()); + assertTrue(result.contains(appleShare)); + } + + @Test + void containsReturnsFalseWhenShareNotPresent() { + Portfolio portfolio = new Portfolio(); + + Stock stock = new Stock("NVDA", "Nvidia", new BigDecimal("800")); + Share share = new Share(stock, new BigDecimal("1"), new BigDecimal("800")); + + assertFalse(portfolio.contains(share)); + } +} \ No newline at end of file From 43520c295ce3ad638f639c943523d2d52e6da8e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Espen=20Tinius=20Roli=20S=C3=B8rensen?= Date: Sat, 14 Mar 2026 09:37:35 +0100 Subject: [PATCH 11/14] Update PurchaseCalculatorTest.java --- .../g40/mappe/PurchaseCalculatorTest.java | 46 +------------------ 1 file changed, 2 insertions(+), 44 deletions(-) diff --git a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java index 15091a7..1d05b55 100644 --- a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java +++ b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java @@ -1,45 +1,3 @@ -package edu.ntnu.idi.idatt2003.g40.mappe; +public class PurchaseCalculatorTest { -import org.junit.jupiter.api.Test; -import java.math.BigDecimal; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -class PurchaseCalculatorTest { - - @Test - void calculateGrossReturnsPurchasePriceTimesQuantity() { - Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); - Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); - PurchaseCalculator calculator = new PurchaseCalculator(share); - - assertEquals(new BigDecimal("200"), calculator.calculateGross()); - } - - @Test - void calculateCommissionReturnsHalfPercentOfGross() { - Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); - Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); - PurchaseCalculator calculator = new PurchaseCalculator(share); - - assertEquals(new BigDecimal("1.000"), calculator.calculateCommission()); - } - - @Test - void calculateTaxReturnsZero() { - Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); - Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); - PurchaseCalculator calculator = new PurchaseCalculator(share); - - assertEquals(BigDecimal.ZERO, calculator.calculateTax()); - } - - @Test - void calculateTotalReturnsGrossPlusCommission() { - Stock stock = new Stock("AAPL", "Apple", new BigDecimal("150")); - Share share = new Share(stock, new BigDecimal("2"), new BigDecimal("100")); - PurchaseCalculator calculator = new PurchaseCalculator(share); - - assertEquals(new BigDecimal("201.000"), calculator.calculateTotal()); - } -} \ No newline at end of file +} From a1b4e9ce4122961c9884e0f9a6a28157198f7448 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Espen=20Tinius=20Roli=20S=C3=B8rensen?= Date: Sat, 14 Mar 2026 09:37:59 +0100 Subject: [PATCH 12/14] Update PurchaseCalculatorTest.java --- .../edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java index 1d05b55..4d6b128 100644 --- a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java +++ b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java @@ -1,3 +1,2 @@ public class PurchaseCalculatorTest { - } From 47167403f0a9038297d2a5e4f0a69c2e745b063c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Espen=20Tinius=20Roli=20S=C3=B8rensen?= Date: Sat, 14 Mar 2026 09:38:15 +0100 Subject: [PATCH 13/14] Update PurchaseCalculatorTest.java --- .../edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java index 4d6b128..4ebae9c 100644 --- a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java +++ b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PurchaseCalculatorTest.java @@ -1,2 +1,3 @@ public class PurchaseCalculatorTest { + } From 1ad6d0ae5a65b3cf2832a3312320db086c9af195 Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Sat, 14 Mar 2026 10:16:31 +0100 Subject: [PATCH 14/14] Unit Test exchange class --- .../idi/idatt2003/g40/mappe/ExchangeTest.java | 95 ++++++++++++++++++- 1 file changed, 92 insertions(+), 3 deletions(-) diff --git a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/ExchangeTest.java b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/ExchangeTest.java index a06f463..9e11d44 100644 --- a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/ExchangeTest.java +++ b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/ExchangeTest.java @@ -1,3 +1,92 @@ -public class ExchangeTest { - -} +package edu.ntnu.idi.idatt2003.g40.mappe; + +import org.junit.jupiter.api.Test; + +import java.math.BigDecimal; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class ExchangeTest { + + @Test + void constructorSetsNameWeekAndStocksCorrectly() { + Stock apple = new Stock("AAPL", "Apple", new BigDecimal("150")); + Stock tesla = new Stock("TSLA", "Tesla", new BigDecimal("200")); + + Exchange exchange = new Exchange("NASDAQ", List.of(apple, tesla)); + + assertEquals("NASDAQ", exchange.getName()); + assertEquals(1, exchange.getWeek()); + assertTrue(exchange.hasStock("AAPL")); + assertTrue(exchange.hasStock("TSLA")); + } + + @Test + void getStockReturnsCorrectStock() { + Stock apple = new Stock("AAPL", "Apple", new BigDecimal("150")); + Exchange exchange = new Exchange("NASDAQ", List.of(apple)); + + Stock result = exchange.getStock("AAPL"); + + assertSame(apple, result); + } + + @Test + void findStocksReturnsMatchingStocksBySymbolOrCompany() { + Stock apple = new Stock("AAPL", "Apple", new BigDecimal("150")); + Stock tesla = new Stock("TSLA", "Tesla", new BigDecimal("200")); + Exchange exchange = new Exchange("NASDAQ", List.of(apple, tesla)); + + List resultBySymbol = exchange.findStocks("AAP"); + List resultByCompany = exchange.findStocks("tes"); + + assertEquals(1, resultBySymbol.size()); + assertTrue(resultBySymbol.contains(apple)); + + assertEquals(1, resultByCompany.size()); + assertTrue(resultByCompany.contains(tesla)); + } + + @Test + void buyReturnsPurchaseAndWithdrawsMoneyFromPlayer() { + Stock apple = new Stock("AAPL", "Apple", new BigDecimal("100")); + Exchange exchange = new Exchange("NASDAQ", List.of(apple)); + Player player = new Player("Alice", new BigDecimal("1000")); + + Transaction transaction = exchange.buy("AAPL", new BigDecimal("2"), player); + + assertInstanceOf(Purchase.class, transaction); + assertEquals(1, transaction.getWeek()); + assertEquals(new BigDecimal("2"), transaction.getShare().getQuantity()); + assertEquals(new BigDecimal("100"), transaction.getShare().getPurchasePrice()); + assertEquals(new BigDecimal("799.000"), player.getMoney()); + } + + @Test + void sellReturnsSaleAndAddsMoneyToPlayer() { + Stock apple = new Stock("AAPL", "Apple", new BigDecimal("150")); + Exchange exchange = new Exchange("NASDAQ", List.of(apple)); + Player player = new Player("Alice", new BigDecimal("1000")); + Share share = new Share(apple, new BigDecimal("2"), new BigDecimal("100")); + + Transaction transaction = exchange.sell(share, player); + + assertInstanceOf(Sale.class, transaction); + assertEquals(1, transaction.getWeek()); + assertSame(share, transaction.getShare()); + assertEquals(new BigDecimal("1267.9000"), player.getMoney()); + } + + @Test + void advanceIncreasesWeekAndUpdatesStockPrice() { + Stock apple = new Stock("AAPL", "Apple", new BigDecimal("100")); + Exchange exchange = new Exchange("NASDAQ", List.of(apple)); + + BigDecimal oldPrice = apple.getSalesPrice(); + exchange.advance(); + + assertEquals(2, exchange.getWeek()); + assertNotEquals(oldPrice, apple.getSalesPrice()); + } +} \ No newline at end of file