diff --git a/src/main/java/edu/ntnu/idi/idatt/Player.java b/src/main/java/edu/ntnu/idi/idatt/Player.java
index 3a5e61d..8f798e7 100644
--- a/src/main/java/edu/ntnu/idi/idatt/Player.java
+++ b/src/main/java/edu/ntnu/idi/idatt/Player.java
@@ -4,6 +4,8 @@
import edu.ntnu.idi.idatt.transaction.TransactionArchive;
import java.math.BigDecimal;
+import java.util.HashSet;
+import java.util.Map;
public class Player {
@@ -54,4 +56,39 @@ public void addMoney(BigDecimal amount) {
public void withdrawMoney(BigDecimal amount) {
this.money = this.money.subtract(amount);
}
+
+ /**
+ * Method for obtaining players net worth.
+ *
+ * @return players net worth.
+ */
+ public BigDecimal getNetWorth() {
+ return money.add(portfolio.getNetWorth());
+ }
+
+ /**
+ * Method for obtaining players trading status.
+ *
+ *
+ * A symbolic title/rank that describes the way the
+ * players trading career has been going.
+ *
+ *
+ * @return String of corresponding title. TODO: Change to ENUM!!!
+ */
+ public String getStatus() {
+ int tradingWeeks = transactionArchive.countDistinctWeeks();
+ BigDecimal netWorth = this.getNetWorth().divide(this.startingMoney);
+
+ if (tradingWeeks >= 20 && netWorth.compareTo(new BigDecimal("2")) >= 0) {
+ return "Speculator";
+ }
+
+ if (tradingWeeks >= 10 && netWorth.compareTo(new BigDecimal("1.2")) >= 0) {
+ return "Investor";
+ }
+
+ return "Novice";
+ }
+
}
diff --git a/src/main/java/edu/ntnu/idi/idatt/marked/Portfolio.java b/src/main/java/edu/ntnu/idi/idatt/marked/Portfolio.java
index 6fe32fd..e377d5f 100644
--- a/src/main/java/edu/ntnu/idi/idatt/marked/Portfolio.java
+++ b/src/main/java/edu/ntnu/idi/idatt/marked/Portfolio.java
@@ -5,6 +5,8 @@
import java.util.List;
import java.util.stream.Collectors;
+import edu.ntnu.idi.idatt.calculator.SaleCalculator;
+
/**
* Portfolio class
*
@@ -70,15 +72,14 @@ public boolean contains(Share share) {
}
/**
- * Method for getting the net value of the player.
+ * Method for getting the net value of the portfolio..
*
- * @return - Net value of the players shares.
+ * @return - Net value of the portfolio.
*/
- public BigDecimal playerNetValue(){
- BigDecimal netValue = shares.stream()
- .map(Share-> Share.getPurchasePrice().multiply(Share.getQuantity()))
- .reduce(BigDecimal.ZERO, BigDecimal::add);
- return netValue;
+ public BigDecimal getNetWorth() {
+ return shares.stream()
+ .map(s -> new SaleCalculator(s).calculateTotal())
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
}
}
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/TransactionArchive.java b/src/main/java/edu/ntnu/idi/idatt/transaction/TransactionArchive.java
index 0567591..e07e8c9 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/TransactionArchive.java
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/TransactionArchive.java
@@ -73,8 +73,11 @@ public List getSales(int week) {
*
* @return
*/
- public int countDistinctWeeks() { // TODO: HERE
- return -1;
+ public int countDistinctWeeks() {
+ return (int) transactions.stream()
+ .map(Transaction::getWeek)
+ .distinct()
+ .count();
}
}
diff --git a/src/test/java/edu/ntnu/idi/idatt/PlayerTest.java b/src/test/java/edu/ntnu/idi/idatt/PlayerTest.java
index cd6df5d..e292971 100644
--- a/src/test/java/edu/ntnu/idi/idatt/PlayerTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/PlayerTest.java
@@ -4,10 +4,15 @@
import static org.junit.jupiter.api.Assertions.assertNotNull;
import java.math.BigDecimal;
+import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import edu.ntnu.idi.idatt.marked.Share;
+import edu.ntnu.idi.idatt.marked.Stock;
+import edu.ntnu.idi.idatt.transaction.Purchase;
+
class PlayerTest {
private Player player;
@@ -41,4 +46,49 @@ void PTwithdrawMoney() {
assertEquals(new BigDecimal("300"), player.getMoney());
}
+ @Test
+ void PTgetNetWorth() {
+ assertEquals(player.getNetWorth(), new BigDecimal("500"));
+
+ // Add to player portfolio
+ Stock stock = new Stock("A", "A", List.of(new BigDecimal("20")));
+ Share share = new Share(stock, new BigDecimal("3.5"), new BigDecimal("30"));
+ player.getPortfolio().addShare(share);
+
+ BigDecimal sum = player.getMoney().add(player.getPortfolio().getNetWorth());
+ assertEquals(sum, player.getNetWorth());
+
+ }
+
+ @Test
+ void PTgetStatus() {
+ assertEquals("Novice", player.getStatus());
+
+ // Simulate progress
+ Stock stock = new Stock("A", "A", List.of(new BigDecimal("20")));
+ Share share = new Share(stock, new BigDecimal("3.5"), new BigDecimal("30"));
+
+ for (int i = 0; i <= 20; i++) {
+ player.getTransactionArchive().add(new Purchase(share, i));
+ }
+
+ // Check different ifs
+ player.addMoney(new BigDecimal("90")); // 18%
+ assertEquals("Novice", player.getStatus());
+ player.addMoney(new BigDecimal("10")); // 20%
+ assertEquals("Investor", player.getStatus());
+ player.addMoney(new BigDecimal("400")); // 100%
+ assertEquals("Speculator", player.getStatus());
+
+ // new Player to check if Speculator dont happen week < 20
+ Player plr = new Player("plr", new BigDecimal("500"));
+
+ for (int i = 0; i <= 15; i++) {
+ plr.getTransactionArchive().add(new Purchase(share, i));
+ }
+ plr.addMoney(new BigDecimal("600")); // 120%
+ assertEquals("Investor", plr.getStatus());
+
+ }
+
}
diff --git a/src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java b/src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java
index a2de1de..e3a6898 100644
--- a/src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java
@@ -11,6 +11,8 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import edu.ntnu.idi.idatt.calculator.SaleCalculator;
+
public class PortfolioTest {
private Stock stock;
@@ -82,12 +84,13 @@ void NTremoveShare() {
* Positive test for finding net value of the players shares.
*/
@Test
- void PTplayerNetValue(){
+ void PTgetNetWorth() {
Share share1 = new Share(stock, new BigDecimal("1"), new BigDecimal("135.8"));
Share share2 = new Share(stock, new BigDecimal("2"), new BigDecimal("254"));
portfolio.addShare(share1);
portfolio.addShare(share2);
- assertEquals(new BigDecimal("643.8"), portfolio.playerNetValue());
+ assertEquals(new SaleCalculator(share1).calculateTotal().add(new SaleCalculator(share2).calculateTotal()),
+ portfolio.getNetWorth());
}
}
diff --git a/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionArchiveTest.java b/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionArchiveTest.java
index 482a45c..74930fb 100644
--- a/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionArchiveTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionArchiveTest.java
@@ -87,4 +87,18 @@ void PTgetTransactions() {
}
+ /**
+ * Tests for countDistinctWeeks().
+ */
+ @Test
+ void PTcountDistinctWeeks() {
+ assertEquals(2, transactionArchive.countDistinctWeeks());
+ }
+
+ @Test
+ void NTcountDistinctWeeks() {
+ TransactionArchive tArchive = new TransactionArchive();
+ assertEquals(0, tArchive.countDistinctWeeks());
+ }
+
}