diff --git a/src/test/java/edu/ntnu/idatt2001/group_30/paths/model/PlayhtroughTest.java b/src/test/java/edu/ntnu/idatt2001/group_30/paths/model/PlaythroughTest.java
similarity index 97%
rename from src/test/java/edu/ntnu/idatt2001/group_30/paths/model/PlayhtroughTest.java
rename to src/test/java/edu/ntnu/idatt2001/group_30/paths/model/PlaythroughTest.java
index 859a2db43357a58f713374025addd2ec1a4757fd..fd49df0b77d10fee055a9072165ac5806dd63a88 100644
--- a/src/test/java/edu/ntnu/idatt2001/group_30/paths/model/PlayhtroughTest.java
+++ b/src/test/java/edu/ntnu/idatt2001/group_30/paths/model/PlaythroughTest.java
@@ -11,7 +11,7 @@ import org.junit.jupiter.api.Test;
 class PlaythroughTest {
 
     private Playthrough playthrough;
-    Passage openingPassage;
+    private Passage openingPassage;
 
     @BeforeEach
     void setUp() {
diff --git a/src/test/java/edu/ntnu/idatt2001/group_30/paths/model/goals/GoalFactoryTest.java b/src/test/java/edu/ntnu/idatt2001/group_30/paths/model/goals/GoalFactoryTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..04b20f582a43f3bc2bcb498792566a6db1589d5c
--- /dev/null
+++ b/src/test/java/edu/ntnu/idatt2001/group_30/paths/model/goals/GoalFactoryTest.java
@@ -0,0 +1,52 @@
+package edu.ntnu.idatt2001.group_30.paths.model.goals;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import java.util.stream.Stream;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+class GoalFactoryTest {
+
+    /*
+     * this is a factory class, so the typical beforeEach arrange step is not needed
+     */
+
+    @ParameterizedTest
+    @MethodSource("validGoalTypeAndValueProvider")
+    void getGoal_withValidGoalTypeAndValue_returnsGoalObject() {
+        GoalType goalType = GoalType.GOLD_GOAL;
+        Object goalValue = "100";
+
+        Goal<?> goal = GoalFactory.getGoal(goalType, goalValue);
+
+        assertEquals(GoldGoal.class, goal.getClass());
+    }
+
+    private static Stream<Arguments> validGoalTypeAndValueProvider() {
+        return Stream.of(
+            Arguments.of(GoalType.GOLD_GOAL, "100", GoldGoal.class),
+            Arguments.of(GoalType.HEALTH_GOAL, "50", HealthGoal.class),
+            Arguments.of(GoalType.SCORE_GOAL, "500", ScoreGoal.class)
+        );
+    }
+
+    @ParameterizedTest
+    @MethodSource("invalidGoalTypeAndValueProvider")
+    void getGoal_withInvalidGoalValue_throwsIllegalArgumentException() {
+        GoalType goalType = GoalType.GOLD_GOAL;
+        Object goalValue = "invalid_value";
+
+        assertThrows(IllegalArgumentException.class, () -> GoalFactory.getGoal(goalType, goalValue));
+    }
+
+    private static Stream<Arguments> invalidGoalTypeAndValueProvider() {
+        return Stream.of(
+            Arguments.of(GoalType.GOLD_GOAL, "invalid", GoldGoal.class),
+            Arguments.of(GoalType.HEALTH_GOAL, "-1", HealthGoal.class),
+            Arguments.of(GoalType.SCORE_GOAL, "", ScoreGoal.class)
+        );
+    }
+}