From 5a17d7d86803a45dab896ca31d92a4ba8e0d1fa5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adele=20Iren=20Westrum=20Kj=C3=B8lstad?=
 <aikjolst@stud.ntnu.no>
Date: Wed, 22 Mar 2023 11:04:14 +0100
Subject: [PATCH] Add tests and some exception handling for GeneralBudget

---
 .../demo/data/Budget/GeneralBudget.java       |  8 +-
 .../demo/data/Budget/FoodBudgetTest.java      | 85 ----------------
 .../demo/data/Budget/GeneralBudgetTest.java   | 99 +++++++++++++++++++
 3 files changed, 106 insertions(+), 86 deletions(-)
 delete mode 100644 src/test/java/no/ntnu/idatt1002/demo/data/Budget/FoodBudgetTest.java
 create mode 100644 src/test/java/no/ntnu/idatt1002/demo/data/Budget/GeneralBudgetTest.java

diff --git a/src/main/java/no/ntnu/idatt1002/demo/data/Budget/GeneralBudget.java b/src/main/java/no/ntnu/idatt1002/demo/data/Budget/GeneralBudget.java
index b1b86156..d5965fae 100644
--- a/src/main/java/no/ntnu/idatt1002/demo/data/Budget/GeneralBudget.java
+++ b/src/main/java/no/ntnu/idatt1002/demo/data/Budget/GeneralBudget.java
@@ -29,10 +29,16 @@ public class GeneralBudget {
      *
      */
     public GeneralBudget(int budgetPeriod, List<BudgetItem> listOfItems, double maxAmount){
+        if (budgetPeriod < 0) {
+            throw new IllegalArgumentException("The period cant be under zero days");
+        }
+
+        if (maxAmount < 0) {
+            throw new IllegalArgumentException("The maxamount of the budget cant be under zero");
+        }
         this.budgetPeriod = budgetPeriod;
         this.maxAmount = maxAmount;
         this.listOfItems = listOfItems;
-
     }
 
     /**
diff --git a/src/test/java/no/ntnu/idatt1002/demo/data/Budget/FoodBudgetTest.java b/src/test/java/no/ntnu/idatt1002/demo/data/Budget/FoodBudgetTest.java
deleted file mode 100644
index 22503bb9..00000000
--- a/src/test/java/no/ntnu/idatt1002/demo/data/Budget/FoodBudgetTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package no.ntnu.idatt1002.demo.data.Budget;
-
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-class FoodBudgetTest {
-
-    @Test
-    void set_amount_budget() {
-        FoodBudget foodBudget = new FoodBudget(30, 0);
-        int amount = 2000;
-        foodBudget.setAmountBudget(amount);
-
-        assertEquals(amount, foodBudget.getBudgetAmount());
-    }
-
-    @Test
-    void set_amount_budget_negativ_amount() {
-        FoodBudget foodBudget = new FoodBudget(30, 0);
-        int amount = -2000;
-
-        assertThrows(IllegalArgumentException.class, () -> foodBudget.setAmountBudget(amount));
-    }
-
-    @Test
-    void set_budget_period() {
-        FoodBudget foodBudget = new FoodBudget(0, 30);
-        int period = 30;
-        foodBudget.setBudgetPeriod(period);
-
-        assertEquals(period,foodBudget.getBudgetPeriod());
-    }
-
-    @Test
-    void set_budget_period_negative_period() {
-        FoodBudget foodBudget = new FoodBudget(0, 30);
-        int period = -5;
-
-        assertThrows(IllegalArgumentException.class, () ->  foodBudget.setBudgetPeriod(period));
-    }
-
-    @Test
-    void add_to_budget_positive_number() {
-        FoodBudget foodBudget = new FoodBudget(0, 30);
-        int beforeAdding = foodBudget.getBudgetAmount();
-        int amountToBeAdded = 50;
-        foodBudget.addToBudget(amountToBeAdded);
-
-        assertEquals(beforeAdding + amountToBeAdded, foodBudget.getBudgetAmount());
-
-    }
-
-    @Test
-    void add_to_budget_negative_number() {
-        FoodBudget foodBudget = new FoodBudget(0, 30);
-        int amountToBeAdded = -7;
-
-        assertThrows(IllegalArgumentException.class, () -> foodBudget.addToBudget(amountToBeAdded));
-    }
-
-    @Test
-    void subtract_from_budget_positive_number() {
-        FoodBudget foodBudget = new FoodBudget(0, 30);
-        int beforeSubtracting = foodBudget.getBudgetAmount();
-        int amountToBeSubtracted = 50;
-        foodBudget.subtractFromBudget(amountToBeSubtracted);
-
-        assertEquals(beforeSubtracting - amountToBeSubtracted, foodBudget.getBudgetAmount());
-    }
-
-    @Test
-    void subtract_from_budget_negative_number() {
-        FoodBudget foodBudget = new FoodBudget(0, 30);
-        int amountToBeSubtracted = -7;
-
-        assertThrows(IllegalArgumentException.class, () -> foodBudget.subtractFromBudget(amountToBeSubtracted));
-    }
-
-    @Test
-    void getDaysLeftOfBudgetPeriod(){
-
-    }
-
-}
\ No newline at end of file
diff --git a/src/test/java/no/ntnu/idatt1002/demo/data/Budget/GeneralBudgetTest.java b/src/test/java/no/ntnu/idatt1002/demo/data/Budget/GeneralBudgetTest.java
new file mode 100644
index 00000000..52b1a98e
--- /dev/null
+++ b/src/test/java/no/ntnu/idatt1002/demo/data/Budget/GeneralBudgetTest.java
@@ -0,0 +1,99 @@
+package no.ntnu.idatt1002.demo.data.Budget;
+
+import no.ntnu.idatt1002.demo.data.Economics.ExpenseCategory;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+import static org.junit.jupiter.api.Assertions.*;
+
+class GeneralBudgetTest {
+    @Test
+    @DisplayName("Constructor throws exception when the periodAmount is under zero")
+    void constructor_throws_exception_when_periodAmount_under_zero(){
+        List<BudgetItem> list = new ArrayList<>();
+
+        assertThrows(IllegalArgumentException.class, () -> new GeneralBudget(-1, list, 1200));
+    }
+
+    @Test
+    @DisplayName("Constructor throws exception when maxAmount is under zero")
+    void constructor_throws_exception_when_maxAmount_under_zero(){
+        List<BudgetItem> list = new ArrayList<>();
+
+        assertThrows(IllegalArgumentException.class, () -> new GeneralBudget(10, list, -12));
+    }
+
+    @Test
+    @DisplayName("AddToBudget throws when totalSum is higher than maxAmount ")
+    void add_to_budget_throws_when_totalSum_is_over_maxAmount(){
+        List<BudgetItem> list = new ArrayList<>();
+        GeneralBudget budget1 = new GeneralBudget(12, list, 1200);
+
+        assertThrows(IllegalArgumentException.class, () ->  budget1.addToBudget(1300, "Food", ExpenseCategory.FOOD));
+    }
+
+    @Test
+    @DisplayName("addToBudget throws when a budget with same category already exists")
+    void add_to_budget_throws_when_a_budget_with_same_category_already_exists(){
+        List<BudgetItem> list = new ArrayList<>();
+        GeneralBudget budget1 = new GeneralBudget(12, list, 1200);
+        budget1.addToBudget(500, "Food", ExpenseCategory.FOOD);
+
+        assertThrows(IllegalArgumentException.class, () ->  budget1.addToBudget(200, "Food", ExpenseCategory.FOOD));
+    }
+
+    @Test
+    @DisplayName("Adds a budget to generalBudget")
+    void add_budget_to_generalBudget(){
+        List<BudgetItem> list = new ArrayList<>();
+        GeneralBudget budget1 = new GeneralBudget(12, list, 1200);
+        BudgetItem item1 = new BudgetItem(500, "Food", ExpenseCategory.FOOD);
+        budget1.addToBudget(500, "Food", ExpenseCategory.FOOD);
+
+        assertEquals(1, list.size());
+    }
+
+    @Test
+    @DisplayName("Checks if the list contains a item with a given category")
+    void checks_if_the_list_contains_an_item_with_this_category_true(){
+        List<BudgetItem> list = new ArrayList<>();
+        GeneralBudget budget1 = new GeneralBudget(12, list, 1200);
+        budget1.addToBudget(500, "Food", ExpenseCategory.FOOD);
+
+        assertTrue(budget1.checksListOfItemsContainsBudgetItem(ExpenseCategory.FOOD));
+    }
+
+    @Test
+    @DisplayName("checks that the list does not contain an item with the given category")
+    void checks_if_the_list_contains_an_item_with_this_category_false(){
+        List<BudgetItem> list = new ArrayList<>();
+        GeneralBudget budget1 = new GeneralBudget(12, list, 1200);
+        budget1.addToBudget(500, "Books", ExpenseCategory.BOOKS);
+
+        assertFalse(budget1.checksListOfItemsContainsBudgetItem(ExpenseCategory.FOOD));
+    }
+
+    @Test
+    @DisplayName("Checks that the getTotalSum gives the correct number")
+    void get_total_sum_of_all_budgetItems_in_the_budget(){
+        List<BudgetItem> list = new ArrayList<>();
+        GeneralBudget budget1 = new GeneralBudget(12, list, 1200);
+        budget1.addToBudget(500, "Books", ExpenseCategory.BOOKS);
+        budget1.addToBudget(300, "Food", ExpenseCategory.FOOD);
+
+        assertEquals(800, budget1.totalSum());
+    }
+
+    @Test
+    @DisplayName("Checks that an item gets deleted from the budget")
+    void delete_from_budget(){
+        List<BudgetItem> list = new ArrayList<>();
+        GeneralBudget budget1 = new GeneralBudget(12, list, 1200);
+        budget1.addToBudget(500, "Books", ExpenseCategory.BOOKS);
+        budget1.deleteItemFromBudget(ExpenseCategory.BOOKS);
+
+        assertTrue(list.isEmpty());
+    }
+}
\ No newline at end of file
-- 
GitLab