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 516778c0cbd2c9f2aec78b59a62682b3cf2c390c..7c38d7daa53a7fb829153700face33bd79ae1e1b 100644 --- a/src/main/java/com/application/DB/Account_handler.java +++ b/src/main/java/com/application/DB/AccountHandler.java @@ -9,7 +9,7 @@ import static com.application.DB.Constants.*; import static com.application.DB.Settings.*; import static com.application.GUI.PopUpWindows.LoginPopup.getPasswordTextField; -public class Account_handler { +public class AccountHandler { public static void getAccountInformation(String username, String password) throws Exception { @@ -63,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 de63c5652025d82643805b9c353be740a1a5a511..a354a794e847db5b5796e47922aeca2b7fc896bd 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 { @@ -173,4 +177,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/LineChartFunctionality.java b/src/main/java/com/application/GUI/LineChartFunctionality.java index 246c2392184b350584ef861220d48f90dc02b047..93593a377e83e4010fff62b69ed1848ef175f7b0 100644 --- a/src/main/java/com/application/GUI/LineChartFunctionality.java +++ b/src/main/java/com/application/GUI/LineChartFunctionality.java @@ -318,6 +318,7 @@ public class LineChartFunctionality { } } + getRegressionSeriesConfidenceInterval().getData().clear(); Map<Integer, ArrayList<Double>> confidenceIntervalShadow = statistics(multiMap,true); for ( Map.Entry<Integer, ArrayList<Double>> entry : confidenceIntervalShadow.entrySet()) { for (int i = 0; i < entry.getValue().size(); i++) { diff --git a/src/main/java/com/application/GUI/PopUpWindows/InputPopup.java b/src/main/java/com/application/GUI/PopUpWindows/InputPopup.java index 1259d2762d1f963348cb2cbf1abbc4d5bb211e6f..fe07431d0739826764285cbccabbde1a73fd8b2f 100644 --- a/src/main/java/com/application/GUI/PopUpWindows/InputPopup.java +++ b/src/main/java/com/application/GUI/PopUpWindows/InputPopup.java @@ -14,11 +14,13 @@ 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; import static com.application.DB.HelpingFunctions.setLoadedData; import static com.application.GUI.LineChartFunctionality.*; +import static com.application.GUI.Panes.CreateLogoBar.getLogin; import static com.application.Main.*; import static com.application.DB.DB.setInputParameters; @@ -31,7 +33,6 @@ import static com.application.DB.DB.setInputParameters; */ public class InputPopup { - public static void display() { Stage window = new Stage(); @@ -127,13 +128,18 @@ public class InputPopup { Constants.MOISTURE_GOAL = moistureList.getValue(); } + + boolean err = false; + if(getLogin().getText().equals("Login")){ + err = true; + } + // 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; } @@ -242,7 +248,9 @@ public class InputPopup { ex.printStackTrace(); } - } + } else { + NotificationPopUp.displayNotificationWindow("Please login!"); + } } ); diff --git a/src/main/java/com/application/GUI/PopUpWindows/LoginPopup.java b/src/main/java/com/application/GUI/PopUpWindows/LoginPopup.java index 55e55ce1dc7e18e7d64be99a2a1f2ef06712a026..a77b62ca3bd936ac4392e3762f1a9a63f42b1ced 100644 --- a/src/main/java/com/application/GUI/PopUpWindows/LoginPopup.java +++ b/src/main/java/com/application/GUI/PopUpWindows/LoginPopup.java @@ -1,8 +1,11 @@ package com.application.GUI.PopUpWindows; +import javafx.event.EventHandler; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.*; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; import javafx.scene.layout.VBox; import javafx.stage.Modality; import javafx.stage.Stage; @@ -10,13 +13,34 @@ 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.CreateLogoBar.getLogin; public class LoginPopup { - public static PasswordField PASSWORD_TEXT_FIELD = new PasswordField(); + private static PasswordField PASSWORD_TEXT_FIELD = new PasswordField(); + private static TextField USERNAME_TEXT_FIELD = new TextField(); + + /** + * Tries to login + * + * @return a boolean if an error should be thrown or not. True gives no error, false throws an error. + */ + private static boolean loginButtonPressed(){ + try { + getAccountInformation(getUsernameTextField().getText(), hashPassword(getPasswordTextField().getText())); + if(getLogin().getText().equals("Admin")) { + LoginPopup.adminPopup(); + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + + return !getLogin().getText().equals("Login"); + } + public static void login(){ @@ -27,36 +51,33 @@ public class LoginPopup { Label userNameLabel = new Label("Username:"); Label passwordLabel = new Label("Password:"); - TextField userNameTextField = new TextField(); - getPasswordTextField().clear(); - Button closeButton = new Button("Close"); Button loginButton = new Button("Login"); + + getPasswordTextField().clear(); + closeButton.setOnAction(event -> window.close()); - loginButton.setOnAction(event -> { - try { - getAccountInformation(userNameTextField.getText(), hashPassword(getPasswordTextField().getText())); - if(getLogin().getText().equals("Admin")) { - LoginPopup.adminPopup(); - window.close(); - } - } catch (Exception e) { - e.printStackTrace(); + getPasswordTextField().setOnKeyPressed( event -> { + if( event.getCode() == KeyCode.ENTER ) { + if(loginButtonPressed()){ + window.close(); + } } + }); - if(!getLogin().getText().equals("Login")){ + loginButton.setOnAction(event -> { + if(loginButtonPressed()){ window.close(); } - }); VBox layout = new VBox(10); layout.setAlignment(Pos.CENTER); - layout.getChildren().addAll(userNameLabel, userNameTextField, passwordLabel, getPasswordTextField(), loginButton, closeButton); + layout.getChildren().addAll(userNameLabel, getUsernameTextField(), passwordLabel, getPasswordTextField(), loginButton, closeButton); Scene scene = new Scene(layout, 500, 300); scene.getStylesheets().add(InputPopup.class.getResource("/com.application/CSS/styleSheet.css").toExternalForm()); @@ -140,10 +161,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(); } @@ -280,4 +302,8 @@ public class LoginPopup { public static PasswordField getPasswordTextField() { return PASSWORD_TEXT_FIELD; } + + public static TextField getUsernameTextField() { + return USERNAME_TEXT_FIELD; + } } 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/AccountHandler.class b/target/classes/com/application/DB/AccountHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..02a8049690ac1479b6016badc13cbef09e5aa87a Binary files /dev/null and b/target/classes/com/application/DB/AccountHandler.class differ 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/DB.class b/target/classes/com/application/DB/DB.class index cb0cd97ba64645c47e99470a2b50cfbb545200ab..f9cd0427f1d17a46b71d6a7a175b9be36af824b4 100644 Binary files a/target/classes/com/application/DB/DB.class and b/target/classes/com/application/DB/DB.class differ diff --git a/target/classes/com/application/DB/HelpingFunctions.class b/target/classes/com/application/DB/HelpingFunctions.class index 7166717be98c08b21717c8005665d8fe9bd7c817..2847eab1c308e4df52d0b801cd32249daaf9dd44 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 bc6a733dad6584d6375cd818bbd9a7750cfdd36a..755df60ca93225f1a78d090a5e98155b2c0eb342 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/Panes/BottomBar.class b/target/classes/com/application/GUI/Panes/BottomBar.class deleted file mode 100644 index 12ce86ef6278f3b1a3a17d788f51dd8d0ac0ae24..0000000000000000000000000000000000000000 Binary files a/target/classes/com/application/GUI/Panes/BottomBar.class and /dev/null differ diff --git a/target/classes/com/application/GUI/Panes/LogoBar.class b/target/classes/com/application/GUI/Panes/LogoBar.class deleted file mode 100644 index 654a3b92355770a294d191cc0f302fe5fc700687..0000000000000000000000000000000000000000 Binary files a/target/classes/com/application/GUI/Panes/LogoBar.class and /dev/null differ diff --git a/target/classes/com/application/GUI/Panes/MenuBar.class b/target/classes/com/application/GUI/Panes/MenuBar.class deleted file mode 100644 index eb12162b61fb84ddc3e69ec508f7df592b17a1c6..0000000000000000000000000000000000000000 Binary files a/target/classes/com/application/GUI/Panes/MenuBar.class and /dev/null differ diff --git a/target/classes/com/application/GUI/Panes/SideBar$1WorkerThread.class b/target/classes/com/application/GUI/Panes/SideBar$1WorkerThread.class deleted file mode 100644 index bb54f0a22c4bec363dc81cddb6023fda37586d64..0000000000000000000000000000000000000000 Binary files a/target/classes/com/application/GUI/Panes/SideBar$1WorkerThread.class and /dev/null differ diff --git a/target/classes/com/application/GUI/Panes/SideBar.class b/target/classes/com/application/GUI/Panes/SideBar.class deleted file mode 100644 index 2176f7d89cd8104c978404d72d8af780c4142634..0000000000000000000000000000000000000000 Binary files a/target/classes/com/application/GUI/Panes/SideBar.class and /dev/null differ diff --git a/target/classes/com/application/GUI/PopUpWindows/InputPopup.class b/target/classes/com/application/GUI/PopUpWindows/InputPopup.class index 8d31307c5d5c7a14c5f4fb19efcad444cd5ba67f..728dd498b6efc1a0bb249930929c014285629008 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..f42ec1d8527ca6d4539c0dfcdac663c4f084eeb4 100644 Binary files a/target/classes/com/application/GUI/PopUpWindows/LoginPopup.class and b/target/classes/com/application/GUI/PopUpWindows/LoginPopup.class differ diff --git a/target/classes/com/application/Main.class b/target/classes/com/application/Main.class index aa6c0575581b03ac72e0f15042a91c42bfd30150..6b48ef79d20cc6414449b1d7dd4c8f8131946f60 100644 Binary files a/target/classes/com/application/Main.class and b/target/classes/com/application/Main.class differ diff --git a/target/test-classes/com/application/DB/AccountHandlerTest.class b/target/test-classes/com/application/DB/AccountHandlerTest.class new file mode 100644 index 0000000000000000000000000000000000000000..b16948862b412627c08907e94e06b71d0496a668 Binary files /dev/null and b/target/test-classes/com/application/DB/AccountHandlerTest.class differ