From 09b8d6ad9d99a79563ff7676034b8bb9158d5726 Mon Sep 17 00:00:00 2001 From: Madhavan7 Date: Wed, 30 Nov 2022 15:48:20 -0500 Subject: [PATCH 01/14] Reorganized classes to follow clean architecture --- src/main/java/emoji_manager/msg/Sender.java | 2 +- .../screens/login_screen/UserLoginUI.java | 7 ++++- .../UserRegistrationUI.java | 24 ++++++++------ .../UserVerificationScreen.java | 31 ++++++++++++++++--- .../use_cases/emoji_manager/ChatFrame.java | 2 +- .../UserLoginInteractor.java | 4 ++- .../UserVerificationOutputBoundary.java | 5 --- .../UserExistsInputBoundary.java | 2 ++ .../UserExistsInteractor.java | 18 ++++++----- .../UserExistsOutputBoundary.java | 2 ++ .../UserVerificationInteractor.java | 8 ++--- .../UserVerificationOutputBoundary.java | 4 +++ 12 files changed, 74 insertions(+), 35 deletions(-) delete mode 100644 src/main/java/use_cases/user_login_use_cases/UserVerificationOutputBoundary.java diff --git a/src/main/java/emoji_manager/msg/Sender.java b/src/main/java/emoji_manager/msg/Sender.java index 2e63867c..53e93058 100644 --- a/src/main/java/emoji_manager/msg/Sender.java +++ b/src/main/java/emoji_manager/msg/Sender.java @@ -1,4 +1,4 @@ -package main.java.emoji_manager.msg; +package emoji_manager.msg; import java.net.DatagramPacket; import java.net.DatagramSocket; diff --git a/src/main/java/screens/login_screen/UserLoginUI.java b/src/main/java/screens/login_screen/UserLoginUI.java index 6d4140dd..a4374ac3 100644 --- a/src/main/java/screens/login_screen/UserLoginUI.java +++ b/src/main/java/screens/login_screen/UserLoginUI.java @@ -9,7 +9,7 @@ /** This is the screen on which the user enters his credentials in order to login **/ public class UserLoginUI implements ActionListener, UserVerificationOutputBoundary { - private final UserLoginInputBoundary loginInteractor; + private UserLoginInputBoundary loginInteractor; JTextField credentialText; JPasswordField passwordText; @@ -65,6 +65,11 @@ public void cannotVerify() { } + @Override + public void setInputBoundary(UserLoginInputBoundary loginInteractor) { + this.loginInteractor = loginInteractor; + } + @Override public void actionPerformed(ActionEvent e) { String username = credentialText.getText(); diff --git a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java index 31a7769a..6ca3a949 100644 --- a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java +++ b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java @@ -1,9 +1,10 @@ package screens.user_registration_screen; import data_access.Database; import data_access.UserDatabase; -import use_cases.user_registration_use_cases.UserExistsInputBoundary; -import use_cases.user_registration_use_cases.UserExistsInteractor; -import use_cases.user_registration_use_cases.userRegCredentialsRetriever; +import screens.login_screen.UserLoginUI; +import use_cases.user_login_use_cases.UserLoginInputBoundary; +import use_cases.user_login_use_cases.UserLoginInteractor; +import use_cases.user_registration_use_cases.*; import javax.swing.*; import java.awt.event.ActionEvent; @@ -22,8 +23,8 @@ public class UserRegistrationUI implements ActionListener, userRegCredentialsRet */ private JTextField deliveryText; - public UserRegistrationUI(UserExistsInputBoundary verifyUser) { - this.verifyUser = verifyUser; + public UserRegistrationUI(UserExistsInputBoundary existsInputBoundary) { + this.verifyUser = existsInputBoundary; } @Override public void getUserCredentials(){ @@ -80,10 +81,15 @@ public void getUserCredentials(){ } public static void main(String[] args){ - //Testing purposes - Database testDB = new UserDatabase(new File("test301")); - UserExistsInputBoundary interactor = new UserExistsInteractor(testDB); - new UserRegistrationUI(interactor).getUserCredentials(); + Database testDB = new UserDatabase(new File("newAccounts")); + UserLoginInputBoundary userLoginInteractor = new UserLoginInteractor(testDB); + UserVerificationOutputBoundary loginUI = new UserLoginUI(userLoginInteractor); + UserVerificationInputBoundary verificationInteractor = new UserVerificationInteractor(testDB, loginUI); + UserExistsOutputBoundary verificationScreen = new UserVerificationScreen(verificationInteractor, new verificationMethodFactory()); + UserExistsInputBoundary existsInteractor = new UserExistsInteractor(testDB, verificationScreen); + UserRegistrationUI testUI = new UserRegistrationUI(existsInteractor); + testUI.getUserCredentials(); + } @Override public void actionPerformed(ActionEvent e) { diff --git a/src/main/java/screens/user_registration_screen/UserVerificationScreen.java b/src/main/java/screens/user_registration_screen/UserVerificationScreen.java index 52ec4ad6..7d03019c 100644 --- a/src/main/java/screens/user_registration_screen/UserVerificationScreen.java +++ b/src/main/java/screens/user_registration_screen/UserVerificationScreen.java @@ -1,7 +1,8 @@ package screens.user_registration_screen; -import use_cases.user_registration_use_cases.UserExistsOutputBoundary; -import use_cases.user_registration_use_cases.UserVerificationInputBoundary; +import screens.login_screen.UserLoginUI; +import use_cases.user_login_use_cases.UserLoginInputBoundary; +import use_cases.user_registration_use_cases.*; import javax.swing.*; import java.awt.event.ActionEvent; @@ -9,11 +10,17 @@ public class UserVerificationScreen implements UserExistsOutputBoundary, ActionListener { private final JTextField verText = new JTextField(20); - private final UserVerificationInputBoundary verificationInputBoundary; + private final verificationMethodFactory deliveryMethod; + private UserVerificationInputBoundary verificationInputBoundary; + private int code; + private String username; + private String password; + private String email; - public UserVerificationScreen(UserVerificationInputBoundary verificationInputBoundary) { + public UserVerificationScreen(UserVerificationInputBoundary verificationInputBoundary, verificationMethodFactory deliveryMethod){ this.verificationInputBoundary = verificationInputBoundary; - } + this.deliveryMethod = deliveryMethod; + }; @Override public void getVerificationCredentials() { @@ -53,10 +60,24 @@ public void presentUserExistsMessage() { userExistsFrame.setVisible(true); } + @Override + public void getCode(int code) { + this.code = code; + } + + @Override + public void getUserCredentials(String username, String password, String email) { + this.username = username; + this.password = password; + this.email = email; + } + @Override public void actionPerformed(ActionEvent e) { // Need if statements to check if code is an integer int code = Integer.parseInt(verText.getText()); + verificationInputBoundary.setCode(this.code); + verificationInputBoundary.setCredentials(username, password, email); verificationInputBoundary.verify("Email", code); } diff --git a/src/main/java/use_cases/emoji_manager/ChatFrame.java b/src/main/java/use_cases/emoji_manager/ChatFrame.java index cb1bc49e..5ba9a84f 100644 --- a/src/main/java/use_cases/emoji_manager/ChatFrame.java +++ b/src/main/java/use_cases/emoji_manager/ChatFrame.java @@ -1,7 +1,7 @@ package use_cases.emoji_manager; +import emoji_manager.msg.Sender; import main.java.emoji_manager.msg.MsgType; -import main.java.emoji_manager.msg.Sender; import main.java.emoji_manager.model.FontAndText; import main.java.emoji_manager.model.EmoInfo; diff --git a/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor.java b/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor.java index b9746916..030e40da 100644 --- a/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor.java +++ b/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor.java @@ -2,8 +2,9 @@ import data_access.Database; import entities.user_entities.User; +import use_cases.user_registration_use_cases.UserVerificationOutputBoundary; -public class UserLoginInteractor implements UserLoginInputBoundary { +public class UserLoginInteractor implements UserLoginInputBoundary{ private String username; private String password; private User user; @@ -34,4 +35,5 @@ public void setLoginCredentials(String username, String password) { this.username = username; this.password = password; } + } diff --git a/src/main/java/use_cases/user_login_use_cases/UserVerificationOutputBoundary.java b/src/main/java/use_cases/user_login_use_cases/UserVerificationOutputBoundary.java deleted file mode 100644 index 66c08c43..00000000 --- a/src/main/java/use_cases/user_login_use_cases/UserVerificationOutputBoundary.java +++ /dev/null @@ -1,5 +0,0 @@ -package use_cases.user_login_use_cases; - -public interface UserVerificationOutputBoundary { - void getLoginCredentials(); -} diff --git a/src/main/java/use_cases/user_registration_use_cases/UserExistsInputBoundary.java b/src/main/java/use_cases/user_registration_use_cases/UserExistsInputBoundary.java index 3584c812..5491a0ce 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserExistsInputBoundary.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserExistsInputBoundary.java @@ -4,4 +4,6 @@ public interface UserExistsInputBoundary { void register(String username, String password, String email); void setCodeDeliveryMethod(String type); + + void setOutputBoundary(UserExistsOutputBoundary existsOutputBoundary); } diff --git a/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java b/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java index 826dd3eb..3df74937 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java @@ -6,25 +6,22 @@ import java.util.Random; public class UserExistsInteractor implements UserExistsInputBoundary{ - private final int code; //May need to refactor this using facade design pattern since this class has too many responsibilities. Database database; - UserVerificationInputBoundary verificationInputBoundary; UserExistsOutputBoundary existsOutputBoundary; private ISendVerificationCode codeMailMan; - public UserExistsInteractor(Database database){ + public UserExistsInteractor(Database database, UserExistsOutputBoundary existsOutputBoundary){ this.database = database; - this.verificationInputBoundary = new UserVerificationInteractor(database); - this.code = new Random().nextInt(1321512); - verificationInputBoundary.setCode(code); - this.existsOutputBoundary = new UserVerificationScreen(verificationInputBoundary); + this.existsOutputBoundary = existsOutputBoundary; } @Override public void register(String username, String password, String email) { if(!database.UserExists(username, email)){ - verificationInputBoundary.setCredentials(username, password, email); + int code = new Random().nextInt(12312341); + existsOutputBoundary.getCode(code); + existsOutputBoundary.getUserCredentials(username, password, email); existsOutputBoundary.getVerificationCredentials(); codeMailMan.sendVerificationCode(email, code); }else{ @@ -36,4 +33,9 @@ public void register(String username, String password, String email) { public void setCodeDeliveryMethod(String type) { this.codeMailMan = new verificationMethodFactory().getVerificationMethod(type); } + + @Override + public void setOutputBoundary(UserExistsOutputBoundary existsOutputBoundary) { + this.existsOutputBoundary = existsOutputBoundary; + } } diff --git a/src/main/java/use_cases/user_registration_use_cases/UserExistsOutputBoundary.java b/src/main/java/use_cases/user_registration_use_cases/UserExistsOutputBoundary.java index a14f9fe6..e3104eb0 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserExistsOutputBoundary.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserExistsOutputBoundary.java @@ -3,4 +3,6 @@ public interface UserExistsOutputBoundary { void getVerificationCredentials(); void presentUserExistsMessage(); + void getCode(int code); + void getUserCredentials(String username, String password, String email); } diff --git a/src/main/java/use_cases/user_registration_use_cases/UserVerificationInteractor.java b/src/main/java/use_cases/user_registration_use_cases/UserVerificationInteractor.java index b0cf9d22..fd54a61a 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserVerificationInteractor.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserVerificationInteractor.java @@ -15,13 +15,13 @@ public class UserVerificationInteractor implements UserVerificationInputBoundary private final UserVerificationOutputBoundary verificationOutputBoundary; - private int code ; + private int code; - public UserVerificationInteractor(Database database){ + public UserVerificationInteractor(Database database, UserVerificationOutputBoundary verificationOutputBoundary){ this.database = database; - UserLoginInputBoundary loginInteractor = new UserLoginInteractor(this.database); - verificationOutputBoundary = new UserLoginUI(loginInteractor); + this.verificationOutputBoundary = verificationOutputBoundary; } + @Override public void verify(String type, int code) { System.out.println(this.code); diff --git a/src/main/java/use_cases/user_registration_use_cases/UserVerificationOutputBoundary.java b/src/main/java/use_cases/user_registration_use_cases/UserVerificationOutputBoundary.java index c0062767..9db253b9 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserVerificationOutputBoundary.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserVerificationOutputBoundary.java @@ -1,6 +1,10 @@ package use_cases.user_registration_use_cases; +import use_cases.user_login_use_cases.UserLoginInputBoundary; + public interface UserVerificationOutputBoundary { void getLoginCredentials(); void cannotVerify(); + + void setInputBoundary(UserLoginInputBoundary loginInteractor2); } From e6e3cd051d2faa4e0a722f7f63d6e21b1bca9a52 Mon Sep 17 00:00:00 2001 From: Madhavan7 Date: Wed, 30 Nov 2022 17:56:01 -0500 Subject: [PATCH 02/14] minor changes --- .../UserRegistrationUI.java | 2 +- .../UserVerificationScreen.java | 6 +- .../TestUserExistsInputBoundary.java | 61 +++++++++++++++++++ 3 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 src/test/java/test_user_registration/TestUserExistsInputBoundary.java diff --git a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java index 6ca3a949..c3ded90a 100644 --- a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java +++ b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java @@ -85,7 +85,7 @@ public static void main(String[] args){ UserLoginInputBoundary userLoginInteractor = new UserLoginInteractor(testDB); UserVerificationOutputBoundary loginUI = new UserLoginUI(userLoginInteractor); UserVerificationInputBoundary verificationInteractor = new UserVerificationInteractor(testDB, loginUI); - UserExistsOutputBoundary verificationScreen = new UserVerificationScreen(verificationInteractor, new verificationMethodFactory()); + UserExistsOutputBoundary verificationScreen = new UserVerificationScreen(verificationInteractor); UserExistsInputBoundary existsInteractor = new UserExistsInteractor(testDB, verificationScreen); UserRegistrationUI testUI = new UserRegistrationUI(existsInteractor); testUI.getUserCredentials(); diff --git a/src/main/java/screens/user_registration_screen/UserVerificationScreen.java b/src/main/java/screens/user_registration_screen/UserVerificationScreen.java index 7d03019c..ae90ada1 100644 --- a/src/main/java/screens/user_registration_screen/UserVerificationScreen.java +++ b/src/main/java/screens/user_registration_screen/UserVerificationScreen.java @@ -10,16 +10,14 @@ public class UserVerificationScreen implements UserExistsOutputBoundary, ActionListener { private final JTextField verText = new JTextField(20); - private final verificationMethodFactory deliveryMethod; - private UserVerificationInputBoundary verificationInputBoundary; + private final UserVerificationInputBoundary verificationInputBoundary; private int code; private String username; private String password; private String email; - public UserVerificationScreen(UserVerificationInputBoundary verificationInputBoundary, verificationMethodFactory deliveryMethod){ + public UserVerificationScreen(UserVerificationInputBoundary verificationInputBoundary){ this.verificationInputBoundary = verificationInputBoundary; - this.deliveryMethod = deliveryMethod; }; @Override diff --git a/src/test/java/test_user_registration/TestUserExistsInputBoundary.java b/src/test/java/test_user_registration/TestUserExistsInputBoundary.java new file mode 100644 index 00000000..3b224075 --- /dev/null +++ b/src/test/java/test_user_registration/TestUserExistsInputBoundary.java @@ -0,0 +1,61 @@ +package test_user_registration; + +import data_access.Database; +import entities.user_entities.User; +import org.junit.jupiter.api.Test; +import use_cases.user_registration_use_cases.UserExistsOutputBoundary; + +public class TestUserExistsInputBoundary { + @Test + public void invalidCredentials(){ + //Anonymous class + Database testDB = new Database() { + @Override + public User getUser(String username) { + return null; + } + + @Override + public void createUser(String username, String password, String email, String type) { + } + + @Override + public boolean UserExists(String username, String email) { + return false; + } + + @Override + public boolean UserExists(String username) { + return false; + } + }; + //Anonymous class for outputBoundary + UserExistsOutputBoundary outputBoundary = new UserExistsOutputBoundary() { + public int x; + @Override + public void getVerificationCredentials() { + x += 1; + } + + @Override + public void presentUserExistsMessage() { + x += 3; + } + + @Override + public void getCode(int code) { + x += 5; + } + + @Override + public void getUserCredentials(String username, String password, String email) { + x += 6; + } + }; + + + + + + } +} From c29211c908f42782d925b8b621d0f089b5560158 Mon Sep 17 00:00:00 2001 From: Madhavan7 Date: Wed, 30 Nov 2022 18:10:30 -0500 Subject: [PATCH 03/14] minor changes, now verificationMethodFactory implements an interface. Since the factory outputs a presenter object, it must be passed as an argument for UserExistsInteractor - rather than created in this class --- .../use_cases/user_registration_use_cases/createMailMan.java | 5 +++++ .../verificationMethodFactory.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 src/main/java/use_cases/user_registration_use_cases/createMailMan.java diff --git a/src/main/java/use_cases/user_registration_use_cases/createMailMan.java b/src/main/java/use_cases/user_registration_use_cases/createMailMan.java new file mode 100644 index 00000000..0ae141dd --- /dev/null +++ b/src/main/java/use_cases/user_registration_use_cases/createMailMan.java @@ -0,0 +1,5 @@ +package use_cases.user_registration_use_cases; + +public interface createMailMan { + ISendVerificationCode getVerificationMethod(String type); +} diff --git a/src/main/java/use_cases/user_registration_use_cases/verificationMethodFactory.java b/src/main/java/use_cases/user_registration_use_cases/verificationMethodFactory.java index 1d67a98c..aea3ad31 100644 --- a/src/main/java/use_cases/user_registration_use_cases/verificationMethodFactory.java +++ b/src/main/java/use_cases/user_registration_use_cases/verificationMethodFactory.java @@ -1,6 +1,6 @@ package use_cases.user_registration_use_cases; -public class verificationMethodFactory { +public class verificationMethodFactory implements createMailMan { public ISendVerificationCode getVerificationMethod(String type){ return new EmailDelivery(); } From 5ec3195bb9214d0e8730903d657e1c454da128cc Mon Sep 17 00:00:00 2001 From: Madhavan7 Date: Thu, 1 Dec 2022 01:48:54 -0500 Subject: [PATCH 04/14] Almost completely tested UserExistsInteractor and UserVerificationInteractor, and refactored the code to solve dependency issues --- .../screens/login_screen/UserLoginUI.java | 7 +- .../UserRegistrationUI.java | 2 +- .../UserVerificationScreen.java | 7 +- .../UserExistsInteractor.java | 7 +- .../UserVerificationInputBoundary.java | 2 +- .../UserVerificationInteractor.java | 9 +- .../UserVerificationOutputBoundary.java | 3 - .../TestUserExistsInputBoundary.java | 147 +++++++++++++----- .../TestUserVerificationInputBoundary.java | 68 ++++++++ 9 files changed, 185 insertions(+), 67 deletions(-) create mode 100644 src/test/java/test_user_registration/TestUserVerificationInputBoundary.java diff --git a/src/main/java/screens/login_screen/UserLoginUI.java b/src/main/java/screens/login_screen/UserLoginUI.java index a4374ac3..6d4140dd 100644 --- a/src/main/java/screens/login_screen/UserLoginUI.java +++ b/src/main/java/screens/login_screen/UserLoginUI.java @@ -9,7 +9,7 @@ /** This is the screen on which the user enters his credentials in order to login **/ public class UserLoginUI implements ActionListener, UserVerificationOutputBoundary { - private UserLoginInputBoundary loginInteractor; + private final UserLoginInputBoundary loginInteractor; JTextField credentialText; JPasswordField passwordText; @@ -65,11 +65,6 @@ public void cannotVerify() { } - @Override - public void setInputBoundary(UserLoginInputBoundary loginInteractor) { - this.loginInteractor = loginInteractor; - } - @Override public void actionPerformed(ActionEvent e) { String username = credentialText.getText(); diff --git a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java index c3ded90a..bb2cbd0f 100644 --- a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java +++ b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java @@ -86,7 +86,7 @@ public static void main(String[] args){ UserVerificationOutputBoundary loginUI = new UserLoginUI(userLoginInteractor); UserVerificationInputBoundary verificationInteractor = new UserVerificationInteractor(testDB, loginUI); UserExistsOutputBoundary verificationScreen = new UserVerificationScreen(verificationInteractor); - UserExistsInputBoundary existsInteractor = new UserExistsInteractor(testDB, verificationScreen); + UserExistsInputBoundary existsInteractor = new UserExistsInteractor(testDB, verificationScreen, new verificationMethodFactory()); UserRegistrationUI testUI = new UserRegistrationUI(existsInteractor); testUI.getUserCredentials(); diff --git a/src/main/java/screens/user_registration_screen/UserVerificationScreen.java b/src/main/java/screens/user_registration_screen/UserVerificationScreen.java index ae90ada1..f15b095c 100644 --- a/src/main/java/screens/user_registration_screen/UserVerificationScreen.java +++ b/src/main/java/screens/user_registration_screen/UserVerificationScreen.java @@ -1,7 +1,4 @@ package screens.user_registration_screen; - -import screens.login_screen.UserLoginUI; -import use_cases.user_login_use_cases.UserLoginInputBoundary; import use_cases.user_registration_use_cases.*; import javax.swing.*; @@ -18,7 +15,7 @@ public class UserVerificationScreen implements UserExistsOutputBoundary, ActionL public UserVerificationScreen(UserVerificationInputBoundary verificationInputBoundary){ this.verificationInputBoundary = verificationInputBoundary; - }; + } @Override public void getVerificationCredentials() { @@ -76,7 +73,7 @@ public void actionPerformed(ActionEvent e) { int code = Integer.parseInt(verText.getText()); verificationInputBoundary.setCode(this.code); verificationInputBoundary.setCredentials(username, password, email); - verificationInputBoundary.verify("Email", code); + verificationInputBoundary.verify(code); } } diff --git a/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java b/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java index 3df74937..6675bb0a 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java @@ -1,20 +1,21 @@ package use_cases.user_registration_use_cases; import data_access.Database; -import screens.user_registration_screen.UserVerificationScreen; import java.util.Random; public class UserExistsInteractor implements UserExistsInputBoundary{ + private final createMailMan mailManFactory; //May need to refactor this using facade design pattern since this class has too many responsibilities. Database database; UserExistsOutputBoundary existsOutputBoundary; private ISendVerificationCode codeMailMan; - public UserExistsInteractor(Database database, UserExistsOutputBoundary existsOutputBoundary){ + public UserExistsInteractor(Database database, UserExistsOutputBoundary existsOutputBoundary, createMailMan mailMan){ this.database = database; this.existsOutputBoundary = existsOutputBoundary; + this.mailManFactory = mailMan; } @Override public void register(String username, String password, String email) { @@ -31,7 +32,7 @@ public void register(String username, String password, String email) { @Override public void setCodeDeliveryMethod(String type) { - this.codeMailMan = new verificationMethodFactory().getVerificationMethod(type); + this.codeMailMan = mailManFactory.getVerificationMethod(type); } @Override diff --git a/src/main/java/use_cases/user_registration_use_cases/UserVerificationInputBoundary.java b/src/main/java/use_cases/user_registration_use_cases/UserVerificationInputBoundary.java index 1f2019e6..e9e707e4 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserVerificationInputBoundary.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserVerificationInputBoundary.java @@ -3,5 +3,5 @@ public interface UserVerificationInputBoundary { void setCode(int code); void setCredentials(String username, String password, String email); - void verify(String type, int code); + void verify(int code); } diff --git a/src/main/java/use_cases/user_registration_use_cases/UserVerificationInteractor.java b/src/main/java/use_cases/user_registration_use_cases/UserVerificationInteractor.java index fd54a61a..93446abe 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserVerificationInteractor.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserVerificationInteractor.java @@ -1,11 +1,6 @@ package use_cases.user_registration_use_cases; import data_access.Database; -import screens.login_screen.UserLoginUI; -import use_cases.user_login_use_cases.UserLoginInputBoundary; -import use_cases.user_login_use_cases.UserLoginInteractor; - -import java.util.Random; public class UserVerificationInteractor implements UserVerificationInputBoundary{ private final Database database; @@ -23,14 +18,12 @@ public UserVerificationInteractor(Database database, UserVerificationOutputBound } @Override - public void verify(String type, int code) { + public void verify(int code) { System.out.println(this.code); if(code == this.code){ database.createUser(this.username, this.password, this.email, "Basic"); - System.out.println("verified"); verificationOutputBoundary.getLoginCredentials(); }else{ - System.out.println("failure"); verificationOutputBoundary.cannotVerify(); } diff --git a/src/main/java/use_cases/user_registration_use_cases/UserVerificationOutputBoundary.java b/src/main/java/use_cases/user_registration_use_cases/UserVerificationOutputBoundary.java index 9db253b9..cde3797f 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserVerificationOutputBoundary.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserVerificationOutputBoundary.java @@ -1,10 +1,7 @@ package use_cases.user_registration_use_cases; -import use_cases.user_login_use_cases.UserLoginInputBoundary; - public interface UserVerificationOutputBoundary { void getLoginCredentials(); void cannotVerify(); - void setInputBoundary(UserLoginInputBoundary loginInteractor2); } diff --git a/src/test/java/test_user_registration/TestUserExistsInputBoundary.java b/src/test/java/test_user_registration/TestUserExistsInputBoundary.java index 3b224075..1ef4d6ba 100644 --- a/src/test/java/test_user_registration/TestUserExistsInputBoundary.java +++ b/src/test/java/test_user_registration/TestUserExistsInputBoundary.java @@ -2,60 +2,127 @@ import data_access.Database; import entities.user_entities.User; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import use_cases.user_registration_use_cases.ISendVerificationCode; +import use_cases.user_registration_use_cases.UserExistsInteractor; import use_cases.user_registration_use_cases.UserExistsOutputBoundary; +import use_cases.user_registration_use_cases.createMailMan; public class TestUserExistsInputBoundary { - @Test - public void invalidCredentials(){ - //Anonymous class - Database testDB = new Database() { - @Override - public User getUser(String username) { - return null; - } + //Objects used for testing + // The below anonymous database is created to test cases where the user does not exist. + Database userDontExist = new Database() { + @Override + public User getUser(String username) { + return null; + } - @Override - public void createUser(String username, String password, String email, String type) { - } + @Override + public void createUser(String username, String password, String email, String type) { - @Override - public boolean UserExists(String username, String email) { - return false; - } + } - @Override - public boolean UserExists(String username) { - return false; - } - }; - //Anonymous class for outputBoundary - UserExistsOutputBoundary outputBoundary = new UserExistsOutputBoundary() { - public int x; - @Override - public void getVerificationCredentials() { - x += 1; - } + @Override + public boolean UserExists(String username, String email) { + return false; + } + @Override + public boolean UserExists(String username) { + return false; + } + }; + //The below anonymous database for testing cases where the user exists + Database userExists = new Database() { + @Override + public User getUser(String username) { + return null; + } - @Override - public void presentUserExistsMessage() { - x += 3; - } + @Override + public void createUser(String username, String password, String email, String type) { - @Override - public void getCode(int code) { - x += 5; - } + } - @Override - public void getUserCredentials(String username, String password, String email) { - x += 6; - } - }; + @Override + public boolean UserExists(String username, String email) { + return true; + } + + @Override + public boolean UserExists(String username) { + return true; + } + }; + //This output boundary used in test cases + private class TestOutputBoundary implements UserExistsOutputBoundary{ + public int x = 0; + @Override + public void getVerificationCredentials() { + this.x += 1; + } + @Override + public void presentUserExistsMessage() { + this.x += 3; + } + @Override + public void getCode(int code) { + this.x += 5; + } + @Override + public void getUserCredentials(String username, String password, String email) { + this.x += 7; + } + } + TestOutputBoundary userExistsOutputBoundary = new TestOutputBoundary(); + //The verification streams, and verification Stream factory used for testing + ISendVerificationCode verStream1 = (email, code) -> { + + }; + ISendVerificationCode verStream2 = (email, code) -> { + + }; + private class TestCreateMailMan implements createMailMan{ + public int x; + @Override + public ISendVerificationCode getVerificationMethod(String type) { + if(type.equals("0")){ + x = 100; + return verStream1; + }else{ + x = 200; + return verStream2; + } + } + } + TestCreateMailMan mailManFactory = new TestCreateMailMan(); + //In the first test, the user exists in the database, and we will set verStream1 as the verification method + @Test + public void userExistsInDatabase1(){ + UserExistsInteractor uInteractor = new UserExistsInteractor(userExists, + userExistsOutputBoundary, mailManFactory); + uInteractor.setCodeDeliveryMethod("0"); + uInteractor.register("a", "b", "c"); + //The quantity below should be 103 + Assertions.assertEquals(userExistsOutputBoundary.x + mailManFactory.x, 103); } + //In this test, the user does not exist in the database, and we will set verStream2 as the verification method + @Test + public void userExistsInDatabase2(){ + TestOutputBoundary userExists2 = new TestOutputBoundary(); + TestCreateMailMan createMailMan2 = new TestCreateMailMan(); + UserExistsInteractor uInteractor2 = new UserExistsInteractor(userDontExist, userExists2, createMailMan2); + uInteractor2.setCodeDeliveryMethod("1"); + uInteractor2.register("a", "b", "c"); + //The quantity below should be 213 + Assertions.assertEquals(userExists2.x + createMailMan2.x, 213); + + } + + //No other combinations of the method calls, could arrive at those values, so the above tests passing suffices } diff --git a/src/test/java/test_user_registration/TestUserVerificationInputBoundary.java b/src/test/java/test_user_registration/TestUserVerificationInputBoundary.java new file mode 100644 index 00000000..6c91d65f --- /dev/null +++ b/src/test/java/test_user_registration/TestUserVerificationInputBoundary.java @@ -0,0 +1,68 @@ +package test_user_registration; + +import data_access.Database; +import entities.user_entities.User; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import use_cases.user_registration_use_cases.UserVerificationInteractor; +import use_cases.user_registration_use_cases.UserVerificationOutputBoundary; + +public class TestUserVerificationInputBoundary { + private class testDatabase implements Database{ + public int x; + @Override + public User getUser(String username) { + return null; + } + + @Override + public void createUser(String username, String password, String email, String type) { + x += 1; + } + + @Override + public boolean UserExists(String username, String email) { + return false; + } + + @Override + public boolean UserExists(String username) { + return false; + } + } + private class testUserVerificationOutputBdy implements UserVerificationOutputBoundary{ + public int x; + @Override + public void getLoginCredentials() { + x += 20; + } + + @Override + public void cannotVerify() { + x+= 30; + } + } + //objects used for test + testDatabase testDB = new testDatabase(); + testUserVerificationOutputBdy userVerificationOutputBdy = new testUserVerificationOutputBdy(); + //The below test is to see if the verify function works in the case that the code is not right + @Test + public void testCodeNotRight(){ + UserVerificationInteractor testInteractor = new UserVerificationInteractor(testDB, userVerificationOutputBdy); + + testInteractor.setCode(123); + testInteractor.setCredentials("a", "b", "c"); + testInteractor.verify(135); + Assertions.assertEquals(testDB.x + userVerificationOutputBdy.x, 30); + } + //The below test is to see if the verify function works in the case that the code is right + @Test + public void testCodeRight(){ + UserVerificationInteractor testInteractor = new UserVerificationInteractor(testDB, userVerificationOutputBdy); + + testInteractor.setCode(123); + testInteractor.setCredentials("a", "b", "c"); + testInteractor.verify(123); + Assertions.assertEquals(testDB.x + userVerificationOutputBdy.x, 21); + } +} From 922eeda1ebcc31764806170e89f38c30ee13bfc7 Mon Sep 17 00:00:00 2001 From: Madhavan7 Date: Thu, 1 Dec 2022 11:53:17 -0500 Subject: [PATCH 05/14] Refactored UserExistsInteractor so that it satisfies single responsibility principle --- .../UserRegistrationUI.java | 2 +- .../UserExistsInteractor.java | 14 +++++------ .../VerificationCodeDeliveryManager.java | 23 +++++++++++++++++++ 3 files changed, 30 insertions(+), 9 deletions(-) create mode 100644 src/main/java/use_cases/user_registration_use_cases/VerificationCodeDeliveryManager.java diff --git a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java index bb2cbd0f..242122e2 100644 --- a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java +++ b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java @@ -81,7 +81,7 @@ public void getUserCredentials(){ } public static void main(String[] args){ - Database testDB = new UserDatabase(new File("newAccounts")); + Database testDB = new UserDatabase(new File("newAccounts2")); UserLoginInputBoundary userLoginInteractor = new UserLoginInteractor(testDB); UserVerificationOutputBoundary loginUI = new UserLoginUI(userLoginInteractor); UserVerificationInputBoundary verificationInteractor = new UserVerificationInteractor(testDB, loginUI); diff --git a/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java b/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java index 6675bb0a..e9df31b1 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java @@ -5,26 +5,24 @@ import java.util.Random; public class UserExistsInteractor implements UserExistsInputBoundary{ - private final createMailMan mailManFactory; - //May need to refactor this using facade design pattern since this class has too many responsibilities. + private final VerificationCodeDeliveryManager verCodeDeliveryManager; Database database; UserExistsOutputBoundary existsOutputBoundary; - private ISendVerificationCode codeMailMan; - public UserExistsInteractor(Database database, UserExistsOutputBoundary existsOutputBoundary, createMailMan mailMan){ this.database = database; this.existsOutputBoundary = existsOutputBoundary; - this.mailManFactory = mailMan; + //The responsibility of dealing with verification is passed onto this class + this.verCodeDeliveryManager = new VerificationCodeDeliveryManager(mailMan); } @Override public void register(String username, String password, String email) { if(!database.UserExists(username, email)){ - int code = new Random().nextInt(12312341); + int code = this.verCodeDeliveryManager.getVerCode(); existsOutputBoundary.getCode(code); existsOutputBoundary.getUserCredentials(username, password, email); existsOutputBoundary.getVerificationCredentials(); - codeMailMan.sendVerificationCode(email, code); + this.verCodeDeliveryManager.deliverCode(email); }else{ existsOutputBoundary.presentUserExistsMessage(); } @@ -32,7 +30,7 @@ public void register(String username, String password, String email) { @Override public void setCodeDeliveryMethod(String type) { - this.codeMailMan = mailManFactory.getVerificationMethod(type); + this.verCodeDeliveryManager.setMailMan(type); } @Override diff --git a/src/main/java/use_cases/user_registration_use_cases/VerificationCodeDeliveryManager.java b/src/main/java/use_cases/user_registration_use_cases/VerificationCodeDeliveryManager.java new file mode 100644 index 00000000..5743c76e --- /dev/null +++ b/src/main/java/use_cases/user_registration_use_cases/VerificationCodeDeliveryManager.java @@ -0,0 +1,23 @@ +package use_cases.user_registration_use_cases; + +import java.util.Random; + +public class VerificationCodeDeliveryManager { + private final int code = new Random().nextInt(134134); + private final createMailMan mailManFactory; + private ISendVerificationCode mailMan; + public VerificationCodeDeliveryManager(createMailMan mailManFactory){ + this.mailManFactory = mailManFactory; + //By default, the type will be email. + this.setMailMan("Email"); + } + public void setMailMan(String type){ + this.mailMan = mailManFactory.getVerificationMethod(type); + } + public void deliverCode(String email){ + this.mailMan.sendVerificationCode(email, this.code); + } + public int getVerCode(){ + return this.code; + } +} From 5b517bfc9d933e3903d663e0018e6bf30994c682 Mon Sep 17 00:00:00 2001 From: Madhavan7 Date: Thu, 1 Dec 2022 17:43:38 -0500 Subject: [PATCH 06/14] Added comments to the code --- .../UserRegistrationUI.java | 8 ++++++- .../EmailDelivery.java | 12 ++++++---- .../ISendVerificationCode.java | 4 +++- .../PhoneDelivery.java | 8 +++++-- .../UserCreator.java | 3 +++ .../UserExists.java | 9 +++++++ .../UserExistsInputBoundary.java | 2 -- .../UserExistsInteractor.java | 24 ++++++++++++------- .../UserExistsOutputBoundary.java | 20 +++++++++++++++- .../VerificationCodeDeliveryManager.java | 16 ++++++++++++- .../createMailMan.java | 3 ++- 11 files changed, 87 insertions(+), 22 deletions(-) diff --git a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java index 242122e2..7bcf7361 100644 --- a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java +++ b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java @@ -26,6 +26,9 @@ public class UserRegistrationUI implements ActionListener, userRegCredentialsRet public UserRegistrationUI(UserExistsInputBoundary existsInputBoundary) { this.verifyUser = existsInputBoundary; } + /** + * Creates the frame on which the user inputs account registration credentials + * **/ @Override public void getUserCredentials(){ //Front end related objects @@ -97,6 +100,7 @@ public void actionPerformed(ActionEvent e) { String password = passwordText.getText(); String email = emailText.getText(); + // Makes sure that the credentials entered are of the correct format, may use regex to correct this if(username.equals("")|| password.equals("")|| email.equals("")){ missingCredentials(); }else{ @@ -105,7 +109,9 @@ public void actionPerformed(ActionEvent e) { verifyUser.register(username, password, email); } } - + /** + * The frame that shows up when the credentials entered are not of the right format + * **/ public void missingCredentials(){ JFrame credentialsMissing = new JFrame(); credentialsMissing.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); diff --git a/src/main/java/use_cases/user_registration_use_cases/EmailDelivery.java b/src/main/java/use_cases/user_registration_use_cases/EmailDelivery.java index 99000de5..8451ec3b 100644 --- a/src/main/java/use_cases/user_registration_use_cases/EmailDelivery.java +++ b/src/main/java/use_cases/user_registration_use_cases/EmailDelivery.java @@ -4,12 +4,15 @@ import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; - +/** + * This is the class that implements Email verification*/ public class EmailDelivery implements ISendVerificationCode { + /** + * The method that implements email verification + * @param email Email address + * @param code Verification Code + * */ public void sendVerificationCode(String email, int code){ - /*TODO: When this is implemented, the verification code will be sent to the email specified by String email*/ - System.out.println("Verification code sent to " + email); - //email address we will send the code to String to = email; @@ -42,7 +45,6 @@ protected PasswordAuthentication getPasswordAuthentication() { message.setText("The verification code for your account is " + code + ". If this was not you, you can safely " + "ignore this email"); Transport.send(message); - System.out.println("success"); } catch (MessagingException e) { throw new RuntimeException(e); } diff --git a/src/main/java/use_cases/user_registration_use_cases/ISendVerificationCode.java b/src/main/java/use_cases/user_registration_use_cases/ISendVerificationCode.java index 3e417944..f8a5d145 100644 --- a/src/main/java/use_cases/user_registration_use_cases/ISendVerificationCode.java +++ b/src/main/java/use_cases/user_registration_use_cases/ISendVerificationCode.java @@ -1,5 +1,7 @@ package use_cases.user_registration_use_cases; -//This is an output boundary object for the user registration use case. +/** + * Interface that has a method which represents the sending of the verification code to the user + * */ public interface ISendVerificationCode { void sendVerificationCode(String email, int code); } diff --git a/src/main/java/use_cases/user_registration_use_cases/PhoneDelivery.java b/src/main/java/use_cases/user_registration_use_cases/PhoneDelivery.java index 007f1bfa..78a583dd 100644 --- a/src/main/java/use_cases/user_registration_use_cases/PhoneDelivery.java +++ b/src/main/java/use_cases/user_registration_use_cases/PhoneDelivery.java @@ -1,8 +1,12 @@ package use_cases.user_registration_use_cases; -import use_cases.user_registration_use_cases.ISendVerificationCode; - +/** + * Class that represents Phone verification. Currently unimplemented + * */ public class PhoneDelivery implements ISendVerificationCode { + /** + * The function that is supposed to implement phone verification. Currently unimplemented + * */ public void sendVerificationCode(String phoneNumber, int code){ /*TODO: When this is implemented properly, the verification code will be sent to phone number specified by * String phoneNumber*/ diff --git a/src/main/java/use_cases/user_registration_use_cases/UserCreator.java b/src/main/java/use_cases/user_registration_use_cases/UserCreator.java index a18204dd..437fd4b4 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserCreator.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserCreator.java @@ -1,5 +1,8 @@ package use_cases.user_registration_use_cases; +/** + * Interface that has a method which represents the creation of a user + * */ public interface UserCreator { void createUser(String username, String password, String email, String type); } diff --git a/src/main/java/use_cases/user_registration_use_cases/UserExists.java b/src/main/java/use_cases/user_registration_use_cases/UserExists.java index 16c744d6..68e4c874 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserExists.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserExists.java @@ -1,6 +1,15 @@ package use_cases.user_registration_use_cases; public interface UserExists { + /** + * Method that checks if a user exists in the database + * @param email Email address of the user + * @param username Username of the user + * */ boolean UserExists(String username, String email); + /** + * Method that checks if a user exists in the database + * @param username Username of the user + * */ boolean UserExists(String username); } diff --git a/src/main/java/use_cases/user_registration_use_cases/UserExistsInputBoundary.java b/src/main/java/use_cases/user_registration_use_cases/UserExistsInputBoundary.java index 5491a0ce..3584c812 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserExistsInputBoundary.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserExistsInputBoundary.java @@ -4,6 +4,4 @@ public interface UserExistsInputBoundary { void register(String username, String password, String email); void setCodeDeliveryMethod(String type); - - void setOutputBoundary(UserExistsOutputBoundary existsOutputBoundary); } diff --git a/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java b/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java index e9df31b1..54d684de 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java @@ -2,8 +2,10 @@ import data_access.Database; -import java.util.Random; - +/** + * This is the class responsible for getting processing the input given by user, and either allowing verification, + * presenting the 'user exists' message, and sending the verification code, depending on the business logic + * */ public class UserExistsInteractor implements UserExistsInputBoundary{ private final VerificationCodeDeliveryManager verCodeDeliveryManager; Database database; @@ -15,9 +17,17 @@ public UserExistsInteractor(Database database, UserExistsOutputBoundary existsOu //The responsibility of dealing with verification is passed onto this class this.verCodeDeliveryManager = new VerificationCodeDeliveryManager(mailMan); } + /** + * Proceeds to verification and sends code, or presents an error message, depending on whether a user with + * such credentials is in the database. + * @param username Username + * @param email Email + * @param password Password + * */ @Override public void register(String username, String password, String email) { if(!database.UserExists(username, email)){ + //This may need to change if verCodeDeliveryManager decides not to create integer codes. int code = this.verCodeDeliveryManager.getVerCode(); existsOutputBoundary.getCode(code); existsOutputBoundary.getUserCredentials(username, password, email); @@ -27,14 +37,12 @@ public void register(String username, String password, String email) { existsOutputBoundary.presentUserExistsMessage(); } } - + /** + * Sets the verification stream given by the user, to send the code + * @param type The verification stream + * */ @Override public void setCodeDeliveryMethod(String type) { this.verCodeDeliveryManager.setMailMan(type); } - - @Override - public void setOutputBoundary(UserExistsOutputBoundary existsOutputBoundary) { - this.existsOutputBoundary = existsOutputBoundary; - } } diff --git a/src/main/java/use_cases/user_registration_use_cases/UserExistsOutputBoundary.java b/src/main/java/use_cases/user_registration_use_cases/UserExistsOutputBoundary.java index e3104eb0..a2cab656 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserExistsOutputBoundary.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserExistsOutputBoundary.java @@ -1,8 +1,26 @@ package use_cases.user_registration_use_cases; - +/** + * Presenter interface that presents information, or gets input from user + * */ public interface UserExistsOutputBoundary { + /** + * Gets the verification code from the user + * */ void getVerificationCredentials(); + /** + * Presents that the user exists in the database + * */ void presentUserExistsMessage(); + /** + * Gets the code from the input boundary object + * @param code Verification code + * */ void getCode(int code); + /** + * Gets the user credentials from the input boundary object + * @param email Email address of the user + * @param password Password of the user + * @param username Username of the user + * */ void getUserCredentials(String username, String password, String email); } diff --git a/src/main/java/use_cases/user_registration_use_cases/VerificationCodeDeliveryManager.java b/src/main/java/use_cases/user_registration_use_cases/VerificationCodeDeliveryManager.java index 5743c76e..37aaedff 100644 --- a/src/main/java/use_cases/user_registration_use_cases/VerificationCodeDeliveryManager.java +++ b/src/main/java/use_cases/user_registration_use_cases/VerificationCodeDeliveryManager.java @@ -1,7 +1,10 @@ package use_cases.user_registration_use_cases; import java.util.Random; - +/** + * This class is responsible for managing aspects related to verification, such as creating the verification code + * and sending the code to the user + * */ public class VerificationCodeDeliveryManager { private final int code = new Random().nextInt(134134); private final createMailMan mailManFactory; @@ -11,12 +14,23 @@ public VerificationCodeDeliveryManager(createMailMan mailManFactory){ //By default, the type will be email. this.setMailMan("Email"); } + /** + * Sets the verification stream + * @param type String that represents how the code is delivered + * */ public void setMailMan(String type){ this.mailMan = mailManFactory.getVerificationMethod(type); } + /** + * Sends the verification code + * @param email Represents the email + * */ public void deliverCode(String email){ this.mailMan.sendVerificationCode(email, this.code); } + /** + * returns the verification code + * */ public int getVerCode(){ return this.code; } diff --git a/src/main/java/use_cases/user_registration_use_cases/createMailMan.java b/src/main/java/use_cases/user_registration_use_cases/createMailMan.java index 0ae141dd..8a1f71dd 100644 --- a/src/main/java/use_cases/user_registration_use_cases/createMailMan.java +++ b/src/main/java/use_cases/user_registration_use_cases/createMailMan.java @@ -1,5 +1,6 @@ package use_cases.user_registration_use_cases; - +/** + * Interface that has a method which represents the creation of objects that can send verification code*/ public interface createMailMan { ISendVerificationCode getVerificationMethod(String type); } From aa560c535e7cfe575c34ff2bba6a17f27e4dca65 Mon Sep 17 00:00:00 2001 From: Madhavan7 Date: Thu, 1 Dec 2022 18:08:28 -0500 Subject: [PATCH 07/14] Added comments to the code --- .../UserVerificationScreen.java | 22 +++++++++++++++---- .../UserVerificationInteractor.java | 14 +++++++++--- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/main/java/screens/user_registration_screen/UserVerificationScreen.java b/src/main/java/screens/user_registration_screen/UserVerificationScreen.java index f15b095c..d15722b1 100644 --- a/src/main/java/screens/user_registration_screen/UserVerificationScreen.java +++ b/src/main/java/screens/user_registration_screen/UserVerificationScreen.java @@ -4,7 +4,10 @@ import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; - +/** + * This is the class that is responsible for retrieving the verification code form the user, or presenting if + * verification is not possible + * */ public class UserVerificationScreen implements UserExistsOutputBoundary, ActionListener { private final JTextField verText = new JTextField(20); private final UserVerificationInputBoundary verificationInputBoundary; @@ -16,7 +19,9 @@ public class UserVerificationScreen implements UserExistsOutputBoundary, ActionL public UserVerificationScreen(UserVerificationInputBoundary verificationInputBoundary){ this.verificationInputBoundary = verificationInputBoundary; } - + /** + * This method asks for the code from the user + * */ @Override public void getVerificationCredentials() { JFrame verificationFrame = new JFrame(); @@ -39,7 +44,9 @@ public void getVerificationCredentials() { verificationPanel.add(verifyButton); verificationFrame.setVisible(true); } - + /** + * This method presents that verification is not possible, because the user exists in the database + * */ @Override public void presentUserExistsMessage() { JFrame userExistsFrame = new JFrame(); @@ -54,12 +61,19 @@ public void presentUserExistsMessage() { userExistsPanel.add(accountExists); userExistsFrame.setVisible(true); } - + /** + * Retrieves code from the input boundary, to set the code onto the other input boundary in the constructor + * @param code verification code + * */ @Override public void getCode(int code) { this.code = code; } + /** + * Retrieves user credentials from the input boundary, in order to set the credentials onto the other input + * boundary in the constructor + * */ @Override public void getUserCredentials(String username, String password, String email) { this.username = username; diff --git a/src/main/java/use_cases/user_registration_use_cases/UserVerificationInteractor.java b/src/main/java/use_cases/user_registration_use_cases/UserVerificationInteractor.java index 93446abe..a31e51e9 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserVerificationInteractor.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserVerificationInteractor.java @@ -16,7 +16,11 @@ public UserVerificationInteractor(Database database, UserVerificationOutputBound this.database = database; this.verificationOutputBoundary = verificationOutputBoundary; } - + /** + * Compares code with this.code, if they match, the program will proceed to ask for login credentials + * Else, it will present a message that verification is not possible + * @param code code inputted by the user + * */ @Override public void verify(int code) { System.out.println(this.code); @@ -28,12 +32,16 @@ public void verify(int code) { } } - + /** + * Sets the code to compare for verification + * @param code verification code*/ @Override public void setCode(int code) { this.code = code; } - + /** + * Sets the user credentials for this object + * */ public void setCredentials(String username, String password, String email){ this.username = username; this.password = password; From d07586b0577e31fea1371395bb7efa2d068a87b3 Mon Sep 17 00:00:00 2001 From: Madhavan7 Date: Fri, 2 Dec 2022 02:45:55 -0500 Subject: [PATCH 08/14] Refactoring --- src/main/java/screens/login_screen/UserLoginUI.java | 6 +++--- .../UserRegistrationUI.java | 13 ++++++------- .../UserVerificationScreen.java | 4 ++-- ...LoginInteractor.java => UserLoginPresenter.java} | 9 +++------ .../UserExistsInputBoundary.java | 7 ------- ...istsInteractor.java => UserExistsPresenter.java} | 7 +++---- .../UserVerificationInputBoundary.java | 7 ------- ...teractor.java => UserVerificationPresenter.java} | 6 ++---- ...tBoundary.java => TestUserExistsInteractor.java} | 8 ++++---- ...ary.java => TestUserVerificationInteractor.java} | 8 ++++---- 10 files changed, 27 insertions(+), 48 deletions(-) rename src/main/java/use_cases/user_login_use_cases/{UserLoginInteractor.java => UserLoginPresenter.java} (76%) delete mode 100644 src/main/java/use_cases/user_registration_use_cases/UserExistsInputBoundary.java rename src/main/java/use_cases/user_registration_use_cases/{UserExistsInteractor.java => UserExistsPresenter.java} (89%) delete mode 100644 src/main/java/use_cases/user_registration_use_cases/UserVerificationInputBoundary.java rename src/main/java/use_cases/user_registration_use_cases/{UserVerificationInteractor.java => UserVerificationPresenter.java} (86%) rename src/test/java/test_user_registration/{TestUserExistsInputBoundary.java => TestUserExistsInteractor.java} (92%) rename src/test/java/test_user_registration/{TestUserVerificationInputBoundary.java => TestUserVerificationInteractor.java} (84%) diff --git a/src/main/java/screens/login_screen/UserLoginUI.java b/src/main/java/screens/login_screen/UserLoginUI.java index 6d4140dd..444c2b9f 100644 --- a/src/main/java/screens/login_screen/UserLoginUI.java +++ b/src/main/java/screens/login_screen/UserLoginUI.java @@ -1,5 +1,5 @@ package screens.login_screen; -import use_cases.user_login_use_cases.UserLoginInputBoundary; +import use_cases.user_login_use_cases.UserLoginPresenter; import use_cases.user_registration_use_cases.UserVerificationOutputBoundary; import javax.swing.*; @@ -9,11 +9,11 @@ /** This is the screen on which the user enters his credentials in order to login **/ public class UserLoginUI implements ActionListener, UserVerificationOutputBoundary { - private final UserLoginInputBoundary loginInteractor; + private final UserLoginPresenter loginInteractor; JTextField credentialText; JPasswordField passwordText; - public UserLoginUI(UserLoginInputBoundary loginInteractor){ + public UserLoginUI(UserLoginPresenter loginInteractor){ this.loginInteractor = loginInteractor; } @Override diff --git a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java index 7bcf7361..cfab2d00 100644 --- a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java +++ b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java @@ -2,8 +2,7 @@ import data_access.Database; import data_access.UserDatabase; import screens.login_screen.UserLoginUI; -import use_cases.user_login_use_cases.UserLoginInputBoundary; -import use_cases.user_login_use_cases.UserLoginInteractor; +import use_cases.user_login_use_cases.UserLoginPresenter; import use_cases.user_registration_use_cases.*; import javax.swing.*; @@ -13,7 +12,7 @@ /** This is screen on which the User enters his credentials in order to login**/ public class UserRegistrationUI implements ActionListener, userRegCredentialsRetriever { - private final UserExistsInputBoundary verifyUser; + private final UserExistsPresenter verifyUser; private JTextField usernameText; private JTextField passwordText; private JTextField emailText; @@ -23,7 +22,7 @@ public class UserRegistrationUI implements ActionListener, userRegCredentialsRet */ private JTextField deliveryText; - public UserRegistrationUI(UserExistsInputBoundary existsInputBoundary) { + public UserRegistrationUI(UserExistsPresenter existsInputBoundary) { this.verifyUser = existsInputBoundary; } /** @@ -85,11 +84,11 @@ public void getUserCredentials(){ public static void main(String[] args){ Database testDB = new UserDatabase(new File("newAccounts2")); - UserLoginInputBoundary userLoginInteractor = new UserLoginInteractor(testDB); + UserLoginPresenter userLoginInteractor = new UserLoginPresenter(testDB); UserVerificationOutputBoundary loginUI = new UserLoginUI(userLoginInteractor); - UserVerificationInputBoundary verificationInteractor = new UserVerificationInteractor(testDB, loginUI); + UserVerificationPresenter verificationInteractor = new UserVerificationPresenter(testDB, loginUI); UserExistsOutputBoundary verificationScreen = new UserVerificationScreen(verificationInteractor); - UserExistsInputBoundary existsInteractor = new UserExistsInteractor(testDB, verificationScreen, new verificationMethodFactory()); + UserExistsPresenter existsInteractor = new UserExistsPresenter(testDB, verificationScreen, new verificationMethodFactory()); UserRegistrationUI testUI = new UserRegistrationUI(existsInteractor); testUI.getUserCredentials(); diff --git a/src/main/java/screens/user_registration_screen/UserVerificationScreen.java b/src/main/java/screens/user_registration_screen/UserVerificationScreen.java index d15722b1..26338b54 100644 --- a/src/main/java/screens/user_registration_screen/UserVerificationScreen.java +++ b/src/main/java/screens/user_registration_screen/UserVerificationScreen.java @@ -10,13 +10,13 @@ * */ public class UserVerificationScreen implements UserExistsOutputBoundary, ActionListener { private final JTextField verText = new JTextField(20); - private final UserVerificationInputBoundary verificationInputBoundary; + private final UserVerificationPresenter verificationInputBoundary; private int code; private String username; private String password; private String email; - public UserVerificationScreen(UserVerificationInputBoundary verificationInputBoundary){ + public UserVerificationScreen(UserVerificationPresenter verificationInputBoundary){ this.verificationInputBoundary = verificationInputBoundary; } /** diff --git a/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor.java b/src/main/java/use_cases/user_login_use_cases/UserLoginPresenter.java similarity index 76% rename from src/main/java/use_cases/user_login_use_cases/UserLoginInteractor.java rename to src/main/java/use_cases/user_login_use_cases/UserLoginPresenter.java index 030e40da..670f6cf3 100644 --- a/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor.java +++ b/src/main/java/use_cases/user_login_use_cases/UserLoginPresenter.java @@ -2,21 +2,19 @@ import data_access.Database; import entities.user_entities.User; -import use_cases.user_registration_use_cases.UserVerificationOutputBoundary; -public class UserLoginInteractor implements UserLoginInputBoundary{ +public class UserLoginPresenter { private String username; private String password; private User user; Database database; - public UserLoginInteractor(Database database){ + public UserLoginPresenter(Database database){ this.database = database; } - @Override public void tryLogin() { try{ - //TODO: issues here with serialization + //TODO: issues here with serialization, and dependency inversion user = database.getUser(username); if(user.PasswordMatch(this.password)){ user.login(); @@ -30,7 +28,6 @@ public void tryLogin() { } - @Override public void setLoginCredentials(String username, String password) { this.username = username; this.password = password; diff --git a/src/main/java/use_cases/user_registration_use_cases/UserExistsInputBoundary.java b/src/main/java/use_cases/user_registration_use_cases/UserExistsInputBoundary.java deleted file mode 100644 index 3584c812..00000000 --- a/src/main/java/use_cases/user_registration_use_cases/UserExistsInputBoundary.java +++ /dev/null @@ -1,7 +0,0 @@ -package use_cases.user_registration_use_cases; - -public interface UserExistsInputBoundary { - - void register(String username, String password, String email); - void setCodeDeliveryMethod(String type); -} diff --git a/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java b/src/main/java/use_cases/user_registration_use_cases/UserExistsPresenter.java similarity index 89% rename from src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java rename to src/main/java/use_cases/user_registration_use_cases/UserExistsPresenter.java index 54d684de..685f296a 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserExistsInteractor.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserExistsPresenter.java @@ -6,12 +6,12 @@ * This is the class responsible for getting processing the input given by user, and either allowing verification, * presenting the 'user exists' message, and sending the verification code, depending on the business logic * */ -public class UserExistsInteractor implements UserExistsInputBoundary{ +public class UserExistsPresenter { private final VerificationCodeDeliveryManager verCodeDeliveryManager; Database database; UserExistsOutputBoundary existsOutputBoundary; - public UserExistsInteractor(Database database, UserExistsOutputBoundary existsOutputBoundary, createMailMan mailMan){ + public UserExistsPresenter(Database database, UserExistsOutputBoundary existsOutputBoundary, createMailMan mailMan){ this.database = database; this.existsOutputBoundary = existsOutputBoundary; //The responsibility of dealing with verification is passed onto this class @@ -24,7 +24,7 @@ public UserExistsInteractor(Database database, UserExistsOutputBoundary existsOu * @param email Email * @param password Password * */ - @Override + public void register(String username, String password, String email) { if(!database.UserExists(username, email)){ //This may need to change if verCodeDeliveryManager decides not to create integer codes. @@ -41,7 +41,6 @@ public void register(String username, String password, String email) { * Sets the verification stream given by the user, to send the code * @param type The verification stream * */ - @Override public void setCodeDeliveryMethod(String type) { this.verCodeDeliveryManager.setMailMan(type); } diff --git a/src/main/java/use_cases/user_registration_use_cases/UserVerificationInputBoundary.java b/src/main/java/use_cases/user_registration_use_cases/UserVerificationInputBoundary.java deleted file mode 100644 index e9e707e4..00000000 --- a/src/main/java/use_cases/user_registration_use_cases/UserVerificationInputBoundary.java +++ /dev/null @@ -1,7 +0,0 @@ -package use_cases.user_registration_use_cases; - -public interface UserVerificationInputBoundary { - void setCode(int code); - void setCredentials(String username, String password, String email); - void verify(int code); -} diff --git a/src/main/java/use_cases/user_registration_use_cases/UserVerificationInteractor.java b/src/main/java/use_cases/user_registration_use_cases/UserVerificationPresenter.java similarity index 86% rename from src/main/java/use_cases/user_registration_use_cases/UserVerificationInteractor.java rename to src/main/java/use_cases/user_registration_use_cases/UserVerificationPresenter.java index a31e51e9..c8cf615b 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserVerificationInteractor.java +++ b/src/main/java/use_cases/user_registration_use_cases/UserVerificationPresenter.java @@ -2,7 +2,7 @@ import data_access.Database; -public class UserVerificationInteractor implements UserVerificationInputBoundary{ +public class UserVerificationPresenter { private final Database database; private String username; private String password; @@ -12,7 +12,7 @@ public class UserVerificationInteractor implements UserVerificationInputBoundary private int code; - public UserVerificationInteractor(Database database, UserVerificationOutputBoundary verificationOutputBoundary){ + public UserVerificationPresenter(Database database, UserVerificationOutputBoundary verificationOutputBoundary){ this.database = database; this.verificationOutputBoundary = verificationOutputBoundary; } @@ -21,7 +21,6 @@ public UserVerificationInteractor(Database database, UserVerificationOutputBound * Else, it will present a message that verification is not possible * @param code code inputted by the user * */ - @Override public void verify(int code) { System.out.println(this.code); if(code == this.code){ @@ -35,7 +34,6 @@ public void verify(int code) { /** * Sets the code to compare for verification * @param code verification code*/ - @Override public void setCode(int code) { this.code = code; } diff --git a/src/test/java/test_user_registration/TestUserExistsInputBoundary.java b/src/test/java/test_user_registration/TestUserExistsInteractor.java similarity index 92% rename from src/test/java/test_user_registration/TestUserExistsInputBoundary.java rename to src/test/java/test_user_registration/TestUserExistsInteractor.java index 1ef4d6ba..f17e4640 100644 --- a/src/test/java/test_user_registration/TestUserExistsInputBoundary.java +++ b/src/test/java/test_user_registration/TestUserExistsInteractor.java @@ -5,11 +5,11 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import use_cases.user_registration_use_cases.ISendVerificationCode; -import use_cases.user_registration_use_cases.UserExistsInteractor; +import use_cases.user_registration_use_cases.UserExistsPresenter; import use_cases.user_registration_use_cases.UserExistsOutputBoundary; import use_cases.user_registration_use_cases.createMailMan; -public class TestUserExistsInputBoundary { +public class TestUserExistsInteractor { //Objects used for testing // The below anonymous database is created to test cases where the user does not exist. Database userDontExist = new Database() { @@ -103,7 +103,7 @@ public ISendVerificationCode getVerificationMethod(String type) { //In the first test, the user exists in the database, and we will set verStream1 as the verification method @Test public void userExistsInDatabase1(){ - UserExistsInteractor uInteractor = new UserExistsInteractor(userExists, + UserExistsPresenter uInteractor = new UserExistsPresenter(userExists, userExistsOutputBoundary, mailManFactory); uInteractor.setCodeDeliveryMethod("0"); uInteractor.register("a", "b", "c"); @@ -116,7 +116,7 @@ public void userExistsInDatabase1(){ public void userExistsInDatabase2(){ TestOutputBoundary userExists2 = new TestOutputBoundary(); TestCreateMailMan createMailMan2 = new TestCreateMailMan(); - UserExistsInteractor uInteractor2 = new UserExistsInteractor(userDontExist, userExists2, createMailMan2); + UserExistsPresenter uInteractor2 = new UserExistsPresenter(userDontExist, userExists2, createMailMan2); uInteractor2.setCodeDeliveryMethod("1"); uInteractor2.register("a", "b", "c"); //The quantity below should be 213 diff --git a/src/test/java/test_user_registration/TestUserVerificationInputBoundary.java b/src/test/java/test_user_registration/TestUserVerificationInteractor.java similarity index 84% rename from src/test/java/test_user_registration/TestUserVerificationInputBoundary.java rename to src/test/java/test_user_registration/TestUserVerificationInteractor.java index 6c91d65f..bc5fba0d 100644 --- a/src/test/java/test_user_registration/TestUserVerificationInputBoundary.java +++ b/src/test/java/test_user_registration/TestUserVerificationInteractor.java @@ -4,10 +4,10 @@ import entities.user_entities.User; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import use_cases.user_registration_use_cases.UserVerificationInteractor; +import use_cases.user_registration_use_cases.UserVerificationPresenter; import use_cases.user_registration_use_cases.UserVerificationOutputBoundary; -public class TestUserVerificationInputBoundary { +public class TestUserVerificationInteractor { private class testDatabase implements Database{ public int x; @Override @@ -48,7 +48,7 @@ public void cannotVerify() { //The below test is to see if the verify function works in the case that the code is not right @Test public void testCodeNotRight(){ - UserVerificationInteractor testInteractor = new UserVerificationInteractor(testDB, userVerificationOutputBdy); + UserVerificationPresenter testInteractor = new UserVerificationPresenter(testDB, userVerificationOutputBdy); testInteractor.setCode(123); testInteractor.setCredentials("a", "b", "c"); @@ -58,7 +58,7 @@ public void testCodeNotRight(){ //The below test is to see if the verify function works in the case that the code is right @Test public void testCodeRight(){ - UserVerificationInteractor testInteractor = new UserVerificationInteractor(testDB, userVerificationOutputBdy); + UserVerificationPresenter testInteractor = new UserVerificationPresenter(testDB, userVerificationOutputBdy); testInteractor.setCode(123); testInteractor.setCredentials("a", "b", "c"); From aa10e64e65296f32834de6aa9f7aab70124d0c9e Mon Sep 17 00:00:00 2001 From: Madhavan7 Date: Fri, 2 Dec 2022 06:35:49 -0500 Subject: [PATCH 09/14] Massive Refactoring, implemented Login Use case according to the MVP pattern --- .../UserChatsPresenter.java | 53 +++++++++++++++++++ .../UserLoginPresenter.java | 32 +++++++++++ .../UserLoginViewI.java | 8 +++ .../UserExistsOutputView.java} | 4 +- .../UserExistsPresenter.java | 8 +-- .../UserVerificationOutputView.java | 7 +++ .../UserVerificationPresenter.java | 6 +-- .../userRegCredentialsRetriever.java | 2 +- .../login_screen/AppScreenCreator.java | 37 +++++++++++++ .../screens/login_screen/UserLoginUI.java | 33 +++++++++--- .../UserRegistrationUI.java | 12 +++-- .../UserVerificationScreen.java | 5 +- .../UserLoginInputBoundary.java | 5 +- .../UserLoginInteractor2.java | 34 ++++++++++++ .../UserLoginOutputBoundary.java | 15 ++++++ .../UserLoginPresenter.java | 36 ------------- .../UserVerificationOutputBoundary.java | 7 --- .../TestUserExistsInteractor.java | 6 +-- .../TestUserVerificationInteractor.java | 6 +-- 19 files changed, 242 insertions(+), 74 deletions(-) create mode 100644 src/main/java/interface_adapters/login_interface_adapters/UserChatsPresenter.java create mode 100644 src/main/java/interface_adapters/login_interface_adapters/UserLoginPresenter.java create mode 100644 src/main/java/interface_adapters/login_interface_adapters/UserLoginViewI.java rename src/main/java/{use_cases/user_registration_use_cases/UserExistsOutputBoundary.java => interface_adapters/user_registration_interface_adapters/UserExistsOutputView.java} (87%) rename src/main/java/{use_cases/user_registration_use_cases => interface_adapters/user_registration_interface_adapters}/UserExistsPresenter.java (86%) create mode 100644 src/main/java/interface_adapters/user_registration_interface_adapters/UserVerificationOutputView.java rename src/main/java/{use_cases/user_registration_use_cases => interface_adapters/user_registration_interface_adapters}/UserVerificationPresenter.java (88%) rename src/main/java/{use_cases/user_registration_use_cases => interface_adapters/user_registration_interface_adapters}/userRegCredentialsRetriever.java (55%) create mode 100644 src/main/java/screens/login_screen/AppScreenCreator.java create mode 100644 src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java create mode 100644 src/main/java/use_cases/user_login_use_cases/UserLoginOutputBoundary.java delete mode 100644 src/main/java/use_cases/user_login_use_cases/UserLoginPresenter.java delete mode 100644 src/main/java/use_cases/user_registration_use_cases/UserVerificationOutputBoundary.java diff --git a/src/main/java/interface_adapters/login_interface_adapters/UserChatsPresenter.java b/src/main/java/interface_adapters/login_interface_adapters/UserChatsPresenter.java new file mode 100644 index 00000000..2bc4876f --- /dev/null +++ b/src/main/java/interface_adapters/login_interface_adapters/UserChatsPresenter.java @@ -0,0 +1,53 @@ +package interface_adapters.login_interface_adapters; + +import use_cases.user_login_use_cases.UserLoginOutputBoundary; + +import java.util.ArrayList; +import java.util.List; + +public class UserChatsPresenter implements UserLoginOutputBoundary { + private List chats; + private boolean notExists; + private boolean notMatched; + private String username; + + public UserChatsPresenter(){ + this.chats = new ArrayList<>(); + } + + @Override + public void setUsername(String username) { + this.username = username; + } + + @Override + public void setChats(List chats) { + this.chats = chats; + } + public List getChats(){ + return this.chats; + } + + @Override + public void setUserNotExists(boolean notExists) { + this.notExists = notExists; + } + + public boolean isNotExists() { + return notExists; + } + + @Override + public void setPasswordNotMatched(boolean notMatched) { + this.notMatched = notMatched; + } + + @Override + public String getUsername() { + return this.username; + } + + public boolean isNotMatched() { + return notMatched; + } +} diff --git a/src/main/java/interface_adapters/login_interface_adapters/UserLoginPresenter.java b/src/main/java/interface_adapters/login_interface_adapters/UserLoginPresenter.java new file mode 100644 index 00000000..1007a623 --- /dev/null +++ b/src/main/java/interface_adapters/login_interface_adapters/UserLoginPresenter.java @@ -0,0 +1,32 @@ +package interface_adapters.login_interface_adapters; + +import data_access.Database; +import use_cases.user_login_use_cases.UserLoginInputBoundary; + +public class UserLoginPresenter { + private final UserLoginInputBoundary loginGuard; + private String username; + private String password; + Database database; + private UserLoginViewI loginView; + + public UserLoginPresenter(Database database, UserLoginInputBoundary loginGuard){ + this.database = database; + this.loginGuard = loginGuard; + } + + public void tryLogin() { + loginGuard.login(this.username, this.password); + loginView.setChatsPresenter(loginGuard.getChatsPresenter()); + loginView.display(); + } + + public void setLoginCredentials(String username, String password) { + this.username = username; + this.password = password; + } + public void setLoginView(UserLoginViewI loginView){ + this.loginView = loginView; + } + +} diff --git a/src/main/java/interface_adapters/login_interface_adapters/UserLoginViewI.java b/src/main/java/interface_adapters/login_interface_adapters/UserLoginViewI.java new file mode 100644 index 00000000..5c585f10 --- /dev/null +++ b/src/main/java/interface_adapters/login_interface_adapters/UserLoginViewI.java @@ -0,0 +1,8 @@ +package interface_adapters.login_interface_adapters; + +import use_cases.user_login_use_cases.UserLoginOutputBoundary; + +public interface UserLoginViewI { + void display(); + void setChatsPresenter(UserLoginOutputBoundary outputBoundary); +} diff --git a/src/main/java/use_cases/user_registration_use_cases/UserExistsOutputBoundary.java b/src/main/java/interface_adapters/user_registration_interface_adapters/UserExistsOutputView.java similarity index 87% rename from src/main/java/use_cases/user_registration_use_cases/UserExistsOutputBoundary.java rename to src/main/java/interface_adapters/user_registration_interface_adapters/UserExistsOutputView.java index a2cab656..5f4ab589 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserExistsOutputBoundary.java +++ b/src/main/java/interface_adapters/user_registration_interface_adapters/UserExistsOutputView.java @@ -1,8 +1,8 @@ -package use_cases.user_registration_use_cases; +package interface_adapters.user_registration_interface_adapters; /** * Presenter interface that presents information, or gets input from user * */ -public interface UserExistsOutputBoundary { +public interface UserExistsOutputView { /** * Gets the verification code from the user * */ diff --git a/src/main/java/use_cases/user_registration_use_cases/UserExistsPresenter.java b/src/main/java/interface_adapters/user_registration_interface_adapters/UserExistsPresenter.java similarity index 86% rename from src/main/java/use_cases/user_registration_use_cases/UserExistsPresenter.java rename to src/main/java/interface_adapters/user_registration_interface_adapters/UserExistsPresenter.java index 685f296a..203ab6dc 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserExistsPresenter.java +++ b/src/main/java/interface_adapters/user_registration_interface_adapters/UserExistsPresenter.java @@ -1,6 +1,8 @@ -package use_cases.user_registration_use_cases; +package interface_adapters.user_registration_interface_adapters; import data_access.Database; +import use_cases.user_registration_use_cases.VerificationCodeDeliveryManager; +import use_cases.user_registration_use_cases.createMailMan; /** * This is the class responsible for getting processing the input given by user, and either allowing verification, @@ -9,9 +11,9 @@ public class UserExistsPresenter { private final VerificationCodeDeliveryManager verCodeDeliveryManager; Database database; - UserExistsOutputBoundary existsOutputBoundary; + UserExistsOutputView existsOutputBoundary; - public UserExistsPresenter(Database database, UserExistsOutputBoundary existsOutputBoundary, createMailMan mailMan){ + public UserExistsPresenter(Database database, UserExistsOutputView existsOutputBoundary, createMailMan mailMan){ this.database = database; this.existsOutputBoundary = existsOutputBoundary; //The responsibility of dealing with verification is passed onto this class diff --git a/src/main/java/interface_adapters/user_registration_interface_adapters/UserVerificationOutputView.java b/src/main/java/interface_adapters/user_registration_interface_adapters/UserVerificationOutputView.java new file mode 100644 index 00000000..cee1b432 --- /dev/null +++ b/src/main/java/interface_adapters/user_registration_interface_adapters/UserVerificationOutputView.java @@ -0,0 +1,7 @@ +package interface_adapters.user_registration_interface_adapters; + +public interface UserVerificationOutputView { + void getLoginCredentials(); + void cannotVerify(); + +} diff --git a/src/main/java/use_cases/user_registration_use_cases/UserVerificationPresenter.java b/src/main/java/interface_adapters/user_registration_interface_adapters/UserVerificationPresenter.java similarity index 88% rename from src/main/java/use_cases/user_registration_use_cases/UserVerificationPresenter.java rename to src/main/java/interface_adapters/user_registration_interface_adapters/UserVerificationPresenter.java index c8cf615b..b194f2ec 100644 --- a/src/main/java/use_cases/user_registration_use_cases/UserVerificationPresenter.java +++ b/src/main/java/interface_adapters/user_registration_interface_adapters/UserVerificationPresenter.java @@ -1,4 +1,4 @@ -package use_cases.user_registration_use_cases; +package interface_adapters.user_registration_interface_adapters; import data_access.Database; @@ -8,11 +8,11 @@ public class UserVerificationPresenter { private String password; private String email; - private final UserVerificationOutputBoundary verificationOutputBoundary; + private final UserVerificationOutputView verificationOutputBoundary; private int code; - public UserVerificationPresenter(Database database, UserVerificationOutputBoundary verificationOutputBoundary){ + public UserVerificationPresenter(Database database, UserVerificationOutputView verificationOutputBoundary){ this.database = database; this.verificationOutputBoundary = verificationOutputBoundary; } diff --git a/src/main/java/use_cases/user_registration_use_cases/userRegCredentialsRetriever.java b/src/main/java/interface_adapters/user_registration_interface_adapters/userRegCredentialsRetriever.java similarity index 55% rename from src/main/java/use_cases/user_registration_use_cases/userRegCredentialsRetriever.java rename to src/main/java/interface_adapters/user_registration_interface_adapters/userRegCredentialsRetriever.java index 1d4951cb..cf2e0fd6 100644 --- a/src/main/java/use_cases/user_registration_use_cases/userRegCredentialsRetriever.java +++ b/src/main/java/interface_adapters/user_registration_interface_adapters/userRegCredentialsRetriever.java @@ -1,4 +1,4 @@ -package use_cases.user_registration_use_cases; +package interface_adapters.user_registration_interface_adapters; public interface userRegCredentialsRetriever { void getUserCredentials(); diff --git a/src/main/java/screens/login_screen/AppScreenCreator.java b/src/main/java/screens/login_screen/AppScreenCreator.java new file mode 100644 index 00000000..91a66a42 --- /dev/null +++ b/src/main/java/screens/login_screen/AppScreenCreator.java @@ -0,0 +1,37 @@ +package screens.login_screen; +import interface_adapters.login_interface_adapters.UserLoginViewI; +import screens.appscreen.AppScreen; +import use_cases.user_login_use_cases.UserLoginOutputBoundary; + +import java.util.ArrayList; + +public class AppScreenCreator implements UserLoginViewI { + private String username ; + private ArrayList chats; + private boolean userNotExists; + private boolean passNotMatched; + AppScreen appScreen; + public AppScreenCreator(){ + } + @Override + public void display() { + if(userNotExists|| passNotMatched){ + showUnableToLogin(); + }else{ + /*this.appScreen = new AppScreen(username, chats);*/ + System.out.println(username); + } + } + + private void showUnableToLogin() { + System.out.println("unable to login"); + } + @Override + public void setChatsPresenter(UserLoginOutputBoundary chatsPresenter){ + this.username = chatsPresenter.getUsername(); + this.chats = (ArrayList) chatsPresenter.getChats(); + this.userNotExists = chatsPresenter.isNotExists(); + this.passNotMatched = chatsPresenter.isNotMatched(); + } + +} diff --git a/src/main/java/screens/login_screen/UserLoginUI.java b/src/main/java/screens/login_screen/UserLoginUI.java index 444c2b9f..19c3f99c 100644 --- a/src/main/java/screens/login_screen/UserLoginUI.java +++ b/src/main/java/screens/login_screen/UserLoginUI.java @@ -1,20 +1,37 @@ package screens.login_screen; -import use_cases.user_login_use_cases.UserLoginPresenter; -import use_cases.user_registration_use_cases.UserVerificationOutputBoundary; +import data_access.Database; +import data_access.UserDatabase; +import interface_adapters.login_interface_adapters.UserChatsPresenter; +import interface_adapters.login_interface_adapters.UserLoginViewI; +import use_cases.user_login_use_cases.UserLoginInputBoundary; +import interface_adapters.login_interface_adapters.UserLoginPresenter; +import use_cases.user_login_use_cases.UserLoginInteractor2; +import interface_adapters.user_registration_interface_adapters.UserVerificationOutputView; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.io.File; /** This is the screen on which the user enters his credentials in order to login **/ -public class UserLoginUI implements ActionListener, UserVerificationOutputBoundary { +public class UserLoginUI implements ActionListener, UserVerificationOutputView { - private final UserLoginPresenter loginInteractor; + private final UserLoginPresenter loginPresenter; JTextField credentialText; JPasswordField passwordText; - public UserLoginUI(UserLoginPresenter loginInteractor){ - this.loginInteractor = loginInteractor; + public UserLoginUI(UserLoginPresenter loginPresenter){ + UserLoginViewI loginViewI = new AppScreenCreator(); + this.loginPresenter = loginPresenter; + this.loginPresenter.setLoginView(loginViewI); + } + //For Testing Purposes + public static void main(String[] args){ + Database userDB = new UserDatabase(new File("new")); + UserLoginInputBoundary inputBoundary = new UserLoginInteractor2(userDB, new UserChatsPresenter()); + UserLoginPresenter loginPresenter1 = new UserLoginPresenter(userDB, inputBoundary); + UserLoginUI loginUI = new UserLoginUI(loginPresenter1); + loginUI.getLoginCredentials(); } @Override public void getLoginCredentials(){ @@ -69,7 +86,7 @@ public void cannotVerify() { public void actionPerformed(ActionEvent e) { String username = credentialText.getText(); String password = passwordText.getText(); - loginInteractor.setLoginCredentials(username, password); - loginInteractor.tryLogin(); + loginPresenter.setLoginCredentials(username, password); + loginPresenter.tryLogin(); } } diff --git a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java index cfab2d00..84ea9bc9 100644 --- a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java +++ b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java @@ -1,8 +1,11 @@ package screens.user_registration_screen; import data_access.Database; import data_access.UserDatabase; +import interface_adapters.login_interface_adapters.UserChatsPresenter; +import interface_adapters.user_registration_interface_adapters.*; import screens.login_screen.UserLoginUI; -import use_cases.user_login_use_cases.UserLoginPresenter; +import use_cases.user_login_use_cases.UserLoginInteractor2; +import interface_adapters.login_interface_adapters.UserLoginPresenter; import use_cases.user_registration_use_cases.*; import javax.swing.*; @@ -84,10 +87,11 @@ public void getUserCredentials(){ public static void main(String[] args){ Database testDB = new UserDatabase(new File("newAccounts2")); - UserLoginPresenter userLoginInteractor = new UserLoginPresenter(testDB); - UserVerificationOutputBoundary loginUI = new UserLoginUI(userLoginInteractor); + UserLoginInteractor2 userLoginInteractor2 = new UserLoginInteractor2(testDB, new UserChatsPresenter()); + UserLoginPresenter userLoginPresenter = new UserLoginPresenter(testDB, userLoginInteractor2); + UserVerificationOutputView loginUI = new UserLoginUI(userLoginPresenter); UserVerificationPresenter verificationInteractor = new UserVerificationPresenter(testDB, loginUI); - UserExistsOutputBoundary verificationScreen = new UserVerificationScreen(verificationInteractor); + UserExistsOutputView verificationScreen = new UserVerificationScreen(verificationInteractor); UserExistsPresenter existsInteractor = new UserExistsPresenter(testDB, verificationScreen, new verificationMethodFactory()); UserRegistrationUI testUI = new UserRegistrationUI(existsInteractor); testUI.getUserCredentials(); diff --git a/src/main/java/screens/user_registration_screen/UserVerificationScreen.java b/src/main/java/screens/user_registration_screen/UserVerificationScreen.java index 26338b54..d5f5bfc9 100644 --- a/src/main/java/screens/user_registration_screen/UserVerificationScreen.java +++ b/src/main/java/screens/user_registration_screen/UserVerificationScreen.java @@ -1,5 +1,6 @@ package screens.user_registration_screen; -import use_cases.user_registration_use_cases.*; +import interface_adapters.user_registration_interface_adapters.UserExistsOutputView; +import interface_adapters.user_registration_interface_adapters.UserVerificationPresenter; import javax.swing.*; import java.awt.event.ActionEvent; @@ -8,7 +9,7 @@ * This is the class that is responsible for retrieving the verification code form the user, or presenting if * verification is not possible * */ -public class UserVerificationScreen implements UserExistsOutputBoundary, ActionListener { +public class UserVerificationScreen implements UserExistsOutputView, ActionListener { private final JTextField verText = new JTextField(20); private final UserVerificationPresenter verificationInputBoundary; private int code; diff --git a/src/main/java/use_cases/user_login_use_cases/UserLoginInputBoundary.java b/src/main/java/use_cases/user_login_use_cases/UserLoginInputBoundary.java index d0ff589b..74fa86a7 100644 --- a/src/main/java/use_cases/user_login_use_cases/UserLoginInputBoundary.java +++ b/src/main/java/use_cases/user_login_use_cases/UserLoginInputBoundary.java @@ -1,7 +1,8 @@ package use_cases.user_login_use_cases; public interface UserLoginInputBoundary { - void tryLogin(); + void login(String username, String password); + + UserLoginOutputBoundary getChatsPresenter(); - void setLoginCredentials(String username, String password); } diff --git a/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java b/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java new file mode 100644 index 00000000..e9853ea1 --- /dev/null +++ b/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java @@ -0,0 +1,34 @@ +package use_cases.user_login_use_cases; + +import data_access.Database; +import entities.user_entities.User; + +import java.util.ArrayList; + +public class UserLoginInteractor2 implements UserLoginInputBoundary { + private final UserLoginOutputBoundary chatPresenter; + private final Database database; + + private User user; + + public UserLoginInteractor2(Database database, UserLoginOutputBoundary chatPresenter){ + this.database = database; + this.chatPresenter = chatPresenter; + } + + @Override + public void login(String username, String password) { + //will update this.chatPresenter + //TODO: change below, as its just temporary + chatPresenter.setChats(new ArrayList<>()); + chatPresenter.setUsername(username); + chatPresenter.setUserNotExists(false); + chatPresenter.setPasswordNotMatched(false); + + } + + @Override + public UserLoginOutputBoundary getChatsPresenter() { + return this.chatPresenter; + } +} diff --git a/src/main/java/use_cases/user_login_use_cases/UserLoginOutputBoundary.java b/src/main/java/use_cases/user_login_use_cases/UserLoginOutputBoundary.java new file mode 100644 index 00000000..f37fc22f --- /dev/null +++ b/src/main/java/use_cases/user_login_use_cases/UserLoginOutputBoundary.java @@ -0,0 +1,15 @@ +package use_cases.user_login_use_cases; + +import java.util.List; + +public interface UserLoginOutputBoundary { + void setUsername(String username); + void setChats(List chats); + void setUserNotExists(boolean notExists); + void setPasswordNotMatched(boolean notMatched); + + String getUsername(); + List getChats(); + boolean isNotExists(); + boolean isNotMatched(); +} diff --git a/src/main/java/use_cases/user_login_use_cases/UserLoginPresenter.java b/src/main/java/use_cases/user_login_use_cases/UserLoginPresenter.java deleted file mode 100644 index 670f6cf3..00000000 --- a/src/main/java/use_cases/user_login_use_cases/UserLoginPresenter.java +++ /dev/null @@ -1,36 +0,0 @@ -package use_cases.user_login_use_cases; - -import data_access.Database; -import entities.user_entities.User; - -public class UserLoginPresenter { - private String username; - private String password; - private User user; - Database database; - public UserLoginPresenter(Database database){ - this.database = database; - } - - public void tryLogin() { - try{ - //TODO: issues here with serialization, and dependency inversion - user = database.getUser(username); - if(user.PasswordMatch(this.password)){ - user.login(); - }else{ - System.out.println("the password or username is incorrect"); - } - }catch(NullPointerException e){ - //TODO: implement login output boundary - System.out.println("An account with these credentials do not exist"); - } - - } - - public void setLoginCredentials(String username, String password) { - this.username = username; - this.password = password; - } - -} diff --git a/src/main/java/use_cases/user_registration_use_cases/UserVerificationOutputBoundary.java b/src/main/java/use_cases/user_registration_use_cases/UserVerificationOutputBoundary.java deleted file mode 100644 index cde3797f..00000000 --- a/src/main/java/use_cases/user_registration_use_cases/UserVerificationOutputBoundary.java +++ /dev/null @@ -1,7 +0,0 @@ -package use_cases.user_registration_use_cases; - -public interface UserVerificationOutputBoundary { - void getLoginCredentials(); - void cannotVerify(); - -} diff --git a/src/test/java/test_user_registration/TestUserExistsInteractor.java b/src/test/java/test_user_registration/TestUserExistsInteractor.java index f17e4640..865d8b19 100644 --- a/src/test/java/test_user_registration/TestUserExistsInteractor.java +++ b/src/test/java/test_user_registration/TestUserExistsInteractor.java @@ -5,8 +5,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import use_cases.user_registration_use_cases.ISendVerificationCode; -import use_cases.user_registration_use_cases.UserExistsPresenter; -import use_cases.user_registration_use_cases.UserExistsOutputBoundary; +import interface_adapters.user_registration_interface_adapters.UserExistsPresenter; +import interface_adapters.user_registration_interface_adapters.UserExistsOutputView; import use_cases.user_registration_use_cases.createMailMan; public class TestUserExistsInteractor { @@ -55,7 +55,7 @@ public boolean UserExists(String username) { } }; //This output boundary used in test cases - private class TestOutputBoundary implements UserExistsOutputBoundary{ + private class TestOutputBoundary implements UserExistsOutputView { public int x = 0; @Override public void getVerificationCredentials() { diff --git a/src/test/java/test_user_registration/TestUserVerificationInteractor.java b/src/test/java/test_user_registration/TestUserVerificationInteractor.java index bc5fba0d..f2c38f34 100644 --- a/src/test/java/test_user_registration/TestUserVerificationInteractor.java +++ b/src/test/java/test_user_registration/TestUserVerificationInteractor.java @@ -4,8 +4,8 @@ import entities.user_entities.User; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import use_cases.user_registration_use_cases.UserVerificationPresenter; -import use_cases.user_registration_use_cases.UserVerificationOutputBoundary; +import interface_adapters.user_registration_interface_adapters.UserVerificationPresenter; +import interface_adapters.user_registration_interface_adapters.UserVerificationOutputView; public class TestUserVerificationInteractor { private class testDatabase implements Database{ @@ -30,7 +30,7 @@ public boolean UserExists(String username) { return false; } } - private class testUserVerificationOutputBdy implements UserVerificationOutputBoundary{ + private class testUserVerificationOutputBdy implements UserVerificationOutputView { public int x; @Override public void getLoginCredentials() { From dd97bbce687f0c0fa2d3f26aa69ff05abde87dc4 Mon Sep 17 00:00:00 2001 From: Madhavan7 Date: Fri, 2 Dec 2022 15:19:31 -0500 Subject: [PATCH 10/14] Minor changes --- .../screens/login_screen/AppScreenCreator.java | 14 ++++++++------ .../user_login_use_cases/UserLoginInteractor2.java | 6 ++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/screens/login_screen/AppScreenCreator.java b/src/main/java/screens/login_screen/AppScreenCreator.java index 91a66a42..a9f1f9be 100644 --- a/src/main/java/screens/login_screen/AppScreenCreator.java +++ b/src/main/java/screens/login_screen/AppScreenCreator.java @@ -1,4 +1,6 @@ package screens.login_screen; +import interface_adapters.appscreen.AppScreenLoader; +import interface_adapters.login_interface_adapters.UserChatsPresenter; import interface_adapters.login_interface_adapters.UserLoginViewI; import screens.appscreen.AppScreen; import use_cases.user_login_use_cases.UserLoginOutputBoundary; @@ -6,11 +8,9 @@ import java.util.ArrayList; public class AppScreenCreator implements UserLoginViewI { - private String username ; - private ArrayList chats; private boolean userNotExists; private boolean passNotMatched; - AppScreen appScreen; + AppScreenLoader appScreenLoader; public AppScreenCreator(){ } @Override @@ -19,7 +19,8 @@ public void display() { showUnableToLogin(); }else{ /*this.appScreen = new AppScreen(username, chats);*/ - System.out.println(username); + //Could be null pointer exception if setChatsPresenter is not called before the below + appScreenLoader.openScreen(); } } @@ -28,10 +29,11 @@ private void showUnableToLogin() { } @Override public void setChatsPresenter(UserLoginOutputBoundary chatsPresenter){ - this.username = chatsPresenter.getUsername(); - this.chats = (ArrayList) chatsPresenter.getChats(); + String username = chatsPresenter.getUsername(); + ArrayList chats = (ArrayList) chatsPresenter.getChats(); this.userNotExists = chatsPresenter.isNotExists(); this.passNotMatched = chatsPresenter.isNotMatched(); + appScreenLoader = new AppScreenLoader(username, chats); } } diff --git a/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java b/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java index e9853ea1..132d613c 100644 --- a/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java +++ b/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java @@ -20,10 +20,8 @@ public UserLoginInteractor2(Database database, UserLoginOutputBoundary chatPrese public void login(String username, String password) { //will update this.chatPresenter //TODO: change below, as its just temporary - chatPresenter.setChats(new ArrayList<>()); - chatPresenter.setUsername(username); - chatPresenter.setUserNotExists(false); - chatPresenter.setPasswordNotMatched(false); + user = database.getUser(username); + } From 8d3341b2da6c4a1055c5cf00b1432b45cc288160 Mon Sep 17 00:00:00 2001 From: Madhavan7 Date: Fri, 2 Dec 2022 16:28:39 -0500 Subject: [PATCH 11/14] Minor changes --- .../interface_adapters/User_search_IA/UserPresenterClass.java | 2 +- .../screens/user_registration_screen/UserRegistrationUI.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/interface_adapters/User_search_IA/UserPresenterClass.java b/src/main/java/interface_adapters/User_search_IA/UserPresenterClass.java index 9129c39b..3aa2d5a4 100644 --- a/src/main/java/interface_adapters/User_search_IA/UserPresenterClass.java +++ b/src/main/java/interface_adapters/User_search_IA/UserPresenterClass.java @@ -6,7 +6,7 @@ /** * User_search_IA.UserPresenter makes us implement showProfile to invert the dependency */ -public class UserPresenterClass implements UserPresenter{ +public class UserPresenterClass implements UserPresenter { @Override public String showProfile(String username) { // setting up access to the database of users: diff --git a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java index 84ea9bc9..2872a5f6 100644 --- a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java +++ b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java @@ -86,7 +86,7 @@ public void getUserCredentials(){ } public static void main(String[] args){ - Database testDB = new UserDatabase(new File("newAccounts2")); + Database testDB = new UserDatabase(new File("newAccounts23")); UserLoginInteractor2 userLoginInteractor2 = new UserLoginInteractor2(testDB, new UserChatsPresenter()); UserLoginPresenter userLoginPresenter = new UserLoginPresenter(testDB, userLoginInteractor2); UserVerificationOutputView loginUI = new UserLoginUI(userLoginPresenter); From 5c3d0fc4ca3cbb369adfec9f5210181d3de95b2d Mon Sep 17 00:00:00 2001 From: Madhavan7 Date: Fri, 2 Dec 2022 19:38:49 -0500 Subject: [PATCH 12/14] Implemented UserLoginInteractor2 --- .../UserRegistrationUI.java | 2 +- .../UserLoginInteractor2.java | 19 ++++++++++++++++--- .../TestUserLoginInteractor.java | 5 +++++ .../TestUserLoginPresenter.java | 4 ++++ 4 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 src/test/java/test_user_login/TestUserLoginInteractor.java create mode 100644 src/test/java/test_user_login/TestUserLoginPresenter.java diff --git a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java index 2872a5f6..34ff2a24 100644 --- a/src/main/java/screens/user_registration_screen/UserRegistrationUI.java +++ b/src/main/java/screens/user_registration_screen/UserRegistrationUI.java @@ -86,7 +86,7 @@ public void getUserCredentials(){ } public static void main(String[] args){ - Database testDB = new UserDatabase(new File("newAccounts23")); + Database testDB = new UserDatabase(new File("new")); UserLoginInteractor2 userLoginInteractor2 = new UserLoginInteractor2(testDB, new UserChatsPresenter()); UserLoginPresenter userLoginPresenter = new UserLoginPresenter(testDB, userLoginInteractor2); UserVerificationOutputView loginUI = new UserLoginUI(userLoginPresenter); diff --git a/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java b/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java index 132d613c..6198156b 100644 --- a/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java +++ b/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java @@ -1,15 +1,17 @@ package use_cases.user_login_use_cases; import data_access.Database; +import entities.chat.Chat; import entities.user_entities.User; import java.util.ArrayList; +import java.util.List; public class UserLoginInteractor2 implements UserLoginInputBoundary { private final UserLoginOutputBoundary chatPresenter; private final Database database; - private User user; + private final List chatsStrings = new ArrayList<>(); public UserLoginInteractor2(Database database, UserLoginOutputBoundary chatPresenter){ this.database = database; @@ -20,8 +22,19 @@ public UserLoginInteractor2(Database database, UserLoginOutputBoundary chatPrese public void login(String username, String password) { //will update this.chatPresenter //TODO: change below, as its just temporary - user = database.getUser(username); - + try { + User user = database.getUser(username); + this.chatPresenter.setPasswordNotMatched(!user.PasswordMatch(password)); + this.chatPresenter.setUserNotExists(false); + List chats = user.getChats(); + for(Chat chat: chats){ + this.chatsStrings.add(chat.getName()); + } + this.chatPresenter.setChats(this.chatsStrings); + }catch(NullPointerException e){ + this.chatPresenter.setUserNotExists(true); + this.chatPresenter.setChats(this.chatsStrings); + } } diff --git a/src/test/java/test_user_login/TestUserLoginInteractor.java b/src/test/java/test_user_login/TestUserLoginInteractor.java new file mode 100644 index 00000000..c14c3c93 --- /dev/null +++ b/src/test/java/test_user_login/TestUserLoginInteractor.java @@ -0,0 +1,5 @@ +package test_user_login; + +public class TestUserLoginInteractor { + +} diff --git a/src/test/java/test_user_login/TestUserLoginPresenter.java b/src/test/java/test_user_login/TestUserLoginPresenter.java new file mode 100644 index 00000000..bf149dff --- /dev/null +++ b/src/test/java/test_user_login/TestUserLoginPresenter.java @@ -0,0 +1,4 @@ +package test_user_login; + +public class TestUserLoginPresenter { +} From 070078bd2d3bf3ac6dee21acd86f701e1df8832e Mon Sep 17 00:00:00 2001 From: Madhavan7 Date: Fri, 2 Dec 2022 23:42:01 -0500 Subject: [PATCH 13/14] Tested UserLoginInteractor2 --- .../UserLoginInteractor2.java | 1 + .../TestUserLoginInteractor.java | 83 +++++++++++++++++++ .../TestUserExistsInteractor.java | 2 +- 3 files changed, 85 insertions(+), 1 deletion(-) diff --git a/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java b/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java index 6198156b..9033fa82 100644 --- a/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java +++ b/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java @@ -24,6 +24,7 @@ public void login(String username, String password) { //TODO: change below, as its just temporary try { User user = database.getUser(username); + this.chatPresenter.setUsername(username); this.chatPresenter.setPasswordNotMatched(!user.PasswordMatch(password)); this.chatPresenter.setUserNotExists(false); List chats = user.getChats(); diff --git a/src/test/java/test_user_login/TestUserLoginInteractor.java b/src/test/java/test_user_login/TestUserLoginInteractor.java index c14c3c93..34499f82 100644 --- a/src/test/java/test_user_login/TestUserLoginInteractor.java +++ b/src/test/java/test_user_login/TestUserLoginInteractor.java @@ -1,5 +1,88 @@ package test_user_login; +import data_access.UserDatabase; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import use_cases.user_login_use_cases.UserLoginInteractor2; +import use_cases.user_login_use_cases.UserLoginOutputBoundary; + +import java.io.File; +import java.util.List; + public class TestUserLoginInteractor { + private final UserDatabase database = new UserDatabase(new File("testAccounts")); + private static class testUserChatsPresenter implements UserLoginOutputBoundary{ + public int x; + private boolean notExists; + private boolean notMatched; + + @Override + public void setUsername(String username) { + x += 1; + } + + @Override + public void setChats(List chats) { + x += 3; + } + + @Override + public void setUserNotExists(boolean notExists) { + this.notExists = notExists; + } + + @Override + public void setPasswordNotMatched(boolean notMatched) { + this.notMatched = notMatched; + } + + @Override + public String getUsername() { + return null; + } + + @Override + public List getChats() { + return null; + } + + @Override + public boolean isNotExists() { + return this.notExists; + } + + @Override + public boolean isNotMatched() { + return this.notMatched; + } + } + + @Test + public void testUserNotExists(){ + testUserChatsPresenter chatsPresenter = new testUserChatsPresenter(); + UserLoginInteractor2 userInteractor = new UserLoginInteractor2(database, chatsPresenter); + userInteractor.login("Madhavi", "123"); + Assertions.assertTrue(chatsPresenter.isNotExists()); + } + + @Test + public void testUserPasswordWrong(){ + testUserChatsPresenter chatsPresenter = new testUserChatsPresenter(); + UserLoginInteractor2 userInteractor = new UserLoginInteractor2(database, chatsPresenter); + database.createUser("Madhav", "123", "madhavgopan2000@gmail.com", "Basic"); + userInteractor.login("Madhav", "1234"); + Assertions.assertFalse(chatsPresenter.isNotExists()); + Assertions.assertTrue(chatsPresenter.isNotMatched()); + } + @Test + public void testUserPasswordRightUserExists(){ + testUserChatsPresenter chatsPresenter = new testUserChatsPresenter(); + UserLoginInteractor2 userInteractor = new UserLoginInteractor2(database, chatsPresenter); + userInteractor.login("Madhav", "123"); + Assertions.assertFalse(chatsPresenter.isNotExists()); + Assertions.assertFalse(chatsPresenter.isNotMatched()); + //To make sure that setting chats and username is done right. + Assertions.assertEquals(chatsPresenter.x, 4); + } } diff --git a/src/test/java/test_user_registration/TestUserExistsInteractor.java b/src/test/java/test_user_registration/TestUserExistsInteractor.java index 865d8b19..3c60bfc0 100644 --- a/src/test/java/test_user_registration/TestUserExistsInteractor.java +++ b/src/test/java/test_user_registration/TestUserExistsInteractor.java @@ -55,7 +55,7 @@ public boolean UserExists(String username) { } }; //This output boundary used in test cases - private class TestOutputBoundary implements UserExistsOutputView { + private static class TestOutputBoundary implements UserExistsOutputView { public int x = 0; @Override public void getVerificationCredentials() { From 58eecf84cd3ef0d426d8c6c187eb558decb1896c Mon Sep 17 00:00:00 2001 From: Madhavan7 Date: Sat, 3 Dec 2022 22:29:55 -0500 Subject: [PATCH 14/14] Added a lot of comments, and deleted some fields --- src/main/java/data_access/UserDatabase.java | 11 +++------ .../java/entities/user_entities/User.java | 2 -- .../entities/user_entities/UserFactory.java | 7 +++--- .../UserChatsPresenter.java | 4 +++- .../UserLoginGateway.java | 24 ------------------- .../UserLoginPresenter.java | 16 ++++++++++--- .../UserLoginViewI.java | 4 +++- .../UserExistsOutputView.java | 2 ++ .../login_screen/AppScreenCreator.java | 16 +++++++++---- .../screens/login_screen/UserLoginUI.java | 9 ++++++- .../user_login_use_cases/Loginable.java | 4 +++- .../UserLoginInputBoundary.java | 2 ++ .../UserLoginInteractor2.java | 8 ++++--- .../UserLoginOutputBoundary.java | 5 +++- src/test/java/UserDatabaseTest.java | 8 +++---- 15 files changed, 66 insertions(+), 56 deletions(-) delete mode 100644 src/main/java/interface_adapters/login_interface_adapters/UserLoginGateway.java diff --git a/src/main/java/data_access/UserDatabase.java b/src/main/java/data_access/UserDatabase.java index a88e97df..59c6bd10 100644 --- a/src/main/java/data_access/UserDatabase.java +++ b/src/main/java/data_access/UserDatabase.java @@ -48,6 +48,7 @@ public boolean UserExists(String username, String email) { /** * Checks if a user with given Username exists. */ + //TODO: this method can be be simplified to "return UserExists(username, "");" @Override public boolean UserExists(String username) { for(User user: this.accountList){ @@ -83,6 +84,7 @@ public void createUser(String username, String password, String email, String ty */ @Override // To be edited to get user from the array format rather than the serialized format. + //TODO: for loop can be replaced with enhanced for loop public User getUser(String username) { User ans = null; for (int i = 0; i < (this.accountList.size()); i++) { @@ -101,15 +103,8 @@ public List getList() { ObjectInputStream in = new ObjectInputStream(fileIn)) { users = (ArrayList) in.readObject(); - /* - while(true){ - try{ - Entities.User_Entities.User user = (Entities.User_Entities.User) in.readObject(); - users.add(user);} - catch(EOFException e){ - break; - }*/ return users; + //TODO: this is not a good use of exceptions, but I could not find any other way to do it. }catch(EOFException e){ return users; } catch (IOException | ClassNotFoundException ex) { diff --git a/src/main/java/entities/user_entities/User.java b/src/main/java/entities/user_entities/User.java index 4817552d..46fbfd36 100644 --- a/src/main/java/entities/user_entities/User.java +++ b/src/main/java/entities/user_entities/User.java @@ -16,8 +16,6 @@ public abstract class User implements Serializable, Changeable, Loginable, UserA protected String email; protected ArrayList userChats; - boolean verified = false; - boolean online = false; public User(String username, String password, String email, ArrayList userChats){ this.username = username; this.password = password; diff --git a/src/main/java/entities/user_entities/UserFactory.java b/src/main/java/entities/user_entities/UserFactory.java index f013ed39..b299fdb3 100644 --- a/src/main/java/entities/user_entities/UserFactory.java +++ b/src/main/java/entities/user_entities/UserFactory.java @@ -1,10 +1,11 @@ package entities.user_entities; -import entities.chat.Chat; -import entities.user_entities.*; import java.util.ArrayList; public class UserFactory { - //Following the factory design pattern, just in case in the future we decide to add various different types of Users + /* + Following the factory design pattern, just in case in the future we decide to add various different types of Users, + with different privileges + */ public static User BirthUser(String Username, String Password, String Email, String type){ return new BasicUser(Username, Password, Email, new ArrayList<>()); } diff --git a/src/main/java/interface_adapters/login_interface_adapters/UserChatsPresenter.java b/src/main/java/interface_adapters/login_interface_adapters/UserChatsPresenter.java index 2bc4876f..7c1a18fc 100644 --- a/src/main/java/interface_adapters/login_interface_adapters/UserChatsPresenter.java +++ b/src/main/java/interface_adapters/login_interface_adapters/UserChatsPresenter.java @@ -4,7 +4,9 @@ import java.util.ArrayList; import java.util.List; - +/** + * Just a bunch of getters and setters + * **/ public class UserChatsPresenter implements UserLoginOutputBoundary { private List chats; private boolean notExists; diff --git a/src/main/java/interface_adapters/login_interface_adapters/UserLoginGateway.java b/src/main/java/interface_adapters/login_interface_adapters/UserLoginGateway.java deleted file mode 100644 index 9fff9cd8..00000000 --- a/src/main/java/interface_adapters/login_interface_adapters/UserLoginGateway.java +++ /dev/null @@ -1,24 +0,0 @@ -package interface_adapters.login_interface_adapters; -import interface_adapters.user_search_IA.UserRetriever; -public class UserLoginGateway { - public UserRetriever database; - - String credential; - String password; - public UserLoginGateway(String credential, String password, UserRetriever database){ - this.database = database; - this.credential = credential; - this.password = password; - } - - public String getPassword(){ - return this.password; - } - public String getCredential(){ - return this.credential; - } - public UserRetriever getDatabase(){ - return this.database; - } - -} diff --git a/src/main/java/interface_adapters/login_interface_adapters/UserLoginPresenter.java b/src/main/java/interface_adapters/login_interface_adapters/UserLoginPresenter.java index 1007a623..ee42323c 100644 --- a/src/main/java/interface_adapters/login_interface_adapters/UserLoginPresenter.java +++ b/src/main/java/interface_adapters/login_interface_adapters/UserLoginPresenter.java @@ -2,7 +2,10 @@ import data_access.Database; import use_cases.user_login_use_cases.UserLoginInputBoundary; - +/** + * Presenter object that gets info from the view, and passes it to the login use case objects in order + * to implement login + * **/ public class UserLoginPresenter { private final UserLoginInputBoundary loginGuard; private String username; @@ -14,17 +17,24 @@ public UserLoginPresenter(Database database, UserLoginInputBoundary loginGuard){ this.database = database; this.loginGuard = loginGuard; } - + /** + * Passes info from the view into loginInteractor(use case interactor object) + **/ public void tryLogin() { loginGuard.login(this.username, this.password); loginView.setChatsPresenter(loginGuard.getChatsPresenter()); loginView.display(); } - + /** + * Gets the info from the view + * **/ public void setLoginCredentials(String username, String password) { this.username = username; this.password = password; } + /** + * Sets the screen that will update the view after login + **/ public void setLoginView(UserLoginViewI loginView){ this.loginView = loginView; } diff --git a/src/main/java/interface_adapters/login_interface_adapters/UserLoginViewI.java b/src/main/java/interface_adapters/login_interface_adapters/UserLoginViewI.java index 5c585f10..cbac29d0 100644 --- a/src/main/java/interface_adapters/login_interface_adapters/UserLoginViewI.java +++ b/src/main/java/interface_adapters/login_interface_adapters/UserLoginViewI.java @@ -1,7 +1,9 @@ package interface_adapters.login_interface_adapters; import use_cases.user_login_use_cases.UserLoginOutputBoundary; - +/** + * ViewInterface that will update the view after login + * **/ public interface UserLoginViewI { void display(); void setChatsPresenter(UserLoginOutputBoundary outputBoundary); diff --git a/src/main/java/interface_adapters/user_registration_interface_adapters/UserExistsOutputView.java b/src/main/java/interface_adapters/user_registration_interface_adapters/UserExistsOutputView.java index 5f4ab589..5858d650 100644 --- a/src/main/java/interface_adapters/user_registration_interface_adapters/UserExistsOutputView.java +++ b/src/main/java/interface_adapters/user_registration_interface_adapters/UserExistsOutputView.java @@ -10,6 +10,8 @@ public interface UserExistsOutputView { /** * Presents that the user exists in the database * */ + /*TODO: Currently this violates Interface segregation principle, as the bottom method has nothing to do with + getting verification credentials.*/ void presentUserExistsMessage(); /** * Gets the code from the input boundary object diff --git a/src/main/java/screens/login_screen/AppScreenCreator.java b/src/main/java/screens/login_screen/AppScreenCreator.java index a9f1f9be..c0e8802a 100644 --- a/src/main/java/screens/login_screen/AppScreenCreator.java +++ b/src/main/java/screens/login_screen/AppScreenCreator.java @@ -1,18 +1,21 @@ package screens.login_screen; import interface_adapters.appscreen.AppScreenLoader; -import interface_adapters.login_interface_adapters.UserChatsPresenter; import interface_adapters.login_interface_adapters.UserLoginViewI; -import screens.appscreen.AppScreen; import use_cases.user_login_use_cases.UserLoginOutputBoundary; import java.util.ArrayList; - +/** + * Responsible for creating the view once User presses login + * **/ public class AppScreenCreator implements UserLoginViewI { private boolean userNotExists; private boolean passNotMatched; AppScreenLoader appScreenLoader; public AppScreenCreator(){ } + /** + * Opens the chats of the user + * **/ @Override public void display() { if(userNotExists|| passNotMatched){ @@ -23,10 +26,15 @@ public void display() { appScreenLoader.openScreen(); } } - + /** + * Shows a frame that displays a message + * **/ private void showUnableToLogin() { System.out.println("unable to login"); } + /** + * Gets the info from the presenter in order to output info into the screen + * **/ @Override public void setChatsPresenter(UserLoginOutputBoundary chatsPresenter){ String username = chatsPresenter.getUsername(); diff --git a/src/main/java/screens/login_screen/UserLoginUI.java b/src/main/java/screens/login_screen/UserLoginUI.java index 19c3f99c..d72968ae 100644 --- a/src/main/java/screens/login_screen/UserLoginUI.java +++ b/src/main/java/screens/login_screen/UserLoginUI.java @@ -33,6 +33,9 @@ public static void main(String[] args){ UserLoginUI loginUI = new UserLoginUI(loginPresenter1); loginUI.getLoginCredentials(); } + /** + * Frame to input login credentials + * **/ @Override public void getLoginCredentials(){ JFrame loginFrame = new JFrame(); @@ -65,7 +68,11 @@ public void getLoginCredentials(){ loginFrame.setVisible(true); } - + /** + * If the verification code is not right, this message shows up + * TODO: this has nothing to do with entering login credentials, so this is a violation of Interface segregation + * principles + * **/ @Override public void cannotVerify() { JFrame cannotVerifyFrame = new JFrame(); diff --git a/src/main/java/use_cases/user_login_use_cases/Loginable.java b/src/main/java/use_cases/user_login_use_cases/Loginable.java index f0eb5ca9..d461da81 100644 --- a/src/main/java/use_cases/user_login_use_cases/Loginable.java +++ b/src/main/java/use_cases/user_login_use_cases/Loginable.java @@ -1,6 +1,8 @@ package use_cases.user_login_use_cases; - +/** + * TODO: delete this layer + * **/ public interface Loginable { void login(); diff --git a/src/main/java/use_cases/user_login_use_cases/UserLoginInputBoundary.java b/src/main/java/use_cases/user_login_use_cases/UserLoginInputBoundary.java index 74fa86a7..01462de4 100644 --- a/src/main/java/use_cases/user_login_use_cases/UserLoginInputBoundary.java +++ b/src/main/java/use_cases/user_login_use_cases/UserLoginInputBoundary.java @@ -1,8 +1,10 @@ package use_cases.user_login_use_cases; public interface UserLoginInputBoundary { + /** Use case that is responsible for logging in the user*/ void login(String username, String password); + /** Returns a presenter object that communicates with the view, about next steps**/ UserLoginOutputBoundary getChatsPresenter(); } diff --git a/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java b/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java index 9033fa82..ab8783a8 100644 --- a/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java +++ b/src/main/java/use_cases/user_login_use_cases/UserLoginInteractor2.java @@ -17,11 +17,12 @@ public UserLoginInteractor2(Database database, UserLoginOutputBoundary chatPrese this.database = database; this.chatPresenter = chatPresenter; } - + /** + * @param username Username of the user + * @param password password that the user entered + * **/ @Override public void login(String username, String password) { - //will update this.chatPresenter - //TODO: change below, as its just temporary try { User user = database.getUser(username); this.chatPresenter.setUsername(username); @@ -33,6 +34,7 @@ public void login(String username, String password) { } this.chatPresenter.setChats(this.chatsStrings); }catch(NullPointerException e){ + //Null pointer exception returns when the user is not in the database this.chatPresenter.setUserNotExists(true); this.chatPresenter.setChats(this.chatsStrings); } diff --git a/src/main/java/use_cases/user_login_use_cases/UserLoginOutputBoundary.java b/src/main/java/use_cases/user_login_use_cases/UserLoginOutputBoundary.java index f37fc22f..3c4da906 100644 --- a/src/main/java/use_cases/user_login_use_cases/UserLoginOutputBoundary.java +++ b/src/main/java/use_cases/user_login_use_cases/UserLoginOutputBoundary.java @@ -1,7 +1,10 @@ package use_cases.user_login_use_cases; import java.util.List; - +/** + * Objects that implement this interface are presenters that communicate with the view + * and the login interactor in order to implement login + * **/ public interface UserLoginOutputBoundary { void setUsername(String username); void setChats(List chats); diff --git a/src/test/java/UserDatabaseTest.java b/src/test/java/UserDatabaseTest.java index 09f087cf..55cac0f1 100644 --- a/src/test/java/UserDatabaseTest.java +++ b/src/test/java/UserDatabaseTest.java @@ -9,28 +9,28 @@ public class UserDatabaseTest { @Test public void addingFilesRightEmailAndUser(){ - File accounts = new File("TestUserDatabase2.csv"); + File accounts = new File("TestUserDatabase123.csv"); UserDatabase accountDatabase = new UserDatabase(accounts); accountDatabase.createUser("MadhavGopakumar", "123", "madhavgopan2000@gmail.com", "Basic"); Assertions.assertTrue(accountDatabase.UserExists("MadhavGopakumar", "madhavgopan2000@gmail.com")); } @Test public void addingMultipleFiles(){ - File accounts = new File("TestUserDatabase2.csv"); + File accounts = new File("TestUserDatabase123.csv"); UserDatabase accountDatabase = new UserDatabase(accounts); accountDatabase.createUser("MeenakshiGopakumar", "123", "meena@gmail.com", "Basic"); Assertions.assertTrue(accountDatabase.UserExists("MeenakshiGopakumar", "meena@gmail.com")); } @Test public void rightEmailWrongUser(){ - File accounts = new File("TestUserDatabase2.csv"); + File accounts = new File("TestUserDatabase123.csv"); UserDatabase accountDatabase = new UserDatabase(accounts); accountDatabase.createUser("MadhavGopakumar", "123", "madhavgopan2000@gmail.com", "Basic"); Assertions.assertTrue(accountDatabase.UserExists("MadG", "madhavgopan2000@gmail.com")); } @Test public void rightUserWrongEmail(){ - File accounts = new File("TestUserDatabase2.csv"); + File accounts = new File("TestUserDatabase123.csv"); UserDatabase accountDatabase = new UserDatabase(accounts); Assertions.assertTrue(accountDatabase.UserExists("MeenakshiGopakumar", "ma")); }