diff --git a/src/main/java/CreateUser.java b/src/main/java/CreateUser.java index ff436fa..5a84cf6 100644 --- a/src/main/java/CreateUser.java +++ b/src/main/java/CreateUser.java @@ -27,70 +27,70 @@ class CreateUser { // Constructor public CreateUser(String id, String name, String password, String birthday, String firstName, String surname) { - this.id = id; + this.id = id; this.userName = name; - this.password = hashPassword(password); - this.birthday = birthday; - this.firstName = firstName; - this.surname = surname; + this.password = hashPassword(password); + this.birthday = birthday; + this.firstName = firstName; + this.surname = surname; } // Getters and Setters public String getId() { return id; - } + } - public void setId(String id) { + public void setId(String id) { this.id = id; - } + } public String getUserName() { - return userName; + return userName; } public void setUserName(String userName) { - this.userName = userName; + this.userName = userName; } public String getPassword() { - return password; + return password; } public void setPassword(String password) { - this.password = password; + this.password = password; } public String getBirthday() { return birthday; } - public void setBirthday(String birthday) { + public void setBirthday(String birthday) { this.birthday = birthday; - } + } - public String getFirstName() { - return firstName; - } + public String getFirstName() { + return firstName; + } - public void setFirstName(String firstName) { - this.firstName = firstName; - } + public void setFirstName(String firstName) { + this.firstName = firstName; + } - public String surname() { - return surname; - } + public String surname() { + return surname; + } - public void setSurname(String surname) { - this.surname = surname; - } + public void setSurname(String surname) { + this.surname = surname; + } - public boolean isStayLoggedIn() { + public boolean isStayLoggedIn() { return stayLoggedIn; - } + } - public void setStayLoggedIn(boolean stayLoggedIn) { + public void setStayLoggedIn(boolean stayLoggedIn) { this.stayLoggedIn = stayLoggedIn; - } + } // Function to create user with validation public static CreateUser createUser(String id, String userName, String password, String birthday, String firstName, String surname) { @@ -105,7 +105,7 @@ class CreateUser { } return new CreateUser(id, userName, password, birthday, firstName, surname); } - // Function to hash the password using SHA-256 algorithm + // Function to hash the password using SHA-256 algorithm private String hashPassword(String password) { try { MessageDigest digest = MessageDigest.getInstance("SHA-256"); @@ -123,7 +123,7 @@ class CreateUser { } } - // Function to save to JSON file, replace with database call later + // Function to save to JSON file, replace with database call later public void saveToJsonFile(String filename) { List userList = readUserListFromJsonFile(filename); userList.add(this); @@ -133,11 +133,11 @@ class CreateUser { gson.toJson(userList, fileWriter); System.out.println("User information appended to " + filename); } catch (IOException e) { - System.out.println("Error occurred while saving user information to JSON file: " + e.getMessage()); + System.out.println("Error occurred while saving user information to JSON file: " + e.getMessage()); } } - // Function to read user information from a JSON file + // Function to read user information from a JSON file public static List readUserListFromJsonFile(String filename) { List userList = new ArrayList<>(); try (Reader reader = new FileReader(filename)) { @@ -152,7 +152,7 @@ class CreateUser { return userList; } - // Function to update stayLoggedIn variable in the JSON file + // Function to update stayLoggedIn variable in the JSON file public static void updateStayLoggedIn(String filename, String username, boolean stayLoggedIn) { List userList = readUserListFromJsonFile(filename); diff --git a/src/main/java/LoginGUI.java b/src/main/java/LoginGUI.java index 6d49398..6731ae7 100644 --- a/src/main/java/LoginGUI.java +++ b/src/main/java/LoginGUI.java @@ -35,7 +35,6 @@ public class LoginGUI extends JFrame implements ActionListener { return signUpButton; } - public LoginGUI() { setTitle("Login"); setSize(300, 220); @@ -81,9 +80,9 @@ public class LoginGUI extends JFrame implements ActionListener { public void actionPerformed(ActionEvent e) { boolean stayLoggedIn = stayLoggedInCheckbox.isSelected(); String username = usernameField.getText(); - // Set stayLoggedIn to false if the checkbox is unchecked + // Set stayLoggedIn to false if the checkbox is unchecked if (!stayLoggedInCheckbox.isSelected()) { - stayLoggedIn = false; + stayLoggedIn = false; } updateStayLoggedIn(username, stayLoggedIn); } @@ -94,63 +93,57 @@ public class LoginGUI extends JFrame implements ActionListener { @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == loginButton) { - login(); + login(); }else if (e.getSource() == signUpButton) { SignUpGUI signUpGUI = new SignUpGUI(); signUpGUI.setVisible(true); - } } private void login() { String username = usernameField.getText(); String password = new String(passwordField.getPassword()); - boolean stayLoggedIn = stayLoggedInCheckbox.isSelected(); // Get checkbox state if (authenticateUser(username, password)) { - JOptionPane.showMessageDialog(this, "Login successful!"); - // Perform actions after successful login - + JOptionPane.showMessageDialog(this, "Login successful!"); dispose(); } else { JOptionPane.showMessageDialog(this, "Invalid username or password", "Login Error", JOptionPane.ERROR_MESSAGE); } } - private void updateStayLoggedIn(String username, boolean stayLoggedIn) { // Update stayLoggedIn in the JSON file for the user - CreateUser.updateStayLoggedIn("user.json", username, stayLoggedIn); + private void updateStayLoggedIn(String username, boolean stayLoggedIn) { + CreateUser.updateStayLoggedIn("user.json", username, stayLoggedIn); } - // Function to authenticate the user by comparing the entered username and password with the saved user data + // Function to authenticate the user by comparing the entered username and password with the saved user data private boolean authenticateUser(String username, String password) { List userList = CreateUser.readUserListFromJsonFile("user.json"); if (userList != null) { for (CreateUser user : userList) { if (user.getUserName().equals(username)) { - // Hash the user input password - String hashedPassword = hashPassword(password); - // Compare the hashed passwords - if (user.getPassword().equals(hashedPassword)) { - return true; // Success - } - } - } + String hashedPassword = hashPassword(password); + if (user.getPassword().equals(hashedPassword)) { + return true; + } + } + } } - return false; // Fail + return false; } - private String hashPassword(String password) { - try { - MessageDigest digest = MessageDigest.getInstance("SHA-256"); - byte[] hash = digest.digest(password.getBytes()); - StringBuilder hexString = new StringBuilder(); - for (byte b : hash) { - String hex = Integer.toHexString(0xff & b); - if (hex.length() == 1) { - hexString.append('0'); - } - hexString.append(hex); + private String hashPassword(String password) { + try { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = digest.digest(password.getBytes()); + StringBuilder hexString = new StringBuilder(); + for (byte b : hash) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) { + hexString.append('0'); + } + hexString.append(hex); } return hexString.toString(); } catch (NoSuchAlgorithmException e) { diff --git a/src/main/java/SignUpGUI.java b/src/main/java/SignUpGUI.java index 51a3e47..696786b 100644 --- a/src/main/java/SignUpGUI.java +++ b/src/main/java/SignUpGUI.java @@ -36,7 +36,7 @@ public class SignUpGUI extends JFrame implements ActionListener { public SignUpGUI() { setTitle("Sign Up"); - setSize(400, 300); // Adjusted size for accommodating more fields + setSize(400, 300); setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(null); @@ -64,7 +64,7 @@ public class SignUpGUI extends JFrame implements ActionListener { confirmPasswordField.setBounds(140, 80, 160, 25); add(confirmPasswordField); - JLabel firstNameLabel = new JLabel("First Name:"); // New field for first name + JLabel firstNameLabel = new JLabel("First Name:"); firstNameLabel.setBounds(20, 110, 80, 25); add(firstNameLabel); @@ -72,7 +72,7 @@ public class SignUpGUI extends JFrame implements ActionListener { firstNameField.setBounds(140, 110, 160, 25); add(firstNameField); - JLabel surnameLabel = new JLabel("Surname:"); // New field for surname + JLabel surnameLabel = new JLabel("Surname:"); surnameLabel.setBounds(20, 140, 80, 25); add(surnameLabel); @@ -89,7 +89,7 @@ public class SignUpGUI extends JFrame implements ActionListener { add(birthdayField); signUpButton = new JButton("Sign Up"); - signUpButton.setBounds(140, 210, 100, 25); // Adjusted position + signUpButton.setBounds(140, 210, 100, 25); signUpButton.addActionListener(this); add(signUpButton); } @@ -97,7 +97,7 @@ public class SignUpGUI extends JFrame implements ActionListener { @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == signUpButton) { - String username = usernameField.getText(); + String username = usernameField.getText(); String password = passwordField.getText(); String confirmPassword = confirmPasswordField.getText(); String birthday = birthdayField.getText(); @@ -113,6 +113,7 @@ public class SignUpGUI extends JFrame implements ActionListener { JOptionPane.showMessageDialog(this, "Username already exists!", "Sign Up Error", JOptionPane.ERROR_MESSAGE); return; } + try { UUID randomUUID = UUID.randomUUID(); CreateUser user = CreateUser.createUser(randomUUID.toString(), username, password, birthday, firstName, surname); @@ -124,17 +125,18 @@ public class SignUpGUI extends JFrame implements ActionListener { } } } - // Function to check if the input username doesn't already exist in the JSON file + + // Function to check if the input username doesn't already exist in the JSON file private boolean isUsernameAvailable(String filename, String username) { List userList = CreateUser.readUserListFromJsonFile(filename); if (userList != null) { for (CreateUser user : userList) { if (user.getUserName().equals(username)) { - return false; // Username already exists + return false; } } } - return true; // Username is available + return true; } public static void main(String[] args) { diff --git a/src/test/java/CreateUserTest.java b/src/test/java/CreateUserTest.java index f3e4c19..cc70da6 100644 --- a/src/test/java/CreateUserTest.java +++ b/src/test/java/CreateUserTest.java @@ -8,23 +8,22 @@ class CreateUserTest { @Test public void testCreateUser() { - String id = "1"; - String userName = "testUser"; - String password = "password123"; - String birthday = "2000-01-01"; - String firstName = "John"; - String surname = "Doe"; - - CreateUser user = new CreateUser(id, userName, password, birthday, firstName, surname); - - assertEquals(id, user.getId()); - assertEquals(userName, user.getUserName()); - assertEquals(birthday, user.getBirthday()); - assertEquals(firstName, user.getFirstName()); - assertEquals(surname, user.surname()); - - // Password should be hashed - assertNotEquals(password, user.getPassword()); + String id = "1"; + String userName = "testUser"; + String password = "password123"; + String birthday = "2000-01-01"; + String firstName = "John"; + String surname = "Doe"; + + CreateUser user = new CreateUser(id, userName, password, birthday, firstName, surname); + + assertEquals(id, user.getId()); + assertEquals(userName, user.getUserName()); + assertEquals(birthday, user.getBirthday()); + assertEquals(firstName, user.getFirstName()); + assertEquals(surname, user.surname()); + + assertNotEquals(password, user.getPassword()); } @@ -38,16 +37,12 @@ class CreateUserTest { String firstName = "Jane"; String surname = "Doe"; - // Create a user CreateUser user = new CreateUser(id, userName, password, birthday, firstName, surname); - // Save user to JSON file user.saveToJsonFile(filename); - // Read users from JSON file List userList = CreateUser.readUserListFromJsonFile(filename); - // Ensure that the user has been saved and can be read correctly assertEquals(1, userList.size()); CreateUser savedUser = userList.get(0); assertEquals(id, savedUser.getId()); @@ -56,37 +51,30 @@ class CreateUserTest { assertEquals(firstName, savedUser.getFirstName()); assertEquals(surname, savedUser.surname()); - // Clean up - delete the test file after the test File file = new File(filename); file.delete(); } @Test public void testUpdateStayLoggedIn() { - String filename = "test_users.json"; - String id = "3"; - String userName = "testUser3"; - String password = "password789"; - String birthday = "2002-01-01"; - String firstName = "Jack"; - String surname = "Doe"; + String filename = "test_users.json"; + String id = "3"; + String userName = "testUser3"; + String password = "password789"; + String birthday = "2002-01-01"; + String firstName = "Jack"; + String surname = "Doe"; - // Create a user CreateUser user = new CreateUser(id, userName, password, birthday, firstName, surname); - // Save user to JSON file user.saveToJsonFile(filename); - // Update stayLoggedIn flag CreateUser.updateStayLoggedIn(filename, userName, true); - // Read updated user from JSON file List userList = CreateUser.readUserListFromJsonFile(filename); - // Ensure that the stayLoggedIn flag is updated assertTrue(userList.get(0).isStayLoggedIn()); - // Clean up - delete the test file after the test File file = new File(filename); file.delete(); } diff --git a/src/test/java/LoginGUITest.java b/src/test/java/LoginGUITest.java index b2b6184..e7eb723 100644 --- a/src/test/java/LoginGUITest.java +++ b/src/test/java/LoginGUITest.java @@ -12,6 +12,7 @@ class LoginGUITest { loginGUI = new LoginGUI(); } + //Tests initial state of the GUI @Test public void testInitialState() { assertNotNull(loginGUI.getUsernameField()); @@ -21,6 +22,7 @@ class LoginGUITest { assertNotNull(loginGUI.getSignUpButton()); } + //Tests the login button @Test public void testActionPerformed_LoginButton() { LoginGUI loginGUI = new LoginGUI(); @@ -28,25 +30,18 @@ class LoginGUITest { loginGUI.getPasswordField().setText("testPassword"); loginGUI.getStayLoggedInCheckbox().setSelected(true); - // Simulate action performed event on login button loginGUI.actionPerformed(new ActionEvent(loginGUI.getLoginButton(), ActionEvent.ACTION_PERFORMED, null)); - // Verify if login was successful assertFalse(loginGUI.isVisible()); } + //Tests the check-box for staying logged in @Test public void testStayLoggedInCheckbox() { - // Initially, checkbox should be unchecked - assertFalse(loginGUI.getStayLoggedInCheckbox().isSelected()); - - // Simulate checking the checkbox - loginGUI.getStayLoggedInCheckbox().doClick(); - - assertTrue(loginGUI.getStayLoggedInCheckbox().isSelected()); - } + assertFalse(loginGUI.getStayLoggedInCheckbox().isSelected()); - + loginGUI.getStayLoggedInCheckbox().doClick(); - + assertTrue(loginGUI.getStayLoggedInCheckbox().isSelected()); + } } diff --git a/src/test/java/SignUpGUITest.java b/src/test/java/SignUpGUITest.java index 9d4dc38..4cb8018 100644 --- a/src/test/java/SignUpGUITest.java +++ b/src/test/java/SignUpGUITest.java @@ -1,4 +1,3 @@ -import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -6,31 +5,29 @@ import org.junit.jupiter.api.BeforeEach; import java.awt.Component; import java.awt.event.ActionEvent; import javax.swing.*; -import java.util.ArrayList; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.assertTrue; - class SignUpGUITest { private SignUpGUI signUpGUI; + //Instantiates a new instance of SignUpGUI @BeforeEach void setUp() { signUpGUI = new SignUpGUI(); signUpGUI.setVisible(true); } + //Disposes of the instance @AfterEach void tearDown() { signUpGUI.dispose(); } + //Tests text field and button inputs @Test public void testSignUpButtonActionPerformed() { - // Set up text fields signUpGUI.getUsernameField().setText("testUser"); signUpGUI.getPasswordField().setText("password"); signUpGUI.getConfirmPasswordField().setText("password"); @@ -38,14 +35,11 @@ import static org.junit.jupiter.api.Assertions.assertTrue; signUpGUI.getFirstNameField().setText("John"); signUpGUI.getSurnameField().setText("Doe"); - // Perform action ActionEvent actionEvent = new ActionEvent(signUpGUI.getSignUpButton(), ActionEvent.ACTION_PERFORMED, ""); signUpGUI.actionPerformed(actionEvent); - } - - + //Tests if passwords are mismatched @Test void testPasswordMismatch() { SignUpGUI signUpGUI = new SignUpGUI(); @@ -56,12 +50,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue; signUpGUI.getFirstNameField().setText("John"); signUpGUI.getSurnameField().setText("Doe"); - signUpGUI.getSignUpButton().doClick(); // Simulate button click + signUpGUI.getSignUpButton().doClick(); - // Make sure an error message dialog is shown assertTrue(isErrorMessageShown(signUpGUI)); } + //Tests if user-name already exists @Test void testExistingUsername() { SignUpGUI signUpGUI = new SignUpGUI(); @@ -72,22 +66,19 @@ import static org.junit.jupiter.api.Assertions.assertTrue; signUpGUI.getFirstNameField().setText("John"); signUpGUI.getSurnameField().setText("Doe"); - signUpGUI.getSignUpButton().doClick(); // Simulate button click + signUpGUI.getSignUpButton().doClick(); - // Make sure an error message dialog is shown assertTrue(isErrorMessageShown(signUpGUI)); } - // Helper method to check if an error message dialog is shown + // Helper method to check if an error message dialog is shown private boolean isErrorMessageShown(JFrame frame) { Component[] components = frame.getComponents(); for (Component component : components) { if (component instanceof JOptionPane) { - return false; - } - + return false; + } } return true; } - }