diff --git a/src/main/java/no/ntnu/idatt1002/demo/data/Budget/FileHandlingSelectedBudget.java b/src/main/java/no/ntnu/idatt1002/demo/data/Budget/FileHandlingSelectedBudget.java
index d3d8ff7dbb5678e6458288c0069d26c168b6365b..7f412a522a4dc1e25910894c3b07fae7307f0356 100644
--- a/src/main/java/no/ntnu/idatt1002/demo/data/Budget/FileHandlingSelectedBudget.java
+++ b/src/main/java/no/ntnu/idatt1002/demo/data/Budget/FileHandlingSelectedBudget.java
@@ -101,6 +101,7 @@ public class FileHandlingSelectedBudget {
    * @return True, if a directory is successfully created. Else, returns false.
    */
   public static boolean createBudgetDirectory(String budgetId) {
+    System.out.println("Creating directory: " + filePath + budgetId);
     File f = new File(filePath + budgetId);
     return f.mkdir();
   }
@@ -138,6 +139,7 @@ public class FileHandlingSelectedBudget {
    * @throws IOException if an input or output exception occurred.
    */
   public static boolean createNewIncomeFile(String budgetId, String incomeFileTitle) throws IOException {
+    System.out.println("Income filePath: " + filePath + budgetId + "/" + incomeFileTitle + registerFileType);
     File incomeFile = new File(filePath +  budgetId + "/" + incomeFileTitle + registerFileType);
     return incomeFile.createNewFile();
   }
diff --git a/src/main/resources/testFiles/budget/fileForClearing.current b/src/main/resources/testFiles/budget/fileForClearing.current
index 5c303c26ddf8ddf5a4598bcb3e3f0331f935b505..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/src/main/resources/testFiles/budget/fileForClearing.current
+++ b/src/main/resources/testFiles/budget/fileForClearing.current
@@ -1 +0,0 @@
-APPPAPAP
\ No newline at end of file
diff --git a/src/test/java/no/ntnu/idatt1002/demo/data/Budget/FileHandlingBudgetArchiveTest.java b/src/test/java/no/ntnu/idatt1002/demo/data/Budget/FileHandlingBudgetArchiveTest.java
index b0a828f81529c8ca799200901199e88bd7e5b4b0..227e807f5028c7e434a767cf3f91a9c781efbc66 100644
--- a/src/test/java/no/ntnu/idatt1002/demo/data/Budget/FileHandlingBudgetArchiveTest.java
+++ b/src/test/java/no/ntnu/idatt1002/demo/data/Budget/FileHandlingBudgetArchiveTest.java
@@ -1,26 +1,100 @@
 package no.ntnu.idatt1002.demo.data.Budget;
 
+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.io.IOException;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.*;
-
 public class FileHandlingBudgetArchiveTest {
 
   BudgetRegister budgetRegister;
 
+  @Nested
+  @DisplayName("Test read/writeBudgetRegisterToArchive")
+  class ReadAndWriteToFile {
+    BudgetRegister newBudgetRegister;
+
+    String name1, name2, name3, name4;
+    String filePath;
+
+    String toString;
+    @BeforeEach
+    void setUp() {
+      budgetRegister = new BudgetRegister();
+      filePath = "testFiles/budget/Archive";
+
+      name1 = "APRIL1";
+      name2 = "APRIL2";
+      name3 = "APRIL3";
+      name4 = "APRIL5";
+
+      newBudgetRegister = new BudgetRegister();
+      newBudgetRegister.addBudgetName(name1);
+      newBudgetRegister.addBudgetName(name2);
+      newBudgetRegister.addBudgetName(name3);
+      newBudgetRegister.addBudgetName(name4);
+
+      toString = "APRIL1\nAPRIL2\nAPRIL3\nAPRIL5\n";
+    }
+
+    @Test
+    @DisplayName("Test read and write to file")
+    void testReadAndWrite() throws IOException {
+      budgetRegister = FileHandlingBudgetArchive.readBudgetArchive(filePath);
+
+      assertEquals(toString, budgetRegister.toString());
+
+      FileHandlingBudgetArchive.writeBudgetRegisterToArchive(newBudgetRegister, filePath);
+      newBudgetRegister = FileHandlingBudgetArchive.readBudgetArchive(filePath);
+
+      assertEquals(budgetRegister.toString(), newBudgetRegister.toString());
+    }
+
+    @Test
+    @DisplayName("Test read throws IOException for non-existent file")
+    void testReadWithNonExistentFile() {
+      assertThrows(IOException.class,
+          () -> FileHandlingBudgetArchive.readBudgetArchive("sheesh"));
+    }
+  }
+
   @Nested
   @DisplayName("Test isBudgetRegisterEmpty")
   class IsBudgetRegisterEmpty {
 
-    String filePath;
+    String filePath, filePath1;
 
     @BeforeEach
     void setUp() {
       budgetRegister = new BudgetRegister();
-      filePath = null;
+      filePath = "testFiles/budget/emptyFile";
+      filePath1 = "testFiles/budget/notEmptyFile";
     }
+
+    @Test
+    @DisplayName("Test IsBudgetRegisterEmpty with empty file")
+    void testEmptyFileWithEmptyFile() throws IOException {
+      assertTrue(FileHandlingBudgetArchive.isBudgetRegisterEmpty(filePath));
+    }
+
+    @Test
+    @DisplayName("Test IsBudgetRegisterEmpty with non-empty file")
+    void testEmptyFileWithNonEmptyFile() throws IOException {
+      assertFalse(FileHandlingBudgetArchive.isBudgetRegisterEmpty(filePath1));
+    }
+
+    @Test
+    @DisplayName("Test IsBudgetRegisterEmpty with non-existent file throws IOException")
+    void testEmptyFileWithNonExistentFile() {
+      assertThrows(IOException.class, () ->
+          FileHandlingBudgetArchive.isBudgetRegisterEmpty("sheesh"));
+    }
+
   }
 }
diff --git a/src/test/java/no/ntnu/idatt1002/demo/data/Budget/FileHandlingSelectedBudgetTest.java b/src/test/java/no/ntnu/idatt1002/demo/data/Budget/FileHandlingSelectedBudgetTest.java
index 8264f3421b44f7463196fe2558340e6b78fadbe9..cbdf289496e0f1f56396bd07916db0562389c3c1 100644
--- a/src/test/java/no/ntnu/idatt1002/demo/data/Budget/FileHandlingSelectedBudgetTest.java
+++ b/src/test/java/no/ntnu/idatt1002/demo/data/Budget/FileHandlingSelectedBudgetTest.java
@@ -1,5 +1,10 @@
 package no.ntnu.idatt1002.demo.data.Budget;
 
+import java.io.File;
+import java.io.IOException;
+import org.apache.commons.io.FileUtils;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
@@ -9,6 +14,168 @@ import static org.junit.jupiter.api.Assertions.*;
 
 public class FileHandlingSelectedBudgetTest {
 
+  @Nested
+  @DisplayName("Test read/writeSelectedBudget")
+  class ReadAndWriteSelectedBudget {
 
+    String filePath, emptyFilePath, toString, budgetName1, budgetName2;
 
+    @BeforeEach
+    void setUp() {
+      filePath = "testFiles/budget/SelectedBudget";
+      emptyFilePath = "testFiles/budget/emptyFile";
+      toString = "APRIL1";
+      budgetName1 = "";
+      budgetName2 = "APRIL1";
+    }
+    @Test
+    @DisplayName("Test read and write to file")
+    void testReadAndWriteToFile() throws IOException {
+      budgetName1 = FileHandlingSelectedBudget.readSelectedBudget(filePath);
+
+      assertEquals(toString, budgetName1);
+
+      FileHandlingSelectedBudget.updateSelectedBudget(budgetName2, filePath);
+      budgetName2 = FileHandlingSelectedBudget.readSelectedBudget(filePath);
+
+      assertEquals(budgetName1, budgetName2);
+    }
+
+    @Test
+    @DisplayName("Test readSelectedBudget returns null for empty file")
+    void testReadSelectedBudgetWithEmptyFile() throws IOException {
+      assertNull(null, FileHandlingSelectedBudget.readSelectedBudget(emptyFilePath));
+    }
+
+    @Test
+    @DisplayName("Test readSelectedBudget for non-existent file throws IOException")
+    void testReadSelectedBudgetForNonExistentFile() {
+      assertThrows(IOException.class,
+          () -> FileHandlingSelectedBudget.readSelectedBudget("sheesh"));
+    }
+  }
+
+  @Test
+  @DisplayName("Test clearSelectedBudget")
+  void testClearSelectedBudget() throws IOException {
+    String filePath = "testFiles/budget/fileForClearing";
+    FileHandlingSelectedBudget.clearSelectedBudget(filePath);
+
+    assertNull(FileHandlingSelectedBudget.readSelectedBudget(filePath));
+  }
+
+  @Nested
+  @DisplayName("Test isSelectedBudgetEmpty")
+  class testIsEmpty {
+
+    String filePath;
+
+    @BeforeEach
+    void setUp() {
+      filePath = "testFiles/budget/emptyFile";
+    }
+
+    @Test
+    @DisplayName("Test isSelectedBudget with non-empty file")
+    void testIsSelectedBudgetWithNonEmptyFile() throws IOException {
+      FileHandlingSelectedBudget.updateSelectedBudget("notempty", filePath);
+
+      assertFalse(FileHandlingSelectedBudget.isSelectedBudgetEmpty(filePath));
+
+      FileHandlingSelectedBudget.clearSelectedBudget(filePath);
+    }
+
+    @Test
+    @DisplayName("Test isSelectedBudget with empty file")
+    void testIsSelectedBudgetWithEmptyFile() throws IOException {
+      assertTrue(FileHandlingSelectedBudget.isSelectedBudgetEmpty(filePath));
+    }
+  }
+
+  @Nested
+  @DisplayName("Test create budget directory")
+  class CreateBudgetDirectory {
+
+    String filePath;
+
+    private static File directory;
+    @BeforeAll
+    public static void setup() {
+      directory = new File("src/main/resources/testFiles/budget/testDirectory");
+      if(!directory.exists()){
+        directory.mkdir();
+      }
+    }
+
+    @AfterAll
+    public static void teardown() throws IOException {
+      if(directory.exists()){
+        FileUtils.deleteDirectory(directory);
+      }
+    }
+
+    @BeforeEach
+    void setUp() {
+      filePath = "testFiles/budget/testDirectory";
+    }
+
+    @Test
+    @DisplayName("Test create existing then new budget directory")
+    void testCreateExistingAndNewBudgetDirectory() {
+      assertFalse(FileHandlingSelectedBudget.createBudgetDirectory(filePath));
+
+      FileHandlingSelectedBudget.deleteBudgetDirectory(filePath);
+
+      assertTrue(FileHandlingSelectedBudget.createBudgetDirectory(filePath));
+    }
+
+    @Test
+    @DisplayName("Test create new and existing files")
+    void testCreateNewAndExistingFiles() throws IOException {
+      assertTrue(FileHandlingSelectedBudget.createNewBudgetFile(filePath, "Budget"));
+      assertTrue(FileHandlingSelectedBudget.createNewIncomeFile(filePath, "Income"));
+      assertTrue(FileHandlingSelectedBudget.createNewExpenseFile(filePath, "Expense"));
+
+      assertFalse(FileHandlingSelectedBudget.createNewBudgetFile(filePath, "Budget"));
+      assertFalse(FileHandlingSelectedBudget.createNewIncomeFile(filePath, "Income"));
+      assertFalse(FileHandlingSelectedBudget.createNewExpenseFile(filePath, "Expense"));
+    }
+  }
+
+  @Nested
+  @DisplayName("Test delete budget directory")
+  class DeleteBudgetDirectory {
+
+    String filePath;
+
+    private static File directory;
+
+    @BeforeAll
+    public static void setup() {
+      directory = new File("src/main/resources/testFiles/budget/testDirectory");
+      if (!directory.exists()) {
+        directory.mkdir();
+      }
+    }
+
+    @AfterAll
+    public static void teardown() throws IOException {
+      if (directory.exists()) {
+        FileUtils.deleteDirectory(directory);
+      }
+    }
+
+    @BeforeEach
+    void setUp() {
+      filePath = "testFiles/budget/testDirectory";
+    }
+
+    @Test
+    @DisplayName("Test remove existing budget directory")
+    void testCreateExistingBudgetDirectory() {
+      assertTrue(FileHandlingSelectedBudget.deleteBudgetDirectory(filePath));
+
+      FileHandlingSelectedBudget.createBudgetDirectory(filePath);
+    }
+  }
 }