From d8020617375ecc21024d8fbcb35337e6047450fa Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Fri, 13 Feb 2026 16:43:31 +0100
Subject: [PATCH 01/21] chore: Google java style cleanup (checkstyle)
---
.../java/edu/ntnu/idi/idatt/Exchange.java | 103 ++++++++-------
src/main/java/edu/ntnu/idi/idatt/Main.java | 2 +-
src/main/java/edu/ntnu/idi/idatt/Player.java | 94 +++++++-------
.../idatt/calculator/PurchaseCalculator.java | 104 +++++++--------
.../idi/idatt/calculator/SaleCalculator.java | 114 ++++++++---------
.../calculator/TransactionCalculator.java | 18 ++-
.../edu/ntnu/idi/idatt/marked/Portfolio.java | 94 +++++++-------
.../java/edu/ntnu/idi/idatt/marked/Share.java | 74 +++++------
.../java/edu/ntnu/idi/idatt/marked/Stock.java | 97 +++++++-------
.../ntnu/idi/idatt/transaction/Purchase.java | 42 +++----
.../edu/ntnu/idi/idatt/transaction/Sale.java | 42 +++----
.../idi/idatt/transaction/Transaction.java | 89 ++++++-------
.../idatt/transaction/TransactionArchive.java | 118 +++++++++---------
13 files changed, 507 insertions(+), 484 deletions(-)
diff --git a/src/main/java/edu/ntnu/idi/idatt/Exchange.java b/src/main/java/edu/ntnu/idi/idatt/Exchange.java
index a159c4a..f121509 100644
--- a/src/main/java/edu/ntnu/idi/idatt/Exchange.java
+++ b/src/main/java/edu/ntnu/idi/idatt/Exchange.java
@@ -11,71 +11,70 @@
public class Exchange {
- //TODO: JavaDocs, Write over functions mby
+ // TODO: JavaDocs, Write over functions mby
- private final String name;
- private int week;
- private HashMap stockMap = new HashMap<>();
- private Random random = new Random();
+ private final String name;
+ private int week;
+ private HashMap stockMap = new HashMap<>();
+ private Random random = new Random();
- public Exchange(String name, List stocks) {
- this.name = name;
- this.week = 1;
-
- for(Stock stock : stocks){
- stockMap.put(stock.getSymbol(), stock);
- }
+ public Exchange(String name, List stocks) {
+ this.name = name;
+ this.week = 1;
+ for (Stock stock : stocks) {
+ stockMap.put(stock.getSymbol(), stock);
}
- public String getName() {
- return name;
- }
+ }
- public int getWeek() {
- return week;
- }
+ public String getName() {
+ return name;
+ }
- public boolean hasStock(String symbol) {
- return stockMap.containsKey(symbol);
- }
+ public int getWeek() {
+ return week;
+ }
- public Stock getStock(String symbol) {
- if(this.hasStock(symbol)){
- stockMap.get(symbol);
- }
- return null; //TODO: Exception
- }
+ public boolean hasStock(String symbol) {
+ return stockMap.containsKey(symbol);
+ }
- public List findStocks(String searchTerm) {
- ArrayList stocksFound = new ArrayList<>();
-
- for(Stock stock : stockMap.values()) {
- if(stock.getCompany().contains(searchTerm) || stock.getSymbol().contains(searchTerm)){
- stocksFound.add(stock);
- }
- }
- return stocksFound;
+ public Stock getStock(String symbol) {
+ if (this.hasStock(symbol)) {
+ stockMap.get(symbol);
}
+ return null; // TODO: Exception
+ }
- public Transaction buy(String symbol, BigDecimal quantity, Player player) {
- Share share = new Share(getStock(symbol), quantity, BigDecimal.valueOf(random.nextDouble()));
- Purchase purchase = new Purchase(share, this.week);
- purchase.commit(player);
- return player.getTransactionArchive().getPurchases(this.week).getLast();
- }
+ public List findStocks(String searchTerm) {
+ ArrayList stocksFound = new ArrayList<>();
- public Transaction sell(Share share, Player player) {
- Sale sale = new Sale(share, this.week);
- sale.commit(player);
- return player.getTransactionArchive().getSales(this.week).getLast();
+ for (Stock stock : stockMap.values()) {
+ if (stock.getCompany().contains(searchTerm) || stock.getSymbol().contains(searchTerm)) {
+ stocksFound.add(stock);
+ }
}
-
- public void advance() {
- for(Stock stocks : stockMap.values()) {
- stocks.addNewSalesPrice(BigDecimal.valueOf(random.nextDouble()));
- }
+ return stocksFound;
+ }
+
+ public Transaction buy(String symbol, BigDecimal quantity, Player player) {
+ Share share = new Share(getStock(symbol), quantity, BigDecimal.valueOf(random.nextDouble()));
+ Purchase purchase = new Purchase(share, this.week);
+ purchase.commit(player);
+ return player.getTransactionArchive().getPurchases(this.week).getLast();
+ }
+
+ public Transaction sell(Share share, Player player) {
+ Sale sale = new Sale(share, this.week);
+ sale.commit(player);
+ return player.getTransactionArchive().getSales(this.week).getLast();
+ }
+
+ public void advance() {
+ for (Stock stocks : stockMap.values()) {
+ stocks.addNewSalesPrice(BigDecimal.valueOf(random.nextDouble()));
}
-
+ }
}
diff --git a/src/main/java/edu/ntnu/idi/idatt/Main.java b/src/main/java/edu/ntnu/idi/idatt/Main.java
index 57408d3..a7ee785 100644
--- a/src/main/java/edu/ntnu/idi/idatt/Main.java
+++ b/src/main/java/edu/ntnu/idi/idatt/Main.java
@@ -8,4 +8,4 @@ static void main() {
System.out.println("Hello world!");
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/edu/ntnu/idi/idatt/Player.java b/src/main/java/edu/ntnu/idi/idatt/Player.java
index cb2ae90..3a5e61d 100644
--- a/src/main/java/edu/ntnu/idi/idatt/Player.java
+++ b/src/main/java/edu/ntnu/idi/idatt/Player.java
@@ -7,51 +7,51 @@
public class Player {
- private final String name;
- private final BigDecimal startingMoney;
- private BigDecimal money;
- private Portfolio portfolio = new Portfolio();
- private TransactionArchive transactionArchive = new TransactionArchive();
-
- public Player(String name, BigDecimal startingMoney) {
- this.name = name;
- this.startingMoney = startingMoney;
- this.money = this.startingMoney;
- }
-
- /**
- * Getters
- *
- * @return - Their corresponding variables.
- */
-
- public String getName() {
- return name;
- }
-
- public BigDecimal getMoney() {
- return money;
- }
-
- public Portfolio getPortfolio() {
- return portfolio;
- }
-
- public TransactionArchive getTransactionArchive() {
- return transactionArchive;
- }
-
- /**
- * Setters for money
- *
- * @param amount - Amount to be changed correspondingly.
- */
-
- public void addMoney(BigDecimal amount){
- this.money = this.money.add(amount);
- }
-
- public void withdrawMoney(BigDecimal amount){
- this.money = this.money.subtract(amount);
- }
+ private final String name;
+ private final BigDecimal startingMoney;
+ private BigDecimal money;
+ private Portfolio portfolio = new Portfolio();
+ private TransactionArchive transactionArchive = new TransactionArchive();
+
+ public Player(String name, BigDecimal startingMoney) {
+ this.name = name;
+ this.startingMoney = startingMoney;
+ this.money = this.startingMoney;
+ }
+
+ /**
+ * Getters
+ *
+ * @return - Their corresponding variables.
+ */
+
+ public String getName() {
+ return name;
+ }
+
+ public BigDecimal getMoney() {
+ return money;
+ }
+
+ public Portfolio getPortfolio() {
+ return portfolio;
+ }
+
+ public TransactionArchive getTransactionArchive() {
+ return transactionArchive;
+ }
+
+ /**
+ * Setters for money
+ *
+ * @param amount - Amount to be changed correspondingly.
+ */
+
+ public void addMoney(BigDecimal amount) {
+ this.money = this.money.add(amount);
+ }
+
+ public void withdrawMoney(BigDecimal amount) {
+ this.money = this.money.subtract(amount);
+ }
}
diff --git a/src/main/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculator.java b/src/main/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculator.java
index 1bd3ae6..33ea3c9 100644
--- a/src/main/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculator.java
+++ b/src/main/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculator.java
@@ -7,64 +7,66 @@
/**
* PurchaseCalculator class
*
- * Calculates transaction price based on
- * share bought.
+ *
+ * Calculates transaction price based on
+ * share bought.
+ *
*
*/
-public class PurchaseCalculator implements TransactionCalculator{
+public class PurchaseCalculator implements TransactionCalculator {
- private final BigDecimal purchasePrice;
- private final BigDecimal quantity;
+ private final BigDecimal purchasePrice;
+ private final BigDecimal quantity;
- /**
- * Constructor for PurchaseCalculator
- *
- * @param share - The bought share
- */
- public PurchaseCalculator(Share share){
- this.purchasePrice = share.getPurchasePrice();
- this.quantity = share.getQuantity();
- }
+ /**
+ * Constructor for PurchaseCalculator
+ *
+ * @param share - The bought share
+ */
+ public PurchaseCalculator(Share share) {
+ this.purchasePrice = share.getPurchasePrice();
+ this.quantity = share.getQuantity();
+ }
- /**
- * Method that calculates gross value
- *
- * @return - BigDecimal of purchase price x share quantity
- */
- @Override
- public BigDecimal calculateGross() {
- return purchasePrice.multiply(quantity);
- }
+ /**
+ * Method that calculates gross value
+ *
+ * @return - BigDecimal of purchase price x share quantity
+ */
+ @Override
+ public BigDecimal calculateGross() {
+ return purchasePrice.multiply(quantity);
+ }
- /**
- * Method that calculates the commission fee
- *
- * @return - BigDecimal of gross value x 0.5%.
- */
- @Override
- public BigDecimal calculateCommision() {
- BigDecimal fee = BigDecimal.valueOf(0.005); // Corresponding to 0.5%
- return calculateGross().multiply(fee);
- }
+ /**
+ * Method that calculates the commission fee
+ *
+ * @return - BigDecimal of gross value x 0.5%.
+ */
+ @Override
+ public BigDecimal calculateCommision() {
+ BigDecimal fee = BigDecimal.valueOf(0.005); // Corresponding to 0.5%
+ return calculateGross().multiply(fee);
+ }
- /**
- * Method that calculates the tax
- *
- * @return - BigDecimal of 0 based on project requirements.
- */
- @Override
- public BigDecimal calculateTax() {
- return BigDecimal.ZERO;
- }
+ /**
+ * Method that calculates the tax
+ *
+ * @return - BigDecimal of 0 based on project requirements.
+ */
+ @Override
+ public BigDecimal calculateTax() {
+ return BigDecimal.ZERO;
+ }
- /**
- * Method that calculates the total price of a bought share
- *
- * @return - BigDecimal of gross value + commision fee + tax
- */
- @Override
- public BigDecimal calculateTotal() {
- return calculateGross().add(calculateCommision()).add(calculateTax());
- }
+ /**
+ * Method that calculates the total price of a bought share
+ *
+ * @return - BigDecimal of gross value + commision fee + tax
+ */
+ @Override
+ public BigDecimal calculateTotal() {
+ return calculateGross().add(calculateCommision()).add(calculateTax());
+ }
}
diff --git a/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java b/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java
index 3f59521..2d77502 100644
--- a/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java
+++ b/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java
@@ -4,73 +4,75 @@
import java.math.BigDecimal;
-
/**
* SaleCalculator class
*
- * Calculates transaction profit based on
- * share sold.
+ *
+ * Calculates transaction profit based on
+ * share sold.
+ *
*
*/
-public class SaleCalculator implements TransactionCalculator{
+public class SaleCalculator implements TransactionCalculator {
- private final BigDecimal purchasePrice;
- private final BigDecimal salesPrice;
- private final BigDecimal quantity;
+ private final BigDecimal purchasePrice;
+ private final BigDecimal salesPrice;
+ private final BigDecimal quantity;
- /**
- * Constructor for SaleCaculator
- *
- * @param share - The sold share
- */
- public SaleCalculator(Share share){
- this.purchasePrice = share.getPurchasePrice();
- this.salesPrice = BigDecimal.ZERO; //TODO: Implement here
- this.quantity = share.getQuantity();
- }
+ /**
+ * Constructor for SaleCaculator
+ *
+ * @param share - The sold share
+ */
+ public SaleCalculator(Share share) {
+ this.purchasePrice = share.getPurchasePrice();
+ this.salesPrice = BigDecimal.ZERO; // TODO: Implement here
+ this.quantity = share.getQuantity();
+ }
- /**
- * Method that calculates gross value
- *
- * @return - BigDecimal of sale price x share quantity
- */
- @Override
- public BigDecimal calculateGross() {
- return salesPrice.multiply(quantity);
- }
+ /**
+ * Method that calculates gross value
+ *
+ * @return - BigDecimal of sale price x share quantity
+ */
+ @Override
+ public BigDecimal calculateGross() {
+ return salesPrice.multiply(quantity);
+ }
- /**
- * Method that calculates the commission fee
- *
- * @return - BigDecimal of gross value x 1%.
- */
- @Override
- public BigDecimal calculateCommision() {
- BigDecimal fee = BigDecimal.valueOf(0.01); // Corresponding to 1%
- return calculateGross().multiply(fee);
- }
+ /**
+ * Method that calculates the commission fee
+ *
+ * @return - BigDecimal of gross value x 1%.
+ */
+ @Override
+ public BigDecimal calculateCommision() {
+ BigDecimal fee = BigDecimal.valueOf(0.01); // Corresponding to 1%
+ return calculateGross().multiply(fee);
+ }
- /**
- * Method that calculates the tax
- *
- * @return - BigDecimal of 30% of profit (gross - purchase price x quantity)
- */
- @Override
- public BigDecimal calculateTax() {
- BigDecimal taxPercentage = BigDecimal.valueOf(0.3); // Corresponding to 30%
- BigDecimal profit = calculateGross().subtract(purchasePrice.multiply(quantity)); // gross - purchase price x quanitity
- return profit.multiply(taxPercentage);
+ /**
+ * Method that calculates the tax
+ *
+ * @return - BigDecimal of 30% of profit (gross - purchase price x quantity)
+ */
+ @Override
+ public BigDecimal calculateTax() {
+ BigDecimal taxPercentage = BigDecimal.valueOf(0.3); // Corresponding to 30%
+ BigDecimal profit = calculateGross().subtract(purchasePrice.multiply(quantity)); // gross - purchase price x
+ // quanitity
+ return profit.multiply(taxPercentage);
- }
+ }
- /**
- * Method that calculates the total profit of a sold share
- *
- * @return - BigDecimal of gross value - commision fee - tax
- */
- @Override
- public BigDecimal calculateTotal() {
- return calculateGross().subtract(calculateCommision()).subtract(calculateTax());
- }
+ /**
+ * Method that calculates the total profit of a sold share
+ *
+ * @return - BigDecimal of gross value - commision fee - tax
+ */
+ @Override
+ public BigDecimal calculateTotal() {
+ return calculateGross().subtract(calculateCommision()).subtract(calculateTax());
+ }
}
diff --git a/src/main/java/edu/ntnu/idi/idatt/calculator/TransactionCalculator.java b/src/main/java/edu/ntnu/idi/idatt/calculator/TransactionCalculator.java
index a1f9265..fdfa9b1 100644
--- a/src/main/java/edu/ntnu/idi/idatt/calculator/TransactionCalculator.java
+++ b/src/main/java/edu/ntnu/idi/idatt/calculator/TransactionCalculator.java
@@ -5,17 +5,23 @@
/**
* TransactionCalculator interface
*
- * Contains methods that are used upon doing a transaction
- * corresponding to a share and a week.
+ *
+ * Contains methods that are used upon doing a transaction
+ * corresponding to a share and a week.
+ *
+ *
* @see PurchaseCalculator
* @see SaleCalculator
*
*/
public interface TransactionCalculator {
- BigDecimal calculateGross(); // Gross - Norsk: verdi før avgifter
- BigDecimal calculateCommision(); // Commision - Norsk: (Kurtasje) En avgift som betales til megleren.
- BigDecimal calculateTax(); // Tax - Norsk: Skatt, en avgift som betales til staten.
- BigDecimal calculateTotal(); // Totalverdi etter avgifter
+ BigDecimal calculateGross(); // Gross - Norsk: verdi før avgifter
+
+ BigDecimal calculateCommision(); // Commision - Norsk: (Kurtasje) En avgift som betales til megleren.
+
+ BigDecimal calculateTax(); // Tax - Norsk: Skatt, en avgift som betales til staten.
+
+ BigDecimal calculateTotal(); // Totalverdi etter avgifter
}
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 535259b..f89c5cc 100644
--- a/src/main/java/edu/ntnu/idi/idatt/marked/Portfolio.java
+++ b/src/main/java/edu/ntnu/idi/idatt/marked/Portfolio.java
@@ -6,60 +6,62 @@
/**
* Portfolio class
*
- * Class that functions as a wallet for a player
- * storing all results of transactions made.
+ *
+ * Class that functions as a wallet for a player
+ * storing all results of transactions made.
+ *
*
*/
public class Portfolio {
- private ArrayList shares;
+ private ArrayList shares;
- /**
- * Setter for ArrayList shares.
- *
- * @param share - The bought share
- * @return - was the list modified?
- */
- public boolean addShare(Share share){
- return shares.add(share);
- }
+ /**
+ * Setter for ArrayList shares.
+ *
+ * @param share - The bought share
+ * @return - was the list modified?
+ */
+ public boolean addShare(Share share) {
+ return shares.add(share);
+ }
- /**
- * Setter for ArrayList shares.
- *
- * @param share - The sold share
- * @return - was the list modified?
- */
- public boolean removeShare(Share share){
- return shares.add(share);
- }
+ /**
+ * Setter for ArrayList shares.
+ *
+ * @param share - The sold share
+ * @return - was the list modified?
+ */
+ public boolean removeShare(Share share) {
+ return shares.add(share);
+ }
- /**
- * Getter for ArrayList shares.
- *
- * @return - List of all shares owned.
- */
- public List getShares() {
- return shares;
- }
+ /**
+ * Getter for ArrayList shares.
+ *
+ * @return - List of all shares owned.
+ */
+ public List getShares() {
+ return shares;
+ }
- /**
- * Getter for ArrayList shares.
- *
- * @param symbol - The symbol of the stock corresponding to the share.
- * @return - List of shares owned that corresponds with a company symbol.
- */
- public List getShares(String symbol) {
- return shares.stream().filter(s -> s.getStock().getSymbol().equals(symbol)).toList();
- }
+ /**
+ * Getter for ArrayList shares.
+ *
+ * @param symbol - The symbol of the stock corresponding to the share.
+ * @return - List of shares owned that corresponds with a company symbol.
+ */
+ public List getShares(String symbol) {
+ return shares.stream().filter(s -> s.getStock().getSymbol().equals(symbol)).toList();
+ }
- /**
- * Method for checking if the portfolio contains a specific share
- *
- * @return - If the share was found.
- */
- public boolean contains(Share share) {
- return shares.contains(share);
- }
+ /**
+ * Method for checking if the portfolio contains a specific share
+ *
+ * @return - If the share was found.
+ */
+ public boolean contains(Share share) {
+ return shares.contains(share);
+ }
}
diff --git a/src/main/java/edu/ntnu/idi/idatt/marked/Share.java b/src/main/java/edu/ntnu/idi/idatt/marked/Share.java
index 1f9c14b..0cc7432 100644
--- a/src/main/java/edu/ntnu/idi/idatt/marked/Share.java
+++ b/src/main/java/edu/ntnu/idi/idatt/marked/Share.java
@@ -5,45 +5,47 @@
/**
* Share class
*
- * Class that describes the ownership of a specific stock.
+ *
+ * Class that describes the ownership of a specific stock.
+ *
*
*/
public class Share {
- private final Stock stock;
- private BigDecimal quantity;
- private BigDecimal purchasePrice;
-
- /**
- * Constructor for a Share.
- *
- * @param stock - The stock this share corresponds to.
- * @see Stock
- * @param quantity - The total of bought shares of the stock.
- * @param purchasePrice - The current price when the stock was bought.
- */
- public Share(Stock stock, BigDecimal quantity, BigDecimal purchasePrice) {
- this.stock = stock;
- this.quantity = quantity;
- this.purchasePrice = purchasePrice;
- }
-
- /**
- * Getters
- *
- * @return - Their corresponding variables.
- */
-
- public Stock getStock() {
- return stock;
- }
-
- public BigDecimal getQuantity() {
- return quantity;
- }
-
- public BigDecimal getPurchasePrice() {
- return purchasePrice;
- }
+ private final Stock stock;
+ private BigDecimal quantity;
+ private BigDecimal purchasePrice;
+
+ /**
+ * Constructor for a Share.
+ *
+ * @param stock - The stock this share corresponds to.
+ * @see Stock
+ * @param quantity - The total of bought shares of the stock.
+ * @param purchasePrice - The current price when the stock was bought.
+ */
+ public Share(Stock stock, BigDecimal quantity, BigDecimal purchasePrice) {
+ this.stock = stock;
+ this.quantity = quantity;
+ this.purchasePrice = purchasePrice;
+ }
+
+ /**
+ * Getters
+ *
+ * @return - Their corresponding variables.
+ */
+
+ public Stock getStock() {
+ return stock;
+ }
+
+ public BigDecimal getQuantity() {
+ return quantity;
+ }
+
+ public BigDecimal getPurchasePrice() {
+ return purchasePrice;
+ }
}
diff --git a/src/main/java/edu/ntnu/idi/idatt/marked/Stock.java b/src/main/java/edu/ntnu/idi/idatt/marked/Stock.java
index 11ca9f8..2ba84b8 100644
--- a/src/main/java/edu/ntnu/idi/idatt/marked/Stock.java
+++ b/src/main/java/edu/ntnu/idi/idatt/marked/Stock.java
@@ -1,68 +1,71 @@
package edu.ntnu.idi.idatt.marked;
-
import java.math.BigDecimal;
import java.util.List;
/**
* Stock class
*
- * Class that describes an object of a unique stock.
+ *
+ * Class that describes an object of a unique stock.
+ *
*
*/
public class Stock {
- private final String symbol;
- private final String company;
- private final List prices;
+ private final String symbol;
+ private final String company;
+ private final List prices;
- /**
- * Constructor for a Stock.
- *
- * @param symbol - String that indicates the symbol of a stock, ex. "APPL" as a short form of company.
- * @param company - String, company name, ex. "Apple Inc."
- * @param prices - An array of BigInteger that indicates the price corresponding with time.
- */
- public Stock(String symbol, String company, List prices) {
- this.symbol = symbol;
- this.company = company;
- this.prices = prices;
- }
+ /**
+ * Constructor for a Stock.
+ *
+ * @param symbol - String that indicates the symbol of a stock, ex. "APPL" as a
+ * short form of company.
+ * @param company - String, company name, ex. "Apple Inc."
+ * @param prices - An array of BigInteger that indicates the price
+ * corresponding with time.
+ */
+ public Stock(String symbol, String company, List prices) {
+ this.symbol = symbol;
+ this.company = company;
+ this.prices = prices;
+ }
- /**
- * Getters
- *
- * @return - Their corresponding variables.
- */
+ /**
+ * Getters
+ *
+ * @return - Their corresponding variables.
+ */
- public String getSymbol() {
- return symbol;
- }
+ public String getSymbol() {
+ return symbol;
+ }
- public String getCompany() {
- return company;
- }
+ public String getCompany() {
+ return company;
+ }
- public List getPrices() {
- return prices;
- }
+ public List getPrices() {
+ return prices;
+ }
- /**
- * Getter for sale price
- *
- * @return - BigDecimal with current (newest in array) stock price.
- */
- public BigDecimal getSalesPrice() {
- return prices.getLast();
- }
+ /**
+ * Getter for sale price
+ *
+ * @return - BigDecimal with current (newest in array) stock price.
+ */
+ public BigDecimal getSalesPrice() {
+ return prices.getLast();
+ }
- /**
- * Method that adds new price to the price array.
- *
- * @param price - BigDecimal, new price.
- */
- public void addNewSalesPrice(BigDecimal price) {
- prices.add(price);
- }
+ /**
+ * Method that adds new price to the price array.
+ *
+ * @param price - BigDecimal, new price.
+ */
+ public void addNewSalesPrice(BigDecimal price) {
+ prices.add(price);
+ }
}
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java b/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java
index 157c193..f59127e 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java
@@ -5,28 +5,28 @@
import edu.ntnu.idi.idatt.calculator.TransactionCalculator;
import edu.ntnu.idi.idatt.marked.Share;
-public class Purchase extends Transaction{
- /**
- * Constructor for a Purchase
- *
- * @param share - The purchased share.
- * @param week - The current week
- */
- public Purchase(Share share, int week) {
- super(share, week, new PurchaseCalculator(share));
- }
+public class Purchase extends Transaction {
+ /**
+ * Constructor for a Purchase
+ *
+ * @param share - The purchased share.
+ * @param week - The current week
+ */
+ public Purchase(Share share, int week) {
+ super(share, week, new PurchaseCalculator(share));
+ }
- /**
- * @see Transaction
- * @param player - The player that does the transaction
- */
- @Override
- public void commit(Player player) {
- player.withdrawMoney(this.getCalculator().calculateTotal());
- player.getPortfolio().addShare(this.getShare());
- player.getTransactionArchive().add(this);
+ /**
+ * @see Transaction
+ * @param player - The player that does the transaction
+ */
+ @Override
+ public void commit(Player player) {
+ player.withdrawMoney(this.getCalculator().calculateTotal());
+ player.getPortfolio().addShare(this.getShare());
+ player.getTransactionArchive().add(this);
- this.commited = true;
- }
+ this.commited = true;
+ }
}
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java b/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java
index d3dfee2..75f195c 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java
@@ -5,27 +5,27 @@
import edu.ntnu.idi.idatt.calculator.TransactionCalculator;
import edu.ntnu.idi.idatt.marked.Share;
-public class Sale extends Transaction{
- /**
- * Constructor for a Sale
- *
- * @param share - The sold share
- * @param week - The current week
- */
- public Sale(Share share, int week) {
- super(share, week, new SaleCalculator(share));
- }
+public class Sale extends Transaction {
+ /**
+ * Constructor for a Sale
+ *
+ * @param share - The sold share
+ * @param week - The current week
+ */
+ public Sale(Share share, int week) {
+ super(share, week, new SaleCalculator(share));
+ }
- /**
- * @see Transaction
- * @param player - The player that does the transaction
- */
- @Override
- public void commit(Player player) {
- player.addMoney(this.getCalculator().calculateTotal());
- player.getPortfolio().removeShare(this.getShare());
- player.getTransactionArchive().add(this);
+ /**
+ * @see Transaction
+ * @param player - The player that does the transaction
+ */
+ @Override
+ public void commit(Player player) {
+ player.addMoney(this.getCalculator().calculateTotal());
+ player.getPortfolio().removeShare(this.getShare());
+ player.getTransactionArchive().add(this);
- this.commited = true;
- }
+ this.commited = true;
+ }
}
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java b/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java
index 1e955fe..f28629e 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java
@@ -7,60 +7,65 @@
/**
* Transaction class
*
- * An abstract class that handles a transaction
+ *
+ * An abstract class that handles a transaction
* based on week and share. Utilizes the calculators
- * to perform calculations.
+ * to perform calculations.
+ *
+ *
* @see TransactionCalculator
*/
public abstract class Transaction {
- private final Share share;
- private int week;
- private TransactionCalculator calculator;
- protected boolean commited;
+ private final Share share;
+ private int week;
+ private TransactionCalculator calculator;
+ protected boolean commited;
- /**
- * Constructor for a Transaction
- *
- * @param share - The share the transaction is about.
- * @param week - The current week
- * @param calculator - Transaction (Purchasae/Sale)
- */
- Transaction(Share share, int week, TransactionCalculator calculator) {
- this.share = share;
- this.week = week;
- this.calculator = calculator;
- }
+ /**
+ * Constructor for a Transaction
+ *
+ * @param share - The share the transaction is about.
+ * @param week - The current week
+ * @param calculator - Transaction (Purchasae/Sale)
+ */
+ Transaction(Share share, int week, TransactionCalculator calculator) {
+ this.share = share;
+ this.week = week;
+ this.calculator = calculator;
+ }
- /**
- *
- * Getters
- * @return - their corresponding variable
- *
- */
+ /**
+ *
+ * Getters
+ *
+ * @return - their corresponding variable
+ *
+ */
- public Share getShare() {
- return share;
- }
+ public Share getShare() {
+ return share;
+ }
- public int getWeek() {
- return week;
- }
+ public int getWeek() {
+ return week;
+ }
- public TransactionCalculator getCalculator() {
- return calculator;
- }
+ public TransactionCalculator getCalculator() {
+ return calculator;
+ }
- public boolean isCommited() {
- return commited;
- }
+ public boolean isCommited() {
+ return commited;
+ }
- /**
- * Abstract commit method to set the isCommited flag that symbolizes a unique transaction.
- *
- * @param player - The player that does the transaction
- */
- abstract public void commit(Player player);
+ /**
+ * Abstract commit method to set the isCommited flag that symbolizes a unique
+ * transaction.
+ *
+ * @param player - The player that does the transaction
+ */
+ abstract public void commit(Player player);
}
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 3fbeaa4..c53fa81 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/TransactionArchive.java
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/TransactionArchive.java
@@ -6,73 +6,75 @@
/**
* TransactionArchive class
*
- * Manages and handles transaction logic
+ *
+ * Manages and handles transaction logic
+ *
*
*/
public class TransactionArchive {
- private final ArrayList transactions = new ArrayList<>();
+ private final ArrayList transactions = new ArrayList<>();
- /**
- * Method for adding a new transaction to ArrayList transactions.
- *
- * @param transaction - The transaction instance
- * @return - was the list modified?
- */
- public boolean add(Transaction transaction){
- return transactions.add(transaction);
- }
+ /**
+ * Method for adding a new transaction to ArrayList transactions.
+ *
+ * @param transaction - The transaction instance
+ * @return - was the list modified?
+ */
+ public boolean add(Transaction transaction) {
+ return transactions.add(transaction);
+ }
- /**
- * Method for checking if there has been any transactions previously.
- *
- * @return - was the transactions ArrayList empty?
- */
- public boolean isEmpty(){
- return transactions.isEmpty();
- }
+ /**
+ * Method for checking if there has been any transactions previously.
+ *
+ * @return - was the transactions ArrayList empty?
+ */
+ public boolean isEmpty() {
+ return transactions.isEmpty();
+ }
- /**
- * Getter for transactions done
- *
- * @param week - Transaction interval
- * @return - List of Transaction done in a specified week.
- */
- public List getTransactions(int week) {
- return transactions.stream().filter(transaction -> transaction.getWeek() == week).toList();
- }
+ /**
+ * Getter for transactions done
+ *
+ * @param week - Transaction interval
+ * @return - List of Transaction done in a specified week.
+ */
+ public List getTransactions(int week) {
+ return transactions.stream().filter(transaction -> transaction.getWeek() == week).toList();
+ }
- /**
- * Getter for purchases done
- *
- * @param week - Purchase interval
- * @return - List of Purchase done in a specified week.
- */
- public List getPurchases(int week) {
- return transactions.stream().filter(t -> t instanceof Purchase)
- .map(t -> (Purchase) t)
- .toList();
- }
+ /**
+ * Getter for purchases done
+ *
+ * @param week - Purchase interval
+ * @return - List of Purchase done in a specified week.
+ */
+ public List getPurchases(int week) {
+ return transactions.stream().filter(t -> t instanceof Purchase)
+ .map(t -> (Purchase) t)
+ .toList();
+ }
- /**
- * Getter for sales done
- *
- * @param week - Sale interval
- * @return - List of Sale done in a specified week.
- */
- public List getSales(int week) {
- return transactions.stream().filter(t -> t instanceof Sale)
- .map(t -> (Sale) t)
- .toList();
- }
+ /**
+ * Getter for sales done
+ *
+ * @param week - Sale interval
+ * @return - List of Sale done in a specified week.
+ */
+ public List getSales(int week) {
+ return transactions.stream().filter(t -> t instanceof Sale)
+ .map(t -> (Sale) t)
+ .toList();
+ }
- /**
- * Part 2
- *
- * @return
- */
- public int countDistinctWeeks(){ //TODO: HERE
- return -1;
- }
+ /**
+ * Part 2
+ *
+ * @return
+ */
+ public int countDistinctWeeks() { // TODO: HERE
+ return -1;
+ }
}
From a4e968c38bd96b87821c4e12b60d93fc92a8d653 Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Fri, 13 Feb 2026 17:15:16 +0100
Subject: [PATCH 02/21] chore: Set unspecified variable
---
src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java b/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java
index 2d77502..1df1f61 100644
--- a/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java
+++ b/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java
@@ -26,7 +26,7 @@ public class SaleCalculator implements TransactionCalculator {
*/
public SaleCalculator(Share share) {
this.purchasePrice = share.getPurchasePrice();
- this.salesPrice = BigDecimal.ZERO; // TODO: Implement here
+ this.salesPrice = share.getStock().getSalesPrice();
this.quantity = share.getQuantity();
}
From b30e599858dc8d4b4ef24f05ee3c1760229acbdf Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Fri, 13 Feb 2026 17:23:20 +0100
Subject: [PATCH 03/21] chore: JavaDocs, Set unspecified return.
---
.../java/edu/ntnu/idi/idatt/Exchange.java | 87 ++++++++++++++++++-
1 file changed, 84 insertions(+), 3 deletions(-)
diff --git a/src/main/java/edu/ntnu/idi/idatt/Exchange.java b/src/main/java/edu/ntnu/idi/idatt/Exchange.java
index f121509..318b69f 100644
--- a/src/main/java/edu/ntnu/idi/idatt/Exchange.java
+++ b/src/main/java/edu/ntnu/idi/idatt/Exchange.java
@@ -9,15 +9,29 @@
import java.math.BigDecimal;
import java.util.*;
+/**
+ * Exchange class
+ *
+ *
+ * Class that keeps the 'stock game' gameloop.
+ * Contains methods for managing game states aswell as performing
+ * all functionality.
+ *
+ *
+ */
public class Exchange {
- // TODO: JavaDocs, Write over functions mby
-
private final String name;
private int week;
private HashMap stockMap = new HashMap<>();
private Random random = new Random();
+ /**
+ * Constructor for Exchange class
+ *
+ * @param name - Name of the current stock Exchange
+ * @param stocks - List of aviable stocks for this exchange.
+ */
public Exchange(String name, List stocks) {
this.name = name;
this.week = 1;
@@ -28,6 +42,13 @@ public Exchange(String name, List stocks) {
}
+ /**
+ *
+ * Getters
+ *
+ * @return - their corresponding variables.
+ */
+
public String getName() {
return name;
}
@@ -36,17 +57,37 @@ public int getWeek() {
return week;
}
+ /**
+ * Method for checking if a specific stock exists in the exchange.
+ *
+ * @param symbol - String symbol of a specific stock.
+ * @return - true/false if the exchange has the specific stock.
+ */
public boolean hasStock(String symbol) {
return stockMap.containsKey(symbol);
}
+ /**
+ * Getter for a specific stock.
+ *
+ * @param symbol - String symbol of a specific stock.
+ * @return - The found stock if existant.
+ * @throws IllegalArgumentException if invalid symbol given.
+ */
public Stock getStock(String symbol) {
if (this.hasStock(symbol)) {
stockMap.get(symbol);
}
- return null; // TODO: Exception
+ throw new IllegalArgumentException("This stock doesn't exist in [" + name + "] exchange.");
}
+ /**
+ * Method for searching after stocks.
+ *
+ * @param searchTerm - String or character sequence of corporation name /
+ * corresponding symbol.
+ * @return - List of found stocks.
+ */
public List findStocks(String searchTerm) {
ArrayList stocksFound = new ArrayList<>();
@@ -58,6 +99,22 @@ public List findStocks(String searchTerm) {
return stocksFound;
}
+ /**
+ * Method to allow a player to buy a stock.
+ *
+ *
+ * Executes a purchase for a player which executes all logic
+ * and management of money, portfolio and archive.
+ *
+ *
+ * @see Purchase
+ *
+ * @param symbol - The symbol of the bought stock.
+ * @param quantity - The amount of a bought stock.
+ * @param player - which player did this event.
+ * @return The given transaction details. (Transaction).
+ * @see Transaction
+ */
public Transaction buy(String symbol, BigDecimal quantity, Player player) {
Share share = new Share(getStock(symbol), quantity, BigDecimal.valueOf(random.nextDouble()));
Purchase purchase = new Purchase(share, this.week);
@@ -65,12 +122,36 @@ public Transaction buy(String symbol, BigDecimal quantity, Player player) {
return player.getTransactionArchive().getPurchases(this.week).getLast();
}
+ /**
+ * Method to allow a player to sell a stock.
+ *
+ *
+ * Executes a sale for a player which executes all logic
+ * and management of money, portfolio and archive.
+ *
+ *
+ * @see Sale
+ *
+ * @param Share - The instance of the sold share.
+ * @param player - which player did this event.
+ * @return The given transaction details. (Transaction).
+ * @see Transaction
+ */
public Transaction sell(Share share, Player player) {
Sale sale = new Sale(share, this.week);
sale.commit(player);
return player.getTransactionArchive().getSales(this.week).getLast();
}
+ /**
+ * Method to advance the gameloop.
+ *
+ *
+ * Adds a new price to each of the stock array.
+ *
+ *
+ * @see Stock
+ */
public void advance() {
for (Stock stocks : stockMap.values()) {
stocks.addNewSalesPrice(BigDecimal.valueOf(random.nextDouble()));
From 766a14128d542b41dadbb2e1f06edc6b95bc1e53 Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Fri, 13 Feb 2026 17:28:18 +0100
Subject: [PATCH 04/21] chore(Purchase, Sale): Add JavaDoc and reorganize
imports.
---
.../edu/ntnu/idi/idatt/transaction/Purchase.java | 12 +++++++++++-
.../java/edu/ntnu/idi/idatt/transaction/Sale.java | 12 +++++++++++-
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java b/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java
index f59127e..ac9152f 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java
@@ -2,9 +2,19 @@
import edu.ntnu.idi.idatt.Player;
import edu.ntnu.idi.idatt.calculator.PurchaseCalculator;
-import edu.ntnu.idi.idatt.calculator.TransactionCalculator;
import edu.ntnu.idi.idatt.marked.Share;
+/**
+ * Purchase class
+ *
+ *
+ * Manages player state at purhcasing stocks.
+ * Collected as detail in TransactionArchive.
+ *
+ *
+ * @see Transaction
+ * @see TransactionArchive
+ */
public class Purchase extends Transaction {
/**
* Constructor for a Purchase
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java b/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java
index 75f195c..e0b6292 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java
@@ -2,9 +2,19 @@
import edu.ntnu.idi.idatt.Player;
import edu.ntnu.idi.idatt.calculator.SaleCalculator;
-import edu.ntnu.idi.idatt.calculator.TransactionCalculator;
import edu.ntnu.idi.idatt.marked.Share;
+/**
+ * Sale class
+ *
+ *
+ * Manages player state at selling stocks.
+ * Collected as detail in TransactionArchive.
+ *
+ *
+ * @see Transaction
+ * @see TransactionArchive
+ */
public class Sale extends Transaction {
/**
* Constructor for a Sale
From f25f4fb1fa7c9b208d434680729681b60a62e0e5 Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Fri, 13 Feb 2026 22:22:27 +0100
Subject: [PATCH 05/21] feat: add JUnit tests structure
---
src/test/java/edu/ntnu/idi/idatt/ExchangeTest.java | 4 ++++
src/test/java/edu/ntnu/idi/idatt/PlayerTest.java | 4 ++++
.../edu/ntnu/idi/idatt/calculator/PurchaseCalculatorTest.java | 4 ++++
.../edu/ntnu/idi/idatt/calculator/SaleCalculatorTest.java | 4 ++++
src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java | 4 ++++
src/test/java/edu/ntnu/idi/idatt/marked/ShareTest.java | 4 ++++
src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java | 4 ++++
.../java/edu/ntnu/idi/idatt/transaction/PurchaseTest.java | 4 ++++
src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java | 4 ++++
.../ntnu/idi/idatt/transaction/TransactionArchiveTest.java | 4 ++++
.../java/edu/ntnu/idi/idatt/transaction/TransactionTest.java | 4 ++++
11 files changed, 44 insertions(+)
create mode 100644 src/test/java/edu/ntnu/idi/idatt/ExchangeTest.java
create mode 100644 src/test/java/edu/ntnu/idi/idatt/PlayerTest.java
create mode 100644 src/test/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculatorTest.java
create mode 100644 src/test/java/edu/ntnu/idi/idatt/calculator/SaleCalculatorTest.java
create mode 100644 src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java
create mode 100644 src/test/java/edu/ntnu/idi/idatt/marked/ShareTest.java
create mode 100644 src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java
create mode 100644 src/test/java/edu/ntnu/idi/idatt/transaction/PurchaseTest.java
create mode 100644 src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java
create mode 100644 src/test/java/edu/ntnu/idi/idatt/transaction/TransactionArchiveTest.java
create mode 100644 src/test/java/edu/ntnu/idi/idatt/transaction/TransactionTest.java
diff --git a/src/test/java/edu/ntnu/idi/idatt/ExchangeTest.java b/src/test/java/edu/ntnu/idi/idatt/ExchangeTest.java
new file mode 100644
index 0000000..153f079
--- /dev/null
+++ b/src/test/java/edu/ntnu/idi/idatt/ExchangeTest.java
@@ -0,0 +1,4 @@
+package edu.ntnu.idi.idatt;
+
+class ExchangeTest {
+}
diff --git a/src/test/java/edu/ntnu/idi/idatt/PlayerTest.java b/src/test/java/edu/ntnu/idi/idatt/PlayerTest.java
new file mode 100644
index 0000000..d6bab4b
--- /dev/null
+++ b/src/test/java/edu/ntnu/idi/idatt/PlayerTest.java
@@ -0,0 +1,4 @@
+package edu.ntnu.idi.idatt;
+
+class PlayerTest {
+}
diff --git a/src/test/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculatorTest.java b/src/test/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculatorTest.java
new file mode 100644
index 0000000..c69b00a
--- /dev/null
+++ b/src/test/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculatorTest.java
@@ -0,0 +1,4 @@
+package edu.ntnu.idi.idatt.calculator;
+
+class PurchaseCalculatorTest {
+}
diff --git a/src/test/java/edu/ntnu/idi/idatt/calculator/SaleCalculatorTest.java b/src/test/java/edu/ntnu/idi/idatt/calculator/SaleCalculatorTest.java
new file mode 100644
index 0000000..71b9be1
--- /dev/null
+++ b/src/test/java/edu/ntnu/idi/idatt/calculator/SaleCalculatorTest.java
@@ -0,0 +1,4 @@
+package edu.ntnu.idi.idatt.calculator;
+
+class SaleCalculatorTest {
+}
diff --git a/src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java b/src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java
new file mode 100644
index 0000000..c95d82a
--- /dev/null
+++ b/src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java
@@ -0,0 +1,4 @@
+package edu.ntnu.idi.idatt.marked;
+
+public class PortfolioTest {
+}
diff --git a/src/test/java/edu/ntnu/idi/idatt/marked/ShareTest.java b/src/test/java/edu/ntnu/idi/idatt/marked/ShareTest.java
new file mode 100644
index 0000000..9025960
--- /dev/null
+++ b/src/test/java/edu/ntnu/idi/idatt/marked/ShareTest.java
@@ -0,0 +1,4 @@
+package edu.ntnu.idi.idatt.marked;
+
+public class ShareTest {
+}
diff --git a/src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java b/src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java
new file mode 100644
index 0000000..76d2c24
--- /dev/null
+++ b/src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java
@@ -0,0 +1,4 @@
+package edu.ntnu.idi.idatt.marked;
+
+class StockTest {
+}
diff --git a/src/test/java/edu/ntnu/idi/idatt/transaction/PurchaseTest.java b/src/test/java/edu/ntnu/idi/idatt/transaction/PurchaseTest.java
new file mode 100644
index 0000000..aeab4fc
--- /dev/null
+++ b/src/test/java/edu/ntnu/idi/idatt/transaction/PurchaseTest.java
@@ -0,0 +1,4 @@
+package edu.ntnu.idi.idatt.transaction;
+
+class PurchaseTest {
+}
diff --git a/src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java b/src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java
new file mode 100644
index 0000000..c69a039
--- /dev/null
+++ b/src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java
@@ -0,0 +1,4 @@
+package edu.ntnu.idi.idatt.transaction;
+
+class SaleTest {
+}
diff --git a/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionArchiveTest.java b/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionArchiveTest.java
new file mode 100644
index 0000000..0ad836e
--- /dev/null
+++ b/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionArchiveTest.java
@@ -0,0 +1,4 @@
+package edu.ntnu.idi.idatt.transaction;
+
+class TransactionArchiveTest {
+}
diff --git a/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionTest.java b/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionTest.java
new file mode 100644
index 0000000..a1232b0
--- /dev/null
+++ b/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionTest.java
@@ -0,0 +1,4 @@
+package edu.ntnu.idi.idatt.transaction;
+
+class TransactionTest {
+}
From df77f35b6fee6d3e9f81fdbd12be65a30d771cf6 Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Fri, 13 Feb 2026 23:26:27 +0100
Subject: [PATCH 06/21] fix: pom.xml dependency/plugins reorganization
---
pom.xml | 35 +++++++++++++++++++----------------
1 file changed, 19 insertions(+), 16 deletions(-)
diff --git a/pom.xml b/pom.xml
index 1cf199e..467f022 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,13 +20,7 @@
maven-compiler-plugin
3.14.1
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- 3.5.4
-
-
+
org.apache.maven.plugins
maven-javadoc-plugin
@@ -39,12 +33,27 @@
25.0.1
+
+ org.junit.jupiter
+ junit-jupiter
+ 6.0.1
+ test
+
+
+
-
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.5.4
+
+
org.openjfx
@@ -78,13 +87,7 @@
-
- org.junit.jupiter
- junit-jupiter
- 6.0.1
-
-
-
+
-
\ No newline at end of file
+
From 6ca4068455a5dc27656dfddc18cce213396e44d7 Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Fri, 13 Feb 2026 23:49:21 +0100
Subject: [PATCH 07/21] feat(Stock): Add initial tests and fix corresponding
class.
---
.../java/edu/ntnu/idi/idatt/marked/Stock.java | 5 +-
.../edu/ntnu/idi/idatt/marked/StockTest.java | 47 ++++++++++++++++++-
2 files changed, 49 insertions(+), 3 deletions(-)
diff --git a/src/main/java/edu/ntnu/idi/idatt/marked/Stock.java b/src/main/java/edu/ntnu/idi/idatt/marked/Stock.java
index 2ba84b8..40f071e 100644
--- a/src/main/java/edu/ntnu/idi/idatt/marked/Stock.java
+++ b/src/main/java/edu/ntnu/idi/idatt/marked/Stock.java
@@ -1,6 +1,7 @@
package edu.ntnu.idi.idatt.marked;
import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -15,7 +16,7 @@ public class Stock {
private final String symbol;
private final String company;
- private final List prices;
+ private final ArrayList prices = new ArrayList<>();
/**
* Constructor for a Stock.
@@ -29,7 +30,7 @@ public class Stock {
public Stock(String symbol, String company, List prices) {
this.symbol = symbol;
this.company = company;
- this.prices = prices;
+ this.prices.addAll(prices);
}
/**
diff --git a/src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java b/src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java
index 76d2c24..ec226c4 100644
--- a/src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java
@@ -1,4 +1,49 @@
package edu.ntnu.idi.idatt.marked;
-class StockTest {
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Alias definitions
+ * PT - Positive test/s
+ *
+ */
+
+public class StockTest {
+
+ private Stock stock;
+
+ @BeforeEach
+ public void PT_setup() {
+ List prices = List.of(BigDecimal.valueOf(46.2),
+ BigDecimal.valueOf(40.0));
+ stock = new Stock("AAPL", "Apple Inc.", prices);
+
+ }
+
+ @Test
+ void constructorTest() {
+ assertEquals("AAPL", stock.getSymbol());
+ assertEquals("Apple Inc.", stock.getCompany());
+
+ assertEquals(List.of(BigDecimal.valueOf(46.2),
+ BigDecimal.valueOf(40.0)), stock.getPrices());
+
+ assertEquals(BigDecimal.valueOf(40.0), stock.getSalesPrice());
+ }
+
+ @Test
+ void addNewSalesPriceTest() {
+ BigDecimal value = BigDecimal.valueOf(15.6);
+ stock.addNewSalesPrice(value);
+
+ assertEquals(value, stock.getSalesPrice());
+ }
+
}
From b5f06fb8f04cbe6752491f63b30601398021eca6 Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Fri, 13 Feb 2026 23:59:31 +0100
Subject: [PATCH 08/21] feat(Share): Add initial tests.
---
.../edu/ntnu/idi/idatt/marked/ShareTest.java | 33 +++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/src/test/java/edu/ntnu/idi/idatt/marked/ShareTest.java b/src/test/java/edu/ntnu/idi/idatt/marked/ShareTest.java
index 9025960..3af2df2 100644
--- a/src/test/java/edu/ntnu/idi/idatt/marked/ShareTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/marked/ShareTest.java
@@ -1,4 +1,37 @@
package edu.ntnu.idi.idatt.marked;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
public class ShareTest {
+
+ private Share share;
+ private Stock stock;
+
+ @BeforeEach
+ public void PT_setup() {
+ List prices = List.of(BigDecimal.valueOf(46.2),
+ BigDecimal.valueOf(40.0));
+ stock = new Stock("AAPL", "Apple Inc.", prices);
+
+ // Share parameters
+ BigDecimal quantity = BigDecimal.valueOf(3.3);
+
+ share = new Share(stock, quantity, stock.getSalesPrice());
+ }
+
+ @Test
+ void constructorTest() {
+
+ assertEquals(stock, share.getStock());
+ assertEquals(BigDecimal.valueOf(3.3), share.getQuantity());
+ assertEquals(stock.getSalesPrice(), share.getPurchasePrice());
+
+ }
+
}
From cbda1fb87d7666d2f5cebbe424e2609b42d929f5 Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Sat, 14 Feb 2026 17:01:17 +0100
Subject: [PATCH 09/21] feat(Portfolio): Add initial tests and fix
corresponding class.
---
.../edu/ntnu/idi/idatt/marked/Portfolio.java | 4 +-
.../ntnu/idi/idatt/marked/PortfolioTest.java | 79 +++++++++++++++++++
2 files changed, 81 insertions(+), 2 deletions(-)
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 f89c5cc..e1385e2 100644
--- a/src/main/java/edu/ntnu/idi/idatt/marked/Portfolio.java
+++ b/src/main/java/edu/ntnu/idi/idatt/marked/Portfolio.java
@@ -14,7 +14,7 @@
*/
public class Portfolio {
- private ArrayList shares;
+ private ArrayList shares = new ArrayList<>();
/**
* Setter for ArrayList shares.
@@ -33,7 +33,7 @@ public boolean addShare(Share share) {
* @return - was the list modified?
*/
public boolean removeShare(Share share) {
- return shares.add(share);
+ return shares.remove(share);
}
/**
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 c95d82a..24c22d9 100644
--- a/src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java
@@ -1,4 +1,83 @@
package edu.ntnu.idi.idatt.marked;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Test for Portfolio class
+ *
+ *
+ * Tests done linearly with @BeforeAll, checking
+ * if functionality works as a whole,
+ *
+ */
+
public class PortfolioTest {
+
+ private Stock stock;
+ private Share share;
+ private Portfolio portfolio;
+
+ @BeforeEach
+ public void PT_setup() {
+ // stock instance and parameters
+ List prices = List.of(BigDecimal.valueOf(46.2),
+ BigDecimal.valueOf(40.0));
+ stock = new Stock("AAPL", "Apple Inc.", prices);
+
+ // Share instance parameters
+ BigDecimal quantity = BigDecimal.valueOf(3.3);
+ share = new Share(stock, quantity, stock.getSalesPrice());
+
+ // Portfolio instance
+ portfolio = new Portfolio();
+ }
+
+ @Test
+ void PTaddShare() {
+
+ assertTrue(portfolio.addShare(share));
+ assertEquals(List.of(share), portfolio.getShares());
+
+ }
+
+ void addDefaultShare() { // Since PTaddShare test works, we will use this to initialize
+ // the rest of the tests under.
+ portfolio.addShare(share);
+ }
+
+ @Test
+ void PTgetSharesBySymbol() {
+ addDefaultShare();
+
+ assertEquals(List.of(), portfolio.getShares("SYMBL"));
+ assertEquals(List.of(share), portfolio.getShares("AAPL"));
+
+ }
+
+ @Test
+ void PTremoveShare() {
+ addDefaultShare();
+
+ assertTrue(portfolio.removeShare(share));
+ assertEquals(List.of(), portfolio.getShares());
+
+ }
+
+ @Test
+ void PTContains() {
+ assertFalse(portfolio.contains(share));
+
+ portfolio.addShare(share);
+
+ assertTrue(portfolio.contains(share));
+ }
+
}
From 5ab252d52bd349b6973e0b702ef057a4ee709b70 Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Sun, 15 Feb 2026 02:36:24 +0100
Subject: [PATCH 10/21] feat(PurchaseCalculator): Add initial tests.
---
.../calculator/PurchaseCalculatorTest.java | 47 +++++++++++++++++++
1 file changed, 47 insertions(+)
diff --git a/src/test/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculatorTest.java b/src/test/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculatorTest.java
index c69b00a..94f1fc6 100644
--- a/src/test/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculatorTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculatorTest.java
@@ -1,4 +1,51 @@
package edu.ntnu.idi.idatt.calculator;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+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;
+
class PurchaseCalculatorTest {
+
+ private Stock stock;
+ private Share share;
+ private PurchaseCalculator purchaseCalculator;
+
+ @BeforeEach
+ public void PT_setup() {
+ // stock instance and parameters
+ List prices = List.of(BigDecimal.valueOf(46.2),
+ BigDecimal.valueOf(40.0));
+ stock = new Stock("AAPL", "Apple Inc.", prices);
+
+ // Share instance parameters
+ BigDecimal quantity = BigDecimal.valueOf(3.3);
+ share = new Share(stock, quantity, stock.getSalesPrice());
+
+ // PurchaseCalculator instance
+ purchaseCalculator = new PurchaseCalculator(share);
+ }
+
+ /**
+ *
+ * Since calculateTotal() method is composed of all the other methods in this
+ * class,
+ * it will singlehandedly validate the methods of this class.
+ */
+ @Test
+ void PT_calculationTotal() {
+
+ BigDecimal expected = BigDecimal.valueOf(40.0)
+ .multiply(BigDecimal.valueOf(3.3))
+ .multiply(BigDecimal.valueOf(1.005));
+ assertEquals(expected, purchaseCalculator.calculateTotal());
+
+ }
+
}
From e85d4ae00fa3a43d6f81387ba0d59d78456b62f2 Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Sun, 15 Feb 2026 02:37:58 +0100
Subject: [PATCH 11/21] feat(SaleCalculator): Add initial tests and fix
corresponding class.
---
.../idi/idatt/calculator/SaleCalculator.java | 5 +-
.../idatt/calculator/SaleCalculatorTest.java | 75 +++++++++++++++++++
2 files changed, 78 insertions(+), 2 deletions(-)
diff --git a/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java b/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java
index 1df1f61..d9dc8f0 100644
--- a/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java
+++ b/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java
@@ -59,8 +59,9 @@ public BigDecimal calculateCommision() {
@Override
public BigDecimal calculateTax() {
BigDecimal taxPercentage = BigDecimal.valueOf(0.3); // Corresponding to 30%
- BigDecimal profit = calculateGross().subtract(purchasePrice.multiply(quantity)); // gross - purchase price x
- // quanitity
+ BigDecimal profit = calculateGross().subtract(purchasePrice.multiply(quantity))
+ .subtract(calculateCommision()); // (gross - tax - buy costs)
+
return profit.multiply(taxPercentage);
}
diff --git a/src/test/java/edu/ntnu/idi/idatt/calculator/SaleCalculatorTest.java b/src/test/java/edu/ntnu/idi/idatt/calculator/SaleCalculatorTest.java
index 71b9be1..83b46d1 100644
--- a/src/test/java/edu/ntnu/idi/idatt/calculator/SaleCalculatorTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/calculator/SaleCalculatorTest.java
@@ -1,4 +1,79 @@
package edu.ntnu.idi.idatt.calculator;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+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;
+
class SaleCalculatorTest {
+
+ private Stock stock;
+ private Share share;
+ private SaleCalculator saleCalculator;
+
+ @BeforeEach
+ public void PT_setup() {
+ // stock instance and parameters
+ List prices = List.of(BigDecimal.valueOf(46.2),
+ BigDecimal.valueOf(40.0));
+ stock = new Stock("AAPL", "Apple Inc.", prices);
+
+ // Share instance parameters
+ BigDecimal quantity = BigDecimal.valueOf(3.3);
+ share = new Share(stock, quantity, stock.getSalesPrice());
+
+ // PurchaseCalculator instance
+ saleCalculator = new SaleCalculator(share);
+ }
+
+ /**
+ *
+ * Since calculateTotal() method is composed of all the other methods in this
+ * class,
+ * it will singlehandedly validate the methods of this class.
+ *
+ * @see SaleCalculator
+ */
+ @Test
+ void PT_calculationTotal() {
+
+ // For imitation, let's add a new weeks stock price.
+ stock.addNewSalesPrice(BigDecimal.valueOf(47.8));
+ saleCalculator = new SaleCalculator(share);
+ /**
+ * Update the SaleCalculator sale price variable. Due to the formulation of the
+ * task,
+ * we have to contain the purchasePrice, salesPrice and quantity as fields
+ * instead of
+ * accessing them through the share itself (Share holds a final reference to a
+ * Stock)
+ * which suggests contineous update of the field.
+ *
+ * Since this class is instanced in the constructor of Sale which is again
+ * itself instanced for each player event, this method is contineously updated
+ * in a way compared the line over.
+ *
+ * @see Exchange
+ */
+
+ BigDecimal gross = share.getStock().getSalesPrice().multiply(share.getQuantity());
+ BigDecimal commision = gross.multiply(BigDecimal.valueOf(0.01));
+ System.out.println(gross);
+ System.out.println(saleCalculator.calculateGross());
+ BigDecimal tax = gross.subtract(commision).subtract(
+ share.getPurchasePrice()
+ .multiply(share.getQuantity()))
+ .multiply(BigDecimal.valueOf(0.3));
+
+ BigDecimal expected = gross.subtract(commision).subtract(tax);
+ assertEquals(expected, saleCalculator.calculateTotal());
+
+ }
+
}
From a497a7541ab3ef02ab4909393e339aee9e6ca665 Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Sun, 15 Feb 2026 20:27:23 +0100
Subject: [PATCH 12/21] feat(Purchase): Add initial tests.
---
.../idi/idatt/transaction/PurchaseTest.java | 66 +++++++++++++++++++
1 file changed, 66 insertions(+)
diff --git a/src/test/java/edu/ntnu/idi/idatt/transaction/PurchaseTest.java b/src/test/java/edu/ntnu/idi/idatt/transaction/PurchaseTest.java
index aeab4fc..1d0bb58 100644
--- a/src/test/java/edu/ntnu/idi/idatt/transaction/PurchaseTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/transaction/PurchaseTest.java
@@ -1,4 +1,70 @@
package edu.ntnu.idi.idatt.transaction;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+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.Player;
+import edu.ntnu.idi.idatt.marked.Share;
+import edu.ntnu.idi.idatt.marked.Stock;
+
+/**
+ * Testing for Purchase class
+ *
+ *
+ * Since this class is meant as an object
+ * that contains transaction details, we will look away from
+ * testing commit() method.
+ *
+ * commit() contains only method calls upon player, except changing the commited
+ * boolean field.
+ * We will only be vaguely testing it for this field.
+ *
+ */
class PurchaseTest {
+
+ private Stock stock;
+ private Share share;
+ private Purchase purchase;
+
+ @BeforeEach
+ public void PT_setup() {
+ // stock instance and parameters
+ List prices = List.of(BigDecimal.valueOf(46.2),
+ BigDecimal.valueOf(40.0));
+ stock = new Stock("AAPL", "Apple Inc.", prices);
+
+ // Share instance and parameters
+ BigDecimal quantity = BigDecimal.valueOf(3.3);
+ share = new Share(stock, quantity, stock.getSalesPrice());
+
+ // Transaction instance
+ purchase = new Purchase(share, 1);
+ }
+
+ /**
+ *
+ * Since calculateTotal() method is composed of all the other methods in this
+ * class,
+ * it will singlehandedly validate the methods of this class.
+ */
+ @Test
+ void PTconstructorTest() {
+
+ assertEquals(share, purchase.getShare());
+ assertEquals(1, purchase.getWeek());
+ assertEquals(new BigDecimal("132.00"), purchase.getCalculator().calculateGross()); // Because of none stored
+ // *Calculator, we test with a existing method we can measure the values of.
+ assertFalse(purchase.isCommited());
+ purchase.commit(new Player("ExamplePlayer", BigDecimal.valueOf(2500)));
+ assertTrue(purchase.isCommited());
+
+ }
+
}
From 1c4ce00d3a5e169a5c3e3378f7bfeaeda67fd134 Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Sun, 15 Feb 2026 20:28:28 +0100
Subject: [PATCH 13/21] feat(Sale): Add initial tests.
---
.../ntnu/idi/idatt/transaction/SaleTest.java | 66 +++++++++++++++++++
1 file changed, 66 insertions(+)
diff --git a/src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java b/src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java
index c69a039..d026a1b 100644
--- a/src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java
@@ -1,4 +1,70 @@
package edu.ntnu.idi.idatt.transaction;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+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.Player;
+import edu.ntnu.idi.idatt.marked.Share;
+import edu.ntnu.idi.idatt.marked.Stock;
+
+/**
+ * Testing for Sale class
+ *
+ *
+ * Since this class is meant as an object
+ * that contains transaction details, we will look away from
+ * testing commit() method.
+ *
+ * commit() contains only method calls upon player, except changing the commited
+ * boolean field.
+ * We will only be vaguely testing it for this field.
+ *
+ */
class SaleTest {
+
+ private Stock stock;
+ private Share share;
+ private Sale sale;
+
+ @BeforeEach
+ public void PT_setup() {
+ // stock instance and parameters
+ List prices = List.of(BigDecimal.valueOf(46.2),
+ BigDecimal.valueOf(40.0));
+ stock = new Stock("AAPL", "Apple Inc.", prices);
+
+ // Share instance and parameters
+ BigDecimal quantity = BigDecimal.valueOf(3.3);
+ share = new Share(stock, quantity, stock.getSalesPrice());
+
+ // Transaction instance
+ sale = new Sale(share, 1);
+ }
+
+ /**
+ *
+ * Since calculateTotal() method is composed of all the other methods in this
+ * class,
+ * it will singlehandedly validate the methods of this class.
+ */
+ @Test
+ void PTconstructorTest() {
+
+ assertEquals(share, sale.getShare());
+ assertEquals(1, sale.getWeek());
+ assertEquals(new BigDecimal("132.00"), sale.getCalculator().calculateGross()); // Because of none stored
+ // *Calculator, we test with a existing method we can measure the values of.
+ assertFalse(sale.isCommited());
+ sale.commit(new Player("ExamplePlayer", BigDecimal.valueOf(2500)));
+ assertTrue(sale.isCommited());
+
+ }
+
}
From a1facac6b96531ebe4fef5130c37d9755fa62249 Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Sun, 15 Feb 2026 20:31:16 +0100
Subject: [PATCH 14/21] chore: Removed redundant test classes.
---
.../java/edu/ntnu/idi/idatt/transaction/TransactionTest.java | 4 ----
1 file changed, 4 deletions(-)
delete mode 100644 src/test/java/edu/ntnu/idi/idatt/transaction/TransactionTest.java
diff --git a/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionTest.java b/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionTest.java
deleted file mode 100644
index a1232b0..0000000
--- a/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionTest.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package edu.ntnu.idi.idatt.transaction;
-
-class TransactionTest {
-}
From 553bc00eb8d4a5994784679fec5fd2feee61557c Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Sun, 15 Feb 2026 21:46:36 +0100
Subject: [PATCH 15/21] feat(TransactionArchive): Add initial tests and fix
corresponding class.
---
.../idatt/transaction/TransactionArchive.java | 4 +-
.../transaction/TransactionArchiveTest.java | 86 +++++++++++++++++++
2 files changed, 88 insertions(+), 2 deletions(-)
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 c53fa81..0567591 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/TransactionArchive.java
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/TransactionArchive.java
@@ -51,7 +51,7 @@ public List getTransactions(int week) {
* @return - List of Purchase done in a specified week.
*/
public List getPurchases(int week) {
- return transactions.stream().filter(t -> t instanceof Purchase)
+ return getTransactions(week).stream().filter(t -> t instanceof Purchase)
.map(t -> (Purchase) t)
.toList();
}
@@ -63,7 +63,7 @@ public List getPurchases(int week) {
* @return - List of Sale done in a specified week.
*/
public List getSales(int week) {
- return transactions.stream().filter(t -> t instanceof Sale)
+ return getTransactions(week).stream().filter(t -> t instanceof Sale)
.map(t -> (Sale) t)
.toList();
}
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 0ad836e..a7a388f 100644
--- a/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionArchiveTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionArchiveTest.java
@@ -1,4 +1,90 @@
package edu.ntnu.idi.idatt.transaction;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+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;
+
class TransactionArchiveTest {
+
+ List transactions;
+ TransactionArchive transactionArchive;
+
+ @BeforeEach
+ public void getDefaultValues() {
+
+ Stock AAPL = new Stock("AAPL", "Apple Inc.", List.of(BigDecimal.valueOf(32)));
+ Stock NVDA = new Stock("NVDA", "NVIDIA", List.of(BigDecimal.valueOf(182.81)));
+ Stock TSLA = new Stock("TSLA", "Tesla", List.of(BigDecimal.valueOf(417.44)));
+ Stock AMD = new Stock("AMD", "Advanced Micro Devices", List.of(BigDecimal.valueOf(207.32)));
+
+ Share AAPLShare = new Share(AAPL, BigDecimal.valueOf(1.0), AAPL.getSalesPrice());
+ Share NVDAShare = new Share(NVDA, BigDecimal.valueOf(1.0), NVDA.getSalesPrice());
+ Share TSLAShare = new Share(TSLA, BigDecimal.valueOf(1.0), TSLA.getSalesPrice());
+ Share AMDShare = new Share(AMD, BigDecimal.valueOf(1.0), AMD.getSalesPrice());
+
+ Purchase purchase1 = new Purchase(AAPLShare, 1);
+ Purchase purchase2 = new Purchase(AMDShare, 2);
+ Sale sale1 = new Sale(TSLAShare, 1);
+ Sale sale2 = new Sale(NVDAShare, 2);
+
+ transactions = List.of(purchase1, purchase2, sale1, sale2);
+
+ transactionArchive = new TransactionArchive();
+ transactions.forEach(transaction -> transactionArchive.add(transaction));
+
+ }
+
+ @Test
+ void PTaddTransactions() {
+ TransactionArchive archive = new TransactionArchive();
+
+ assertTrue(archive.add(transactions.get(0)));
+ assertEquals(1, archive.getTransactions(1).size());
+ assertTrue(archive.add(transactions.get(2))); // Add one more
+ assertEquals(2, archive.getTransactions(1).size());
+
+ }
+
+ @Test
+ void PTisEmpty() {
+
+ TransactionArchive archive = new TransactionArchive();
+
+ assertTrue(archive.isEmpty());
+ archive.add(transactions.get(0));
+ assertFalse(archive.isEmpty());
+
+ }
+
+ /**
+ *
+ *
+ * Since we know that the basics of the TransactionArchive works with the
+ * tests over, we will now move to using the TransactionArchive field made
+ * from @BeforeEach.
+ *
+ *
+ */
+
+ @Test
+ void PTgetTransactions() {
+
+ assertEquals(2, transactionArchive.getTransactions(1).size()); // First week all transactions
+ assertEquals(2, transactionArchive.getTransactions(2).size());
+ assertEquals(1, transactionArchive.getPurchases(1).size());
+ assertEquals(1, transactionArchive.getSales(1).size());
+ assertEquals(1, transactionArchive.getPurchases(2).size());
+ assertEquals(1, transactionArchive.getSales(2).size());
+
+ }
+
}
From 778cb4dd04a92676a1b8e2d58a24fa518024a1b9 Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Mon, 16 Feb 2026 00:14:12 +0100
Subject: [PATCH 16/21] feat(Player): Add initial tests.
---
.../java/edu/ntnu/idi/idatt/PlayerTest.java | 40 +++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/src/test/java/edu/ntnu/idi/idatt/PlayerTest.java b/src/test/java/edu/ntnu/idi/idatt/PlayerTest.java
index d6bab4b..cd6df5d 100644
--- a/src/test/java/edu/ntnu/idi/idatt/PlayerTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/PlayerTest.java
@@ -1,4 +1,44 @@
package edu.ntnu.idi.idatt;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import java.math.BigDecimal;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
class PlayerTest {
+
+ private Player player;
+
+ @BeforeEach
+ public void PT_setup() {
+
+ player = new Player("TestPlayer", new BigDecimal("500"));
+
+ }
+
+ @Test
+ void PTConstructor() {
+ assertEquals("TestPlayer", player.getName());
+ assertEquals(new BigDecimal("500"), player.getMoney());
+ assertNotNull(player.getPortfolio());
+ assertNotNull(player.getTransactionArchive());
+ }
+
+ @Test
+ void PTaddMoney() {
+
+ player.addMoney(new BigDecimal("200"));
+ assertEquals(new BigDecimal("700"), player.getMoney());
+
+ }
+
+ @Test
+ void PTwithdrawMoney() {
+ player.withdrawMoney(new BigDecimal("200"));
+ assertEquals(new BigDecimal("300"), player.getMoney());
+ }
+
}
From 1cef43723f3854d8bd2ce3c2c5f3ffad47b84ee6 Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Mon, 16 Feb 2026 01:03:52 +0100
Subject: [PATCH 17/21] feat(Exchange): Add initial tests and fix corresponding
class.
---
.../java/edu/ntnu/idi/idatt/Exchange.java | 2 +-
.../java/edu/ntnu/idi/idatt/ExchangeTest.java | 136 ++++++++++++++++++
2 files changed, 137 insertions(+), 1 deletion(-)
diff --git a/src/main/java/edu/ntnu/idi/idatt/Exchange.java b/src/main/java/edu/ntnu/idi/idatt/Exchange.java
index 318b69f..2153bd9 100644
--- a/src/main/java/edu/ntnu/idi/idatt/Exchange.java
+++ b/src/main/java/edu/ntnu/idi/idatt/Exchange.java
@@ -76,7 +76,7 @@ public boolean hasStock(String symbol) {
*/
public Stock getStock(String symbol) {
if (this.hasStock(symbol)) {
- stockMap.get(symbol);
+ return stockMap.get(symbol);
}
throw new IllegalArgumentException("This stock doesn't exist in [" + name + "] exchange.");
}
diff --git a/src/test/java/edu/ntnu/idi/idatt/ExchangeTest.java b/src/test/java/edu/ntnu/idi/idatt/ExchangeTest.java
index 153f079..ce14565 100644
--- a/src/test/java/edu/ntnu/idi/idatt/ExchangeTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/ExchangeTest.java
@@ -1,4 +1,140 @@
package edu.ntnu.idi.idatt;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import edu.ntnu.idi.idatt.marked.Stock;
+import edu.ntnu.idi.idatt.transaction.Transaction;
+
class ExchangeTest {
+
+ private Exchange exchange;
+ private List stocks;
+ private Player player;
+
+ @BeforeEach
+ public void PT_setup() {
+
+ // Initialize exchange with proper objects
+ Stock AAPL = new Stock("AAPL", "Apple Inc.", List.of(BigDecimal.valueOf(32)));
+ Stock NVDA = new Stock("NVDA", "NVIDIA", List.of(BigDecimal.valueOf(182.81)));
+ Stock TSLA = new Stock("TSLA", "Tesla", List.of(BigDecimal.valueOf(417.44)));
+ Stock AMD = new Stock("AMD", "Advanced Micro Devices", List.of(BigDecimal.valueOf(207.32)));
+
+ stocks = List.of(AAPL, NVDA, TSLA, AMD);
+
+ exchange = new Exchange("TestExchange", stocks);
+ player = new Player("TestPlayer", new BigDecimal("500"));
+ }
+
+ @Test
+ void PTConstructor() {
+ assertEquals("TestExchange", exchange.getName());
+ assertEquals(1, exchange.getWeek());
+ }
+
+ /**
+ * Positive tests for stock-related methods.
+ *
+ *
+ * Includes hasStock, getStock and findStocks.
+ *
+ *
+ */
+
+ @Test
+ void PTFindStock() {
+
+ assertTrue(exchange.hasStock("AAPL"));
+ assertEquals(stocks.get(0) /* AAPL Stock */, exchange.getStock("AAPL"));
+
+ // FindStocks for letter "n" should be - AAPL, AMD (both symbols and names!)
+ List expected = List.of(stocks.get(0), stocks.get(3));
+ //
+ assertEquals(expected, exchange.findStocks("n"));
+
+ }
+
+ /**
+ *
+ *
+ * Since this method includes basically everything this project
+ * contains we will just check essential things that everything
+ * worked as it was supposted.
+ *
+ */
+ @Test
+ void PTBuy() {
+
+ Transaction transaction = exchange.buy("AAPL", new BigDecimal("1"), player);
+ assertEquals(transaction, player.getTransactionArchive().getTransactions(1).getLast());
+ assertEquals(-1, player.getMoney().compareTo(new BigDecimal("500"))); // Less than 500
+ assertEquals(1, player.getPortfolio().getShares().size());
+ assertEquals("AAPL", player.getPortfolio().getShares().get(0).getStock().getSymbol());
+
+ }
+
+ /**
+ *
+ *
+ * Since this method includes basically everything this project
+ * contains we will just check essential things that everything
+ * worked as it was supposted.
+ *
+ */
+ @Test
+ void PTSell() {
+ // Player hasa to have a share to sell it.
+ exchange.buy("AAPL", new BigDecimal("1"), player);
+ stocks.get(0).addNewSalesPrice(new BigDecimal("40")); // Simulate increase of AAPL stock price
+
+ Transaction transaction = exchange.sell(player.getPortfolio().getShares().getLast(), player);
+ assertEquals(transaction, player.getTransactionArchive().getTransactions(1).getLast());
+ assertEquals(1, player.getMoney().compareTo(new BigDecimal("500"))); // Less than 500
+ assertEquals(0, player.getPortfolio().getShares().size());
+
+ }
+
+ @Test
+ void PTAdvance() {
+ List stockPricesBefore = new ArrayList<>();
+ for (Stock stock : stocks) {
+ stockPricesBefore.add(stocks.indexOf(stock), stock.getSalesPrice());
+ }
+
+ exchange.advance();
+
+ for (Stock stock : stocks) {
+ assertTrue(stockPricesBefore.get(stocks.indexOf(stock)).compareTo(stock.getSalesPrice()) != 0);
+ // If compareTo returns 0 then its equal.
+ }
+
+ }
+
+ /**
+ * Negative tests for stock-related methods.
+ *
+ *
+ * Includes hasStock, getStock and findStocks.
+ *
+ *
+ */
+ @Test
+ void NTFindStock() {
+
+ assertFalse(exchange.hasStock("Test"));
+ assertThrows(IllegalArgumentException.class, () -> exchange.getStock("thiswillnotwork"));
+ assertEquals(List.of() /* Empty list */, exchange.findStocks("X"));
+
+ }
+
}
From 3a6400d945f0f3dc1d11f414a5f46de1b8c85e16 Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Mon, 16 Feb 2026 01:27:21 +0100
Subject: [PATCH 18/21] chore(Test classes): cleanup code and some JavaDocs.
---
.../java/edu/ntnu/idi/idatt/ExchangeTest.java | 10 +++++-----
.../calculator/PurchaseCalculatorTest.java | 12 ++++++------
.../idatt/calculator/SaleCalculatorTest.java | 14 ++++++--------
.../ntnu/idi/idatt/marked/PortfolioTest.java | 6 +++---
.../edu/ntnu/idi/idatt/marked/ShareTest.java | 8 ++++----
.../edu/ntnu/idi/idatt/marked/StockTest.java | 13 ++++++-------
.../idi/idatt/transaction/PurchaseTest.java | 13 ++++++++-----
.../ntnu/idi/idatt/transaction/SaleTest.java | 15 ++++++++++-----
.../transaction/TransactionArchiveTest.java | 18 +++++++++---------
9 files changed, 57 insertions(+), 52 deletions(-)
diff --git a/src/test/java/edu/ntnu/idi/idatt/ExchangeTest.java b/src/test/java/edu/ntnu/idi/idatt/ExchangeTest.java
index ce14565..743f3be 100644
--- a/src/test/java/edu/ntnu/idi/idatt/ExchangeTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/ExchangeTest.java
@@ -25,10 +25,10 @@ class ExchangeTest {
public void PT_setup() {
// Initialize exchange with proper objects
- Stock AAPL = new Stock("AAPL", "Apple Inc.", List.of(BigDecimal.valueOf(32)));
- Stock NVDA = new Stock("NVDA", "NVIDIA", List.of(BigDecimal.valueOf(182.81)));
- Stock TSLA = new Stock("TSLA", "Tesla", List.of(BigDecimal.valueOf(417.44)));
- Stock AMD = new Stock("AMD", "Advanced Micro Devices", List.of(BigDecimal.valueOf(207.32)));
+ Stock AAPL = new Stock("AAPL", "Apple Inc.", List.of(new BigDecimal("32")));
+ Stock NVDA = new Stock("NVDA", "NVIDIA", List.of(new BigDecimal("182.81")));
+ Stock TSLA = new Stock("TSLA", "Tesla", List.of(new BigDecimal("417.44")));
+ Stock AMD = new Stock("AMD", "Advanced Micro Devices", List.of(new BigDecimal("207.32")));
stocks = List.of(AAPL, NVDA, TSLA, AMD);
@@ -93,7 +93,7 @@ void PTBuy() {
*/
@Test
void PTSell() {
- // Player hasa to have a share to sell it.
+ // Player has to have a share to sell it.
exchange.buy("AAPL", new BigDecimal("1"), player);
stocks.get(0).addNewSalesPrice(new BigDecimal("40")); // Simulate increase of AAPL stock price
diff --git a/src/test/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculatorTest.java b/src/test/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculatorTest.java
index 94f1fc6..5d306c0 100644
--- a/src/test/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculatorTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculatorTest.java
@@ -20,12 +20,12 @@ class PurchaseCalculatorTest {
@BeforeEach
public void PT_setup() {
// stock instance and parameters
- List prices = List.of(BigDecimal.valueOf(46.2),
- BigDecimal.valueOf(40.0));
+ List prices = List.of(new BigDecimal("46.2"),
+ new BigDecimal("40.0"));
stock = new Stock("AAPL", "Apple Inc.", prices);
// Share instance parameters
- BigDecimal quantity = BigDecimal.valueOf(3.3);
+ BigDecimal quantity = new BigDecimal("3.3");
share = new Share(stock, quantity, stock.getSalesPrice());
// PurchaseCalculator instance
@@ -41,9 +41,9 @@ public void PT_setup() {
@Test
void PT_calculationTotal() {
- BigDecimal expected = BigDecimal.valueOf(40.0)
- .multiply(BigDecimal.valueOf(3.3))
- .multiply(BigDecimal.valueOf(1.005));
+ BigDecimal expected = new BigDecimal("40.0")
+ .multiply(new BigDecimal("3.3"))
+ .multiply(new BigDecimal("1.005"));
assertEquals(expected, purchaseCalculator.calculateTotal());
}
diff --git a/src/test/java/edu/ntnu/idi/idatt/calculator/SaleCalculatorTest.java b/src/test/java/edu/ntnu/idi/idatt/calculator/SaleCalculatorTest.java
index 83b46d1..3672172 100644
--- a/src/test/java/edu/ntnu/idi/idatt/calculator/SaleCalculatorTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/calculator/SaleCalculatorTest.java
@@ -20,12 +20,12 @@ class SaleCalculatorTest {
@BeforeEach
public void PT_setup() {
// stock instance and parameters
- List prices = List.of(BigDecimal.valueOf(46.2),
- BigDecimal.valueOf(40.0));
+ List prices = List.of(new BigDecimal("46.2"),
+ new BigDecimal("40.0"));
stock = new Stock("AAPL", "Apple Inc.", prices);
// Share instance parameters
- BigDecimal quantity = BigDecimal.valueOf(3.3);
+ BigDecimal quantity = new BigDecimal("3.3");
share = new Share(stock, quantity, stock.getSalesPrice());
// PurchaseCalculator instance
@@ -44,7 +44,7 @@ public void PT_setup() {
void PT_calculationTotal() {
// For imitation, let's add a new weeks stock price.
- stock.addNewSalesPrice(BigDecimal.valueOf(47.8));
+ stock.addNewSalesPrice(new BigDecimal("47.8"));
saleCalculator = new SaleCalculator(share);
/**
* Update the SaleCalculator sale price variable. Due to the formulation of the
@@ -63,13 +63,11 @@ void PT_calculationTotal() {
*/
BigDecimal gross = share.getStock().getSalesPrice().multiply(share.getQuantity());
- BigDecimal commision = gross.multiply(BigDecimal.valueOf(0.01));
- System.out.println(gross);
- System.out.println(saleCalculator.calculateGross());
+ BigDecimal commision = gross.multiply(new BigDecimal("0.01"));
BigDecimal tax = gross.subtract(commision).subtract(
share.getPurchasePrice()
.multiply(share.getQuantity()))
- .multiply(BigDecimal.valueOf(0.3));
+ .multiply(new BigDecimal("0.3"));
BigDecimal expected = gross.subtract(commision).subtract(tax);
assertEquals(expected, saleCalculator.calculateTotal());
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 24c22d9..4c26229 100644
--- a/src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java
@@ -28,12 +28,12 @@ public class PortfolioTest {
@BeforeEach
public void PT_setup() {
// stock instance and parameters
- List prices = List.of(BigDecimal.valueOf(46.2),
- BigDecimal.valueOf(40.0));
+ List prices = List.of(new BigDecimal("46.2"),
+ new BigDecimal("40.0"));
stock = new Stock("AAPL", "Apple Inc.", prices);
// Share instance parameters
- BigDecimal quantity = BigDecimal.valueOf(3.3);
+ BigDecimal quantity = new BigDecimal("3.3");
share = new Share(stock, quantity, stock.getSalesPrice());
// Portfolio instance
diff --git a/src/test/java/edu/ntnu/idi/idatt/marked/ShareTest.java b/src/test/java/edu/ntnu/idi/idatt/marked/ShareTest.java
index 3af2df2..ac69822 100644
--- a/src/test/java/edu/ntnu/idi/idatt/marked/ShareTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/marked/ShareTest.java
@@ -15,12 +15,12 @@ public class ShareTest {
@BeforeEach
public void PT_setup() {
- List prices = List.of(BigDecimal.valueOf(46.2),
- BigDecimal.valueOf(40.0));
+ List prices = List.of(new BigDecimal("46.2"),
+ new BigDecimal("40.0"));
stock = new Stock("AAPL", "Apple Inc.", prices);
// Share parameters
- BigDecimal quantity = BigDecimal.valueOf(3.3);
+ BigDecimal quantity = new BigDecimal("3.3");
share = new Share(stock, quantity, stock.getSalesPrice());
}
@@ -29,7 +29,7 @@ public void PT_setup() {
void constructorTest() {
assertEquals(stock, share.getStock());
- assertEquals(BigDecimal.valueOf(3.3), share.getQuantity());
+ assertEquals(new BigDecimal("3.3"), share.getQuantity());
assertEquals(stock.getSalesPrice(), share.getPurchasePrice());
}
diff --git a/src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java b/src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java
index ec226c4..330e342 100644
--- a/src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java
@@ -5,7 +5,6 @@
import java.math.BigDecimal;
import java.util.List;
-import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -21,8 +20,8 @@ public class StockTest {
@BeforeEach
public void PT_setup() {
- List prices = List.of(BigDecimal.valueOf(46.2),
- BigDecimal.valueOf(40.0));
+ List prices = List.of(new BigDecimal("46.2"),
+ new BigDecimal("40.0"));
stock = new Stock("AAPL", "Apple Inc.", prices);
}
@@ -32,15 +31,15 @@ void constructorTest() {
assertEquals("AAPL", stock.getSymbol());
assertEquals("Apple Inc.", stock.getCompany());
- assertEquals(List.of(BigDecimal.valueOf(46.2),
- BigDecimal.valueOf(40.0)), stock.getPrices());
+ assertEquals(List.of(new BigDecimal("46.2"),
+ new BigDecimal("40.0")), stock.getPrices());
- assertEquals(BigDecimal.valueOf(40.0), stock.getSalesPrice());
+ assertEquals(new BigDecimal("40.0"), stock.getSalesPrice());
}
@Test
void addNewSalesPriceTest() {
- BigDecimal value = BigDecimal.valueOf(15.6);
+ BigDecimal value = new BigDecimal("15.6");
stock.addNewSalesPrice(value);
assertEquals(value, stock.getSalesPrice());
diff --git a/src/test/java/edu/ntnu/idi/idatt/transaction/PurchaseTest.java b/src/test/java/edu/ntnu/idi/idatt/transaction/PurchaseTest.java
index 1d0bb58..25f9c9e 100644
--- a/src/test/java/edu/ntnu/idi/idatt/transaction/PurchaseTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/transaction/PurchaseTest.java
@@ -25,7 +25,10 @@
* commit() contains only method calls upon player, except changing the commited
* boolean field.
* We will only be vaguely testing it for this field.
- *
+ *
+ * @see Exchange
+ * @see Purchase
+ *
*/
class PurchaseTest {
@@ -36,12 +39,12 @@ class PurchaseTest {
@BeforeEach
public void PT_setup() {
// stock instance and parameters
- List prices = List.of(BigDecimal.valueOf(46.2),
- BigDecimal.valueOf(40.0));
+ List prices = List.of(new BigDecimal("46.2"),
+ new BigDecimal("40.0"));
stock = new Stock("AAPL", "Apple Inc.", prices);
// Share instance and parameters
- BigDecimal quantity = BigDecimal.valueOf(3.3);
+ BigDecimal quantity = new BigDecimal("3.3");
share = new Share(stock, quantity, stock.getSalesPrice());
// Transaction instance
@@ -62,7 +65,7 @@ void PTconstructorTest() {
assertEquals(new BigDecimal("132.00"), purchase.getCalculator().calculateGross()); // Because of none stored
// *Calculator, we test with a existing method we can measure the values of.
assertFalse(purchase.isCommited());
- purchase.commit(new Player("ExamplePlayer", BigDecimal.valueOf(2500)));
+ purchase.commit(new Player("ExamplePlayer", new BigDecimal("2500")));
assertTrue(purchase.isCommited());
}
diff --git a/src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java b/src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java
index d026a1b..4a0482a 100644
--- a/src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java
@@ -10,6 +10,7 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import edu.ntnu.idi.idatt.Exchange;
import edu.ntnu.idi.idatt.Player;
import edu.ntnu.idi.idatt.marked.Share;
import edu.ntnu.idi.idatt.marked.Stock;
@@ -25,7 +26,11 @@
* commit() contains only method calls upon player, except changing the commited
* boolean field.
* We will only be vaguely testing it for this field.
- *
+ *
+ * @see Exchange
+ * @see Sale
+ *
+ *
*/
class SaleTest {
@@ -36,12 +41,12 @@ class SaleTest {
@BeforeEach
public void PT_setup() {
// stock instance and parameters
- List prices = List.of(BigDecimal.valueOf(46.2),
- BigDecimal.valueOf(40.0));
+ List prices = List.of(new BigDecimal("46.2"),
+ new BigDecimal("40.0"));
stock = new Stock("AAPL", "Apple Inc.", prices);
// Share instance and parameters
- BigDecimal quantity = BigDecimal.valueOf(3.3);
+ BigDecimal quantity = new BigDecimal("3.3");
share = new Share(stock, quantity, stock.getSalesPrice());
// Transaction instance
@@ -62,7 +67,7 @@ void PTconstructorTest() {
assertEquals(new BigDecimal("132.00"), sale.getCalculator().calculateGross()); // Because of none stored
// *Calculator, we test with a existing method we can measure the values of.
assertFalse(sale.isCommited());
- sale.commit(new Player("ExamplePlayer", BigDecimal.valueOf(2500)));
+ sale.commit(new Player("ExamplePlayer", new BigDecimal("2500")));
assertTrue(sale.isCommited());
}
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 a7a388f..482a45c 100644
--- a/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionArchiveTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/transaction/TransactionArchiveTest.java
@@ -21,15 +21,15 @@ class TransactionArchiveTest {
@BeforeEach
public void getDefaultValues() {
- Stock AAPL = new Stock("AAPL", "Apple Inc.", List.of(BigDecimal.valueOf(32)));
- Stock NVDA = new Stock("NVDA", "NVIDIA", List.of(BigDecimal.valueOf(182.81)));
- Stock TSLA = new Stock("TSLA", "Tesla", List.of(BigDecimal.valueOf(417.44)));
- Stock AMD = new Stock("AMD", "Advanced Micro Devices", List.of(BigDecimal.valueOf(207.32)));
-
- Share AAPLShare = new Share(AAPL, BigDecimal.valueOf(1.0), AAPL.getSalesPrice());
- Share NVDAShare = new Share(NVDA, BigDecimal.valueOf(1.0), NVDA.getSalesPrice());
- Share TSLAShare = new Share(TSLA, BigDecimal.valueOf(1.0), TSLA.getSalesPrice());
- Share AMDShare = new Share(AMD, BigDecimal.valueOf(1.0), AMD.getSalesPrice());
+ Stock AAPL = new Stock("AAPL", "Apple Inc.", List.of(new BigDecimal("32")));
+ Stock NVDA = new Stock("NVDA", "NVIDIA", List.of(new BigDecimal("182.81")));
+ Stock TSLA = new Stock("TSLA", "Tesla", List.of(new BigDecimal("417.44")));
+ Stock AMD = new Stock("AMD", "Advanced Micro Devices", List.of(new BigDecimal("207.32")));
+
+ Share AAPLShare = new Share(AAPL, new BigDecimal("1.0"), AAPL.getSalesPrice());
+ Share NVDAShare = new Share(NVDA, new BigDecimal("1.0"), NVDA.getSalesPrice());
+ Share TSLAShare = new Share(TSLA, new BigDecimal("1.0"), TSLA.getSalesPrice());
+ Share AMDShare = new Share(AMD, new BigDecimal("1.0"), AMD.getSalesPrice());
Purchase purchase1 = new Purchase(AAPLShare, 1);
Purchase purchase2 = new Purchase(AMDShare, 2);
From 1ed22c0f738585aacff9fa5a53ba0420258b63ab Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Mon, 16 Feb 2026 01:51:27 +0100
Subject: [PATCH 19/21] feat(Portfolio): Add exception.
---
src/main/java/edu/ntnu/idi/idatt/marked/Portfolio.java | 3 +++
.../java/edu/ntnu/idi/idatt/marked/PortfolioTest.java | 7 +++++++
.../java/edu/ntnu/idi/idatt/transaction/SaleTest.java | 8 +++++++-
3 files changed, 17 insertions(+), 1 deletion(-)
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 e1385e2..5b4a147 100644
--- a/src/main/java/edu/ntnu/idi/idatt/marked/Portfolio.java
+++ b/src/main/java/edu/ntnu/idi/idatt/marked/Portfolio.java
@@ -33,6 +33,9 @@ public boolean addShare(Share share) {
* @return - was the list modified?
*/
public boolean removeShare(Share share) {
+ if (!contains(share)) {
+ throw new IllegalArgumentException("Portfolio doesn't contain this share.");
+ }
return shares.remove(share);
}
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 4c26229..42fd1fd 100644
--- a/src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java
@@ -2,6 +2,7 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.math.BigDecimal;
@@ -80,4 +81,10 @@ void PTContains() {
assertTrue(portfolio.contains(share));
}
+ @Test
+ void NTremoveShare() {
+ Share exception = new Share(stock, new BigDecimal("2.3"), stock.getSalesPrice());
+ assertThrows(IllegalArgumentException.class, () -> portfolio.removeShare(exception));
+ }
+
}
diff --git a/src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java b/src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java
index 4a0482a..2f5523b 100644
--- a/src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/transaction/SaleTest.java
@@ -36,6 +36,7 @@ class SaleTest {
private Stock stock;
private Share share;
+ private Player player;
private Sale sale;
@BeforeEach
@@ -49,6 +50,11 @@ public void PT_setup() {
BigDecimal quantity = new BigDecimal("3.3");
share = new Share(stock, quantity, stock.getSalesPrice());
+ // Player instance and parameters.
+ // We need a portfolio that has the share already to not throw an exception.
+ player = new Player("ExamplePlayer", new BigDecimal("500"));
+ player.getPortfolio().addShare(share);
+
// Transaction instance
sale = new Sale(share, 1);
}
@@ -67,7 +73,7 @@ void PTconstructorTest() {
assertEquals(new BigDecimal("132.00"), sale.getCalculator().calculateGross()); // Because of none stored
// *Calculator, we test with a existing method we can measure the values of.
assertFalse(sale.isCommited());
- sale.commit(new Player("ExamplePlayer", new BigDecimal("2500")));
+ sale.commit(player);
assertTrue(sale.isCommited());
}
From b2fb41ece8b3f15c0c96d165152d41071c074e73 Mon Sep 17 00:00:00 2001
From: pawelsa
Date: Mon, 16 Feb 2026 01:58:19 +0100
Subject: [PATCH 20/21] refactor: README.md about tests.
---
README.md | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/README.md b/README.md
index fc165a2..b16466c 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,12 @@
# Mappevurdering-IDATT2003
+
The exam of IDATT2003, "Programming 2" subject.
+
+# Guide to tests
+
+- The test generally start with a @BeforeEach method that sets up everything necessary for positive testing.
+- Then there comes a positive test section and at last the negative tests.
+- Complicated test methods have necessary JavaDocs and often have references pointing to other classes that share content or hold relevant information.
+- Dictionary
+ - **PT** - Positive tests
+ - **NT** - Negative tests
From 27f5b4a02bd0114ee637537ff273407bae70236e Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Wed, 18 Feb 2026 13:00:32 +0100
Subject: [PATCH 21/21] chore: Cleanup.i
---
.../ntnu/idi/idatt/calculator/PurchaseCalculator.java | 2 +-
.../edu/ntnu/idi/idatt/calculator/SaleCalculator.java | 4 ++--
.../java/edu/ntnu/idi/idatt/marked/PortfolioTest.java | 9 ---------
src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java | 6 ------
4 files changed, 3 insertions(+), 18 deletions(-)
diff --git a/src/main/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculator.java b/src/main/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculator.java
index 33ea3c9..fd7847f 100644
--- a/src/main/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculator.java
+++ b/src/main/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculator.java
@@ -45,7 +45,7 @@ public BigDecimal calculateGross() {
*/
@Override
public BigDecimal calculateCommision() {
- BigDecimal fee = BigDecimal.valueOf(0.005); // Corresponding to 0.5%
+ BigDecimal fee = new BigDecimal("0.005"); // Corresponding to 0.5%
return calculateGross().multiply(fee);
}
diff --git a/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java b/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java
index d9dc8f0..6c65302 100644
--- a/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java
+++ b/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java
@@ -47,7 +47,7 @@ public BigDecimal calculateGross() {
*/
@Override
public BigDecimal calculateCommision() {
- BigDecimal fee = BigDecimal.valueOf(0.01); // Corresponding to 1%
+ BigDecimal fee = new BigDecimal("0.01"); // Corresponding to 1%
return calculateGross().multiply(fee);
}
@@ -58,7 +58,7 @@ public BigDecimal calculateCommision() {
*/
@Override
public BigDecimal calculateTax() {
- BigDecimal taxPercentage = BigDecimal.valueOf(0.3); // Corresponding to 30%
+ BigDecimal taxPercentage = new BigDecimal("0.3"); // Corresponding to 30%
BigDecimal profit = calculateGross().subtract(purchasePrice.multiply(quantity))
.subtract(calculateCommision()); // (gross - tax - buy costs)
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 42fd1fd..f0d0913 100644
--- a/src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/marked/PortfolioTest.java
@@ -11,15 +11,6 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-/**
- * Test for Portfolio class
- *
- *
- * Tests done linearly with @BeforeAll, checking
- * if functionality works as a whole,
- *
- */
-
public class PortfolioTest {
private Stock stock;
diff --git a/src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java b/src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java
index 330e342..7d81482 100644
--- a/src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java
+++ b/src/test/java/edu/ntnu/idi/idatt/marked/StockTest.java
@@ -8,12 +8,6 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-/**
- * Alias definitions
- * PT - Positive test/s
- *
- */
-
public class StockTest {
private Stock stock;