From 12bb7bc40afeb81d20a998ffa26203cc32c3859b Mon Sep 17 00:00:00 2001 From: = Date: Tue, 26 May 2026 23:35:39 +0200 Subject: [PATCH] Feat: Updated exchange and test classes --- .../idi/idatt2003/g40/mappe/engine/Exchange.java | 13 ++++++++----- .../idatt2003/g40/mappe/engine/ExchangeTest.java | 13 +++++++------ .../idi/idatt2003/g40/mappe/model/PlayerTest.java | 9 ++++++--- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/engine/Exchange.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/engine/Exchange.java index 5e7bf07..632f657 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/engine/Exchange.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/engine/Exchange.java @@ -295,16 +295,19 @@ public Transaction sell(BigDecimal amount, throw new IllegalArgumentException("Player does not own any shares of this stock!"); } - Share ownedPosition = matchingShares.getFirst(); - BigDecimal totalOwned = ownedPosition.getQuantity(); - BigDecimal ownedPurchasePrice = ownedPosition.getPurchasePrice(); + BigDecimal totalOwned = matchingShares.stream() + .map(Share::getQuantity) + .reduce(BigDecimal.ZERO, BigDecimal::add); if (amount.compareTo(totalOwned) > 0) { amount = totalOwned; } - Stock stock = ownedPosition.getStock(); - Share shareToSell = new Share(stock, amount, ownedPurchasePrice); + Stock stock = matchingShares.getFirst().getStock(); + + BigDecimal oldestPurchasePrice = matchingShares.getFirst().getPurchasePrice(); + + Share shareToSell = new Share(stock, amount, oldestPurchasePrice); Transaction sale = TransactionFactory.createTransaction( TransactionType.SALE, shareToSell, getWeek() diff --git a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/engine/ExchangeTest.java b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/engine/ExchangeTest.java index 66ce0c5..65337f7 100644 --- a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/engine/ExchangeTest.java +++ b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/engine/ExchangeTest.java @@ -156,19 +156,20 @@ void buyThrowsExceptionOnIllegalArguments() { @Test void sellReturnsSaleAndAddsMoneyToPlayer() { - Share share = - new Share(appleStock, new BigDecimal("2"), - appleStock.getSalesPrice()); - - Transaction transaction = testExchange.sell(share, testPlayer); + BigDecimal sellAmount = new BigDecimal("2"); + Share share = new Share(appleStock, sellAmount, appleStock.getSalesPrice()); + testPlayer.getPortfolio().addShare(share); + Transaction transaction = testExchange.sell(sellAmount, appleStock.getSymbol(), testPlayer); TransactionCalculator calculator = new SaleCalculator(share); BigDecimal expectedPlayerMoney = testPlayer.getStartingMoney().add(calculator.calculateTotal()); + assertInstanceOf(Sale.class, transaction); assertEquals(1, transaction.getWeek()); - assertSame(share, transaction.getShare()); + assertEquals(share.getQuantity(), transaction.getShare().getQuantity()); + assertEquals(share.getPurchasePrice(), transaction.getShare().getPurchasePrice()); assertEquals(expectedPlayerMoney, testPlayer.getMoney()); } diff --git a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/model/PlayerTest.java b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/model/PlayerTest.java index 9ac2d64..3837214 100644 --- a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/model/PlayerTest.java +++ b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/model/PlayerTest.java @@ -130,13 +130,16 @@ void getNetWorthCalculatesCorrectlyForSales() { Stock stock = new Stock("AAPL", "Apple inc.,", new BigDecimal("100.00")); Share share = new Share(stock, new BigDecimal("1"), new BigDecimal("100.00")); - BigDecimal expectedNetWorth = testPlayer.getNetWorth(); - Transaction transaction = TransactionFactory.createTransaction(TransactionType.SALE, share, 1); + testPlayer.getPortfolio().addShare(share); + BigDecimal baselineNetWorth = testPlayer.getNetWorth(); + Transaction transaction = TransactionFactory.createTransaction(TransactionType.SALE, share, 1); testPlayer.handleTransaction(transaction); BigDecimal actualNetWorth = testPlayer.getNetWorth(); - expectedNetWorth = expectedNetWorth.add(transaction.getCalculator().calculateTotal()); + + BigDecimal commissionFee = transaction.getCalculator().calculateCommission(); + BigDecimal expectedNetWorth = baselineNetWorth.subtract(commissionFee); assertEquals(expectedNetWorth, actualNetWorth); assertEquals(actualNetWorth.floatValue(),