diff --git a/src/main/java/edu/ntnu/idatt1002/callumg/cards/DeckOfCards.java b/src/main/java/edu/ntnu/idatt1002/callumg/cards/DeckOfCards.java
index d0d29f0a9ef8c8b4db206b2b593edfb52891023b..6a90514f4167efc8aeb6be5a380ebdd9e19652b4 100644
--- a/src/main/java/edu/ntnu/idatt1002/callumg/cards/DeckOfCards.java
+++ b/src/main/java/edu/ntnu/idatt1002/callumg/cards/DeckOfCards.java
@@ -23,6 +23,15 @@ public class DeckOfCards {
         }
     }
 
+    /**
+     * Gets deck of cards.
+     *
+     * @return the deck
+     */
+    public List<PlayingCard> getCards() {
+        return cards;
+    }
+
     /**
      * Deal hand array list.
      *
@@ -31,9 +40,8 @@ public class DeckOfCards {
      * @throws IllegalArgumentException the illegal argument exception
      */
     public ArrayList<PlayingCard> dealHand(int n) throws IllegalArgumentException {
-        if (n==0) throw new IllegalArgumentException("you cant deal an empty hand");
-        if (n<0) throw new IllegalArgumentException("you cant have a negative amount of cards");
-        if (n> cards.size()) throw new IllegalArgumentException("not enough cards in deck");
+        if (n <= 0) throw new IllegalArgumentException("You cannot deal 0 or less cards.");
+        if (n > cards.size()) throw new IllegalArgumentException("You cannot deal more cards than are in the deck.");
         int totalCards;
         ArrayList<PlayingCard> cardsCopy = new ArrayList<>();
         ArrayList<PlayingCard> handOfCards = new ArrayList<>();
diff --git a/src/main/java/edu/ntnu/idatt1002/callumg/cards/HandOfCards.java b/src/main/java/edu/ntnu/idatt1002/callumg/cards/HandOfCards.java
index 67555c7f7c752f81fc8866d165ac3a2033ce00a6..9defb1b7a05611ac4d431b55c93a72851bd7083b 100644
--- a/src/main/java/edu/ntnu/idatt1002/callumg/cards/HandOfCards.java
+++ b/src/main/java/edu/ntnu/idatt1002/callumg/cards/HandOfCards.java
@@ -20,15 +20,6 @@ public class HandOfCards {
         this.handOfCards = handOfCards;
     }
 
-    /**
-     * Gets the hand of cards.
-     *
-     * @return the current hand of cards.
-     */
-    public ArrayList<PlayingCard> getHandOfCards() {
-        return handOfCards;
-    }
-
     /**
      * Gets all heart cards in a hand.
      *
@@ -47,7 +38,7 @@ public class HandOfCards {
      *
      * @return the sum of the cards
      */
-    public int sumOfCards() {
+    public int getSumOfCards() {
         return handOfCards.stream().mapToInt((card) -> card.getFace()).sum();
     }
 
@@ -57,7 +48,7 @@ public class HandOfCards {
      * @return true or false based on the statement
      */
     public boolean containsQueenOfSpades() {
-        return handOfCards.stream().anyMatch((card) -> card.getAsString().equals("S13"));
+        return handOfCards.stream().anyMatch((card) -> card.getAsString().equals("S12"));
     }
 
     /**
diff --git a/src/main/java/edu/ntnu/idatt1002/callumg/client/CardGameController.java b/src/main/java/edu/ntnu/idatt1002/callumg/client/CardGameController.java
index af96721d866eb5ee63c2f85df1db29721d1d5ff8..dbc4b6f6f18a8d7e8d88e391ef9dcec174dfb78f 100644
--- a/src/main/java/edu/ntnu/idatt1002/callumg/client/CardGameController.java
+++ b/src/main/java/edu/ntnu/idatt1002/callumg/client/CardGameController.java
@@ -59,7 +59,7 @@ public class CardGameController implements Initializable {
     void checkHand() {
         HandOfCards handOfCards = new HandOfCards(currentDeck);
         StringBuilder sumOfCardsString = new StringBuilder("Sum: ");
-        sumOfCardsString.append(handOfCards.sumOfCards());
+        sumOfCardsString.append(handOfCards.getSumOfCards());
         sumofcards.setText(sumOfCardsString.toString());
 
         String hearts = "No heart cards";
diff --git a/src/test/java/edu/ntnu/idatt1002/callumg/DeckOfCardsTest.java b/src/test/java/edu/ntnu/idatt1002/callumg/DeckOfCardsTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..5d1dbf21b359997bec439c91a9be83df2d1646df
--- /dev/null
+++ b/src/test/java/edu/ntnu/idatt1002/callumg/DeckOfCardsTest.java
@@ -0,0 +1,76 @@
+package edu.ntnu.idatt1002.callumg;
+
+import edu.ntnu.idatt1002.callumg.cards.DeckOfCards;
+import edu.ntnu.idatt1002.callumg.cards.PlayingCard;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class DeckOfCardsTest {
+    @Nested
+    class testDealHandExceptions {
+        @Test
+        void testCannotDealEmptyOrNegativeHand() {
+            DeckOfCards deckOfCards = new DeckOfCards();
+            try {
+                deckOfCards.dealHand(0);
+                fail();
+            } catch (IllegalArgumentException e) {
+                assertEquals("You cannot deal 0 or less cards.", e.getMessage());
+            }
+        }
+        @Test
+        void testCannotDealMoreCardsThanInDeck() {
+            DeckOfCards deckOfCards = new DeckOfCards();
+            try {
+                deckOfCards.dealHand(53);
+                fail();
+            } catch (IllegalArgumentException e) {
+                assertEquals("You cannot deal more cards than are in the deck.", e.getMessage());
+            }
+        }
+    }
+
+    @Nested
+    class testDealHand {
+        @Test
+        void testDealtHandDoesNotContainDuplicates() {
+            DeckOfCards deckOfCards = new DeckOfCards();
+            ArrayList<PlayingCard> dealtHand = null;
+            try {
+                dealtHand = deckOfCards.dealHand(52);
+            } catch (IllegalArgumentException e) {
+                fail();
+            }
+            assertTrue(dealtHand.containsAll(deckOfCards.getCards()) && deckOfCards.getCards().containsAll(dealtHand));
+        }
+        @Test
+        void testDealtHandIsCorrectSize() {
+            DeckOfCards deckOfCards = new DeckOfCards();
+            ArrayList<PlayingCard> dealtHand1 = null;
+            ArrayList<PlayingCard> dealtHand2 = null;
+            ArrayList<PlayingCard> dealtHand3 = null;
+            try {
+                dealtHand1 = deckOfCards.dealHand(10);
+            } catch (IllegalArgumentException e) {
+                fail();
+            }
+            try {
+                dealtHand2 = deckOfCards.dealHand(12);
+            } catch (IllegalArgumentException e) {
+                fail();
+            }
+            try {
+                dealtHand3 = deckOfCards.dealHand(1);
+            } catch (IllegalArgumentException e) {
+                fail();
+            }
+            assertEquals(10, dealtHand1.size());
+            assertEquals(12, dealtHand2.size());
+            assertEquals(1, dealtHand3.size());
+        }
+    }
+}
diff --git a/src/test/java/edu/ntnu/idatt1002/callumg/HandOfCardsTest.java b/src/test/java/edu/ntnu/idatt1002/callumg/HandOfCardsTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..4bb3004d184ba73445ebe8676aa0194e85212893
--- /dev/null
+++ b/src/test/java/edu/ntnu/idatt1002/callumg/HandOfCardsTest.java
@@ -0,0 +1,104 @@
+package edu.ntnu.idatt1002.callumg;
+
+import edu.ntnu.idatt1002.callumg.cards.HandOfCards;
+import edu.ntnu.idatt1002.callumg.cards.PlayingCard;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class HandOfCardsTest {
+    @Nested
+    class getHeartCards {
+        @Test
+        void testGetHeartCardsReturnsEmptyListWhenNoHeartCardsArePresent() {
+            ArrayList<PlayingCard> cards = new ArrayList<>();
+            cards.add(new PlayingCard('S', 8));
+            HandOfCards handOfCards = new HandOfCards(cards);
+            assertEquals(new ArrayList<>(), handOfCards.getHeartCards());
+        }
+        @Test
+        void testGetHeartCardsReturnsCorrectAmount() {
+            ArrayList cards = new ArrayList<>();
+            cards.add(new PlayingCard('S', 8));
+            cards.add(new PlayingCard('H', 4));
+            cards.add(new PlayingCard('H', 5));
+            cards.add(new PlayingCard('H', 6));
+            HandOfCards handOfCards = new HandOfCards(cards);
+            assertEquals(3, handOfCards.getHeartCards().size());
+        }
+    }
+
+    @Nested
+    class getSumOfCards {
+        @Test
+        void testGetSumOfCardsReturnsCorrectValue() {
+            ArrayList cards = new ArrayList<>();
+            cards.add(new PlayingCard('S', 8));
+            cards.add(new PlayingCard('H', 4));
+            cards.add(new PlayingCard('H', 5));
+            cards.add(new PlayingCard('H', 6));
+            HandOfCards handOfCards = new HandOfCards(cards);
+            assertEquals(23, handOfCards.getSumOfCards());
+        }
+        @Test
+        void testGetSumOfCardsWhenNoCardsOnHand() {
+            HandOfCards handOfCards = new HandOfCards(new ArrayList<>());
+            assertEquals(0, handOfCards.getSumOfCards());
+        }
+    }
+
+    @Nested
+    class deckContainsQueenOfSpades {
+        @Test
+        void testContainsQueenOfSpadesReturnsTrueWhenHandHasQueenOfSpades() {
+            ArrayList cards = new ArrayList<>();
+            cards.add(new PlayingCard('S', 8));
+            cards.add(new PlayingCard('H', 4));
+            cards.add(new PlayingCard('H', 5));
+            cards.add(new PlayingCard('H', 6));
+            cards.add(new PlayingCard('S', 12));
+            HandOfCards handOfCards = new HandOfCards(cards);
+            assertTrue(handOfCards.containsQueenOfSpades());
+        }
+        @Test
+        void testContainsQueenOfSpadesReturnsFalseWhenHandHasNotGotQueenOfSpades() {
+            ArrayList cards = new ArrayList<>();
+            cards.add(new PlayingCard('S', 8));
+            cards.add(new PlayingCard('H', 4));
+            cards.add(new PlayingCard('H', 5));
+            cards.add(new PlayingCard('H', 6));
+            cards.add(new PlayingCard('S', 13));
+            HandOfCards handOfCards = new HandOfCards(cards);
+            assertFalse(handOfCards.containsQueenOfSpades());
+        }
+    }
+
+    @Nested
+    class handIsFlush {
+        @Test
+        void testHandIsFlushReturnsTrueWhenHandIsFlush() {
+            ArrayList cards = new ArrayList<>();
+            cards.add(new PlayingCard('H', 8));
+            cards.add(new PlayingCard('H', 4));
+            cards.add(new PlayingCard('H', 5));
+            cards.add(new PlayingCard('H', 6));
+            cards.add(new PlayingCard('H', 13));
+            HandOfCards handOfCards = new HandOfCards(cards);
+            assertTrue(handOfCards.handIsFlush());
+        }
+        @Test
+        void testHandIsFlushReturnsFalseWhenHandIsNotFlush() {
+            ArrayList cards = new ArrayList<>();
+            cards.add(new PlayingCard('H', 8));
+            cards.add(new PlayingCard('H', 4));
+            cards.add(new PlayingCard('H', 5));
+            cards.add(new PlayingCard('H', 6));
+            cards.add(new PlayingCard('S', 13));
+            HandOfCards handOfCards = new HandOfCards(cards);
+            assertFalse(handOfCards.handIsFlush());
+        }
+    }
+}