diff --git a/Bachelor_application.iml b/Bachelor_application.iml
index f8154df5a6a0bb9048b52fc21433f278efd739cf..b94cb914ec5ad223d705dca95552625827a51c34 100644
--- a/Bachelor_application.iml
+++ b/Bachelor_application.iml
@@ -6,6 +6,7 @@
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
     <orderEntry type="inheritedJdk" />
@@ -55,5 +56,15 @@
     <orderEntry type="library" name="Maven: org.apache.commons:commons-math3:3.6.1" level="project" />
     <orderEntry type="library" name="Maven: joda-time:joda-time:2.10.14" level="project" />
     <orderEntry type="library" name="Maven: org.jblas:jblas:1.2.4" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.13.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.8.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.8.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.8.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.8.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.8.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.8.2" level="project" />
   </component>
 </module>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index e6c30632be74fa49f90a30a1c7e6dfa33c7d6844..3c4734f99a5c9efa149b22a301fdc4202bb2bbcc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,6 +46,34 @@
             <version>1.2.4</version>
         </dependency>
 
+        <!-- https://mvnrepository.com/artifact/org.openjfx/javafx -->
+
+        <dependency>
+            <groupId>org.openjfx</groupId>
+            <artifactId>javafx</artifactId>
+            <version>11</version>
+            <type>pom</type>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>RELEASE</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>RELEASE</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <version>RELEASE</version>
+            <scope>test</scope>
+        </dependency>
+
+
     </dependencies>
 
     <properties>
diff --git a/src/main/java/com/application/DB/Account_handler.java b/src/main/java/com/application/DB/AccountHandler.java
similarity index 80%
rename from src/main/java/com/application/DB/Account_handler.java
rename to src/main/java/com/application/DB/AccountHandler.java
index e5a7cf0596f74fd80208b9d2355f3e8f405afa32..fa9c06a45a13ab4284524b3de6a5d8a205319098 100644
--- a/src/main/java/com/application/DB/Account_handler.java
+++ b/src/main/java/com/application/DB/AccountHandler.java
@@ -8,9 +8,8 @@ import com.google.cloud.bigquery.TableResult;
 import static com.application.DB.Constants.*;
 import static com.application.DB.Settings.*;
 import static com.application.GUI.PopUpWindows.LoginPopup.getPasswordTextField;
-import static java.lang.System.err;
 
-public class Account_handler {
+public class AccountHandler {
 
     public static void getAccountInformation(String username, String password) throws Exception {
 
@@ -64,21 +63,28 @@ public class Account_handler {
                 "FROM " + PROJECT_ID + "." + LOCATION_ID + "." + USERS_TABLE_NAME + " " +
                 "WHERE Username = " + '"' + username + '"';
 
+
         System.out.println(sqlStatement);
 
         // Retrieves the results from the queryjob
         return HelpingFunctions.createQueryJob(sqlStatement);
     }
 
-    public static void addUser(String firstName, String lastName, String phoneNo, String username, String password, boolean isAdmin) throws Exception {
+    public static boolean addUser(String firstName, String lastName, String phoneNo, String username, String password, boolean isAdmin) throws Exception {
+
+        if(getAccount(username).getTotalRows() == 0) {
             // Sqlstatement
             final String sqlStatement =
-                "INSERT INTO " + PROJECT_ID + "." + LOCATION_ID + "." + USERS_TABLE_NAME + "(First_name, Last_name, Phone_no, Username, Password, Admin) " +
-                        "VALUES("+'"'+firstName+'"'+","+'"'+lastName+'"'+","+'"'+phoneNo+'"'+","+'"'+username+'"'+","+'"'+password+'"'+","+ isAdmin+") ";
+                    "INSERT INTO " + PROJECT_ID + "." + LOCATION_ID + "." + USERS_TABLE_NAME + "(First_name, Last_name, Phone_no, Username, Password, Admin) " +
+                            "VALUES(" + '"' + firstName + '"' + "," + '"' + lastName + '"' + "," + '"' + phoneNo + '"' + "," + '"' + username + '"' + "," + '"' + password + '"' + "," + isAdmin + ") ";
 
-        System.out.println(sqlStatement);
+            System.out.println(sqlStatement);
 
-        HelpingFunctions.createQueryJob(sqlStatement);
+            HelpingFunctions.createQueryJob(sqlStatement);
+            return true;
+        } else {
+            return false;
+        }
     }
 
     public static boolean deleteUser(String username) throws Exception {
diff --git a/src/main/java/com/application/DB/Constants.java b/src/main/java/com/application/DB/Constants.java
index 75ae0f2f28778d262908484973934d77e058c6d5..17b4ae5e84ada6a3c938ee416973f071d2dc797d 100644
--- a/src/main/java/com/application/DB/Constants.java
+++ b/src/main/java/com/application/DB/Constants.java
@@ -41,9 +41,7 @@ public class Constants {
     private static String userName;
     private static String phoneNo;
 
-    public static String getUserName() {
-        return userName;
-    }
+    public static String getUserName() { return userName;}
 
     public static void setUserName(String userName) {
         Constants.userName = userName;
diff --git a/src/main/java/com/application/DB/HelpingFunctions.java b/src/main/java/com/application/DB/HelpingFunctions.java
index cdeeafa3bb95313fe9289e3b84df3a3d89e94db1..4ab13f7cb94537fbb09bf5d3d2cddf8690c81e49 100644
--- a/src/main/java/com/application/DB/HelpingFunctions.java
+++ b/src/main/java/com/application/DB/HelpingFunctions.java
@@ -1,8 +1,10 @@
 package com.application.DB;
 
+import com.application.GUI.PopUpWindows.NotificationPopUp;
 import com.google.auth.oauth2.GoogleCredentials;
 import com.google.auth.oauth2.ServiceAccountCredentials;
 import com.google.cloud.bigquery.*;
+import io.opencensus.internal.StringUtils;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -12,8 +14,10 @@ import java.util.Map;
 import java.util.TimeZone;
 
 import static com.application.DB.Constants.KEY_FILE_NAME;
+import static com.application.DB.Constants.MAX_USER_INPUT_CHARACTERS;
 import static com.application.DB.Settings.*;
 
+
 public class HelpingFunctions {
 
 
@@ -178,4 +182,22 @@ public class HelpingFunctions {
     public static void setLoadedData(boolean loadedData) {
         Constants.LOADED_DATA = loadedData;
     }
+
+
+public static boolean isValidInput (String input){
+    if(input.length() > Constants.MAX_USER_INPUT_CHARACTERS) {
+        NotificationPopUp.displayNotificationWindow("A maximum of "+MAX_USER_INPUT_CHARACTERS+" characters is allowed!");
+        return true;
+    }
+    else if(input.contains("UNION")){
+        NotificationPopUp.displayNotificationWindow("Keyword: 'UNION' is not allowed");
+        return true;
+    }
+    else return false;
+}
+
+
+
+
+
 }
diff --git a/src/main/java/com/application/DB/Settings.java b/src/main/java/com/application/DB/Settings.java
index 57bc2427efbd5a356dc07958933a43e0b3a73c2b..04028a69333ac4fac359749a89ef9121e2a086e9 100644
--- a/src/main/java/com/application/DB/Settings.java
+++ b/src/main/java/com/application/DB/Settings.java
@@ -29,7 +29,7 @@ public final class Settings {
     public static final int LOCATION_ID = 124;
     public static final String MAN_MOISTURE_TABLE = "int_dk_manMoisture";
     public static final String KWH_TABLE_NAME = "int_sd_winccsensordata";
-    public static final String USERS_TABLE_NAME = "users";
+    public static String USERS_TABLE_NAME = "users";
     public static final String KWH_NAME_PARAMETER = "VariantValue";
     public static final String KWH_TIMESTAMP_NAME_PARAMETER  = "Timestamp";
     public static final String KWH_VALUE_ID_NAME_PARAMETER  = "ValueID";
diff --git a/src/main/java/com/application/GUI/PopUpWindows/InputPopup.java b/src/main/java/com/application/GUI/PopUpWindows/InputPopup.java
index 1259d2762d1f963348cb2cbf1abbc4d5bb211e6f..e96015ba4592ddac1de67180f8ace1b381551399 100644
--- a/src/main/java/com/application/GUI/PopUpWindows/InputPopup.java
+++ b/src/main/java/com/application/GUI/PopUpWindows/InputPopup.java
@@ -14,6 +14,7 @@ import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Map;
 
+import static com.application.DB.HelpingFunctions.isValidInput;
 import static com.application.DB.Settings.*;
 import static com.application.DB.DB.getCurrentDrying;
 import static com.application.DB.Constants.MAX_USER_INPUT_CHARACTERS;
@@ -127,13 +128,14 @@ public class InputPopup {
                 Constants.MOISTURE_GOAL = moistureList.getValue();
             }
 
+
+
             boolean err = false;
 
             // If the input is null, sets the value to be empty
             if (treeSpeciesList.getValue() == null) {
                 Constants.TREE_SPECIES = "";
-            } else if (treeSpeciesList.getValue().length() > MAX_USER_INPUT_CHARACTERS) {
-                NotificationPopUp.displayNotificationWindow("A maximum of "+MAX_USER_INPUT_CHARACTERS+" characters is allowed!");
+            } else if (isValidInput(treeSpeciesList.getValue())) {
                 treeSpeciesList.setValue("");
                 err = true;
             }
diff --git a/src/main/java/com/application/GUI/PopUpWindows/LoginPopup.java b/src/main/java/com/application/GUI/PopUpWindows/LoginPopup.java
index 878fba65da35b5725f2cea85d8767e1b059cd2c3..a2218c8e0f5eb6bec120d1c2d8b818882e0adaa0 100644
--- a/src/main/java/com/application/GUI/PopUpWindows/LoginPopup.java
+++ b/src/main/java/com/application/GUI/PopUpWindows/LoginPopup.java
@@ -10,7 +10,7 @@ import javafx.stage.Stage;
 import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 
-import static com.application.DB.Account_handler.*;
+import static com.application.DB.AccountHandler.*;
 import static com.application.DB.Constants.*;
 import static com.application.GUI.Panes.LogoBar.getLogin;
 
@@ -140,10 +140,11 @@ public class LoginPopup {
 
                 // Tries to add the user
                 try {
-                    addUser(firstNameTextField.getText(), lastNameTextField.getText(), phoneNoTextField.getText(),
-                            usernameTextField.getText(), hashedPassword, isAdminBox.isSelected());
-                    NotificationPopUp.displayNotificationWindow("Successfully added user!");
-                    window.close();
+                    if(addUser(firstNameTextField.getText(), lastNameTextField.getText(), phoneNoTextField.getText(),
+                            usernameTextField.getText(), hashedPassword, isAdminBox.isSelected())){
+                        NotificationPopUp.displayNotificationWindow("Successfully added user!");
+                        window.close();
+                    } else NotificationPopUp.displayNotificationWindow("That username already exist in the database!");
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
diff --git a/src/test/com/application/DB/AccountHandlerTest.java b/src/test/com/application/DB/AccountHandlerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..1c890044a234827a637a5002c6dfe4eb0db328fd
--- /dev/null
+++ b/src/test/com/application/DB/AccountHandlerTest.java
@@ -0,0 +1,65 @@
+package com.application.DB;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import static com.application.DB.Settings.USERS_TABLE_NAME;
+
+class AccountHandlerTest {
+
+    AccountHandlerTest(){
+        USERS_TABLE_NAME = "users_testing";
+    }
+
+    @Test
+    void logIn() throws Exception {
+        AccountHandler.deleteUser("loginTestAccount");
+        AccountHandler.addUser("test","test","+4712345678","loginTestAccount","test",false);
+        Assertions.assertEquals(1, AccountHandler.logIn("loginTestAccount","test").getTotalRows());
+        AccountHandler.deleteUser("loginTestAccount");
+    }
+
+    @Test
+    void logInFailed() throws Exception {
+        Assertions.assertEquals(0, AccountHandler.logIn("qefjdnweflkweoihde","test").getTotalRows());
+    }
+
+    @Test
+    void getAccount() throws Exception {
+        AccountHandler.deleteUser("testAccount");
+        AccountHandler.addUser("test","test","+4712345678","testAccount","test",false);
+        Assertions.assertEquals(1, AccountHandler.getAccount("testAccount").getTotalRows());
+        AccountHandler.deleteUser("testAccount");
+    }
+
+    //The test checks if the user is added
+    @Test
+    void addUser() throws Exception {
+        AccountHandler.deleteUser("testAccount");
+        AccountHandler.addUser("test","test","+4712345678","testAccount","test",false);
+        Assertions.assertEquals(1, AccountHandler.getAccount("testAccount").getTotalRows());
+        AccountHandler.deleteUser("testAccount");
+    }
+
+    //The test checks if the user is added
+    @Test
+    void addAlreadyExistingUser() throws Exception {
+        AccountHandler.deleteUser("testAccountAlready");
+        AccountHandler.addUser("test","test","+4712345678","testAccountAlready","test",false);
+        Assertions.assertFalse(AccountHandler.addUser("test","test","+4712345678","testAccountAlready","test",false));
+        AccountHandler.deleteUser("testAccountAlready");
+    }
+
+    @Test
+    void deleteUser() throws Exception {
+        AccountHandler.deleteUser("deleteTestAccount");
+        AccountHandler.addUser("test","test","+4712345678","deleteTestAccount","test",false);
+        AccountHandler.deleteUser("deleteTestAccount");
+        Assertions.assertEquals(0, AccountHandler.getAccount("deleteTestAccount").getTotalRows());
+    }
+
+    @Test
+    void deleteUserNonExistingUser() throws Exception {
+        Assertions.assertFalse(AccountHandler.deleteUser("erjfnerjkfwefbaekrørebf"));
+    }
+}
\ No newline at end of file
diff --git a/target/classes/com/application/DB/Account_handler.class b/target/classes/com/application/DB/Account_handler.class
deleted file mode 100644
index c09f8ced6631474642158218a0c1f8833b6ff76f..0000000000000000000000000000000000000000
Binary files a/target/classes/com/application/DB/Account_handler.class and /dev/null differ
diff --git a/target/classes/com/application/DB/Constants.class b/target/classes/com/application/DB/Constants.class
index f9229ec0ebccb95510e2f7694f75caeb87e56e94..b1d3fc3702ed1019a1d6296da0a1b093a81acaa1 100644
Binary files a/target/classes/com/application/DB/Constants.class and b/target/classes/com/application/DB/Constants.class differ
diff --git a/target/classes/com/application/DB/HelpingFunctions.class b/target/classes/com/application/DB/HelpingFunctions.class
index 7166717be98c08b21717c8005665d8fe9bd7c817..20e3d6c5e0490d9ddbe6094ea05e11c3be6765fe 100644
Binary files a/target/classes/com/application/DB/HelpingFunctions.class and b/target/classes/com/application/DB/HelpingFunctions.class differ
diff --git a/target/classes/com/application/DB/Settings.class b/target/classes/com/application/DB/Settings.class
index 3cc7d0b40907c69485096f5fd430ff9206db126c..c10b0728d7fa140d9da7a00434929e80fbf5f2ea 100644
Binary files a/target/classes/com/application/DB/Settings.class and b/target/classes/com/application/DB/Settings.class differ
diff --git a/target/classes/com/application/GUI/LineChartFunctionality.class b/target/classes/com/application/GUI/LineChartFunctionality.class
index 30bd0f2183c54ab6bccf4cc5eda99118dc7ac9f9..b21e073b2ce26efcaa49a9f1501d31ead5c17834 100644
Binary files a/target/classes/com/application/GUI/LineChartFunctionality.class and b/target/classes/com/application/GUI/LineChartFunctionality.class differ
diff --git a/target/classes/com/application/GUI/PopUpWindows/InputPopup.class b/target/classes/com/application/GUI/PopUpWindows/InputPopup.class
index 8d31307c5d5c7a14c5f4fb19efcad444cd5ba67f..347ac9d24189f21a827c7d1ad4ed22d1523084af 100644
Binary files a/target/classes/com/application/GUI/PopUpWindows/InputPopup.class and b/target/classes/com/application/GUI/PopUpWindows/InputPopup.class differ
diff --git a/target/classes/com/application/GUI/PopUpWindows/LoginPopup.class b/target/classes/com/application/GUI/PopUpWindows/LoginPopup.class
index d48a380678cdbcd7de915ccbd1bfb5ac516a2e67..c94b2f85d508e5f666aed9e7f81ececd4e584974 100644
Binary files a/target/classes/com/application/GUI/PopUpWindows/LoginPopup.class and b/target/classes/com/application/GUI/PopUpWindows/LoginPopup.class differ