From cfd37a9a0347c6c92dabfe394283c8aa7f734887 Mon Sep 17 00:00:00 2001 From: obai Albek <3009594@stud.hs-mannheim.de> Date: Fri, 30 May 2025 13:58:49 +0200 Subject: [PATCH] implements and test email-manager --- MailSystem/src/domain/EasyMail.java | 8 +++ MailSystem/src/domain/email/Email.java | 43 ++++++++++++ MailSystem/src/domain/email/EmailFolder.java | 11 +++ .../domain/email/EmailNotFoundException.java | 7 ++ MailSystem/src/domain/email/Inbox.java | 68 +++++++++++++++++++ .../src/domain/email/RemoveEmailTest.java | 42 ++++++++++++ .../src/domain/email/SendEmailTest.java | 48 +++++++++++++ MailSystem/src/domain/email/SentFolder.java | 63 +++++++++++++++++ MailSystem/src/domain/email/TrashFolder.java | 67 ++++++++++++++++++ .../src/domain/unitTest/RemoveUserTest.java | 48 ------------- .../{unitTest => user}/AddUserTest.java | 3 +- .../{unitTest => user}/CheckLoginTest.java | 3 +- .../{unitTest => user}/UpdateUserTest.java | 7 +- MailSystem/src/domain/{ => user}/User.java | 2 +- .../UserAlreadyExistsException.java | 2 +- .../src/domain/{ => user}/UserEmail.java | 22 +++++- .../src/domain/{ => user}/UserManager.java | 4 +- .../UserNotFoundException.java | 2 +- 18 files changed, 385 insertions(+), 65 deletions(-) create mode 100644 MailSystem/src/domain/EasyMail.java create mode 100644 MailSystem/src/domain/email/Email.java create mode 100644 MailSystem/src/domain/email/EmailFolder.java create mode 100644 MailSystem/src/domain/email/EmailNotFoundException.java create mode 100644 MailSystem/src/domain/email/Inbox.java create mode 100644 MailSystem/src/domain/email/RemoveEmailTest.java create mode 100644 MailSystem/src/domain/email/SendEmailTest.java create mode 100644 MailSystem/src/domain/email/SentFolder.java create mode 100644 MailSystem/src/domain/email/TrashFolder.java delete mode 100644 MailSystem/src/domain/unitTest/RemoveUserTest.java rename MailSystem/src/domain/{unitTest => user}/AddUserTest.java (98%) rename MailSystem/src/domain/{unitTest => user}/CheckLoginTest.java (94%) rename MailSystem/src/domain/{unitTest => user}/UpdateUserTest.java (96%) rename MailSystem/src/domain/{ => user}/User.java (93%) rename MailSystem/src/domain/{exception => user}/UserAlreadyExistsException.java (83%) rename MailSystem/src/domain/{ => user}/UserEmail.java (52%) rename MailSystem/src/domain/{ => user}/UserManager.java (95%) rename MailSystem/src/domain/{exception => user}/UserNotFoundException.java (82%) diff --git a/MailSystem/src/domain/EasyMail.java b/MailSystem/src/domain/EasyMail.java new file mode 100644 index 0000000..379742f --- /dev/null +++ b/MailSystem/src/domain/EasyMail.java @@ -0,0 +1,8 @@ +package domain; + +import domain.user.UserManager; + +public class EasyMail { + + +} diff --git a/MailSystem/src/domain/email/Email.java b/MailSystem/src/domain/email/Email.java new file mode 100644 index 0000000..0f77df2 --- /dev/null +++ b/MailSystem/src/domain/email/Email.java @@ -0,0 +1,43 @@ +package domain.email; + +import java.time.LocalDate; + +import domain.user.*; + +public class Email { + private User sender; + private User receiver; + private String subject; + private String content; + private LocalDate date; + + public Email(User sender, User receiver, String subject, String content, LocalDate date) { + this.sender = sender; + this.receiver = receiver; + this.subject = subject; + this.content = content; + this.date = date; + } + + public User getSender() { + return sender; + } + public User getReceiver() { + return receiver; + } + public String getSubject() { + return subject; + } + public String getContent() { + return content; + } + public LocalDate getDate() { + return date; + } + + @Override + public String toString() { + return "Email [sender=" + sender + ", receiver=" + receiver + ", subject=" + subject + ", content=" + content + + ", date=" + date + "]"; + } +} diff --git a/MailSystem/src/domain/email/EmailFolder.java b/MailSystem/src/domain/email/EmailFolder.java new file mode 100644 index 0000000..55bc49f --- /dev/null +++ b/MailSystem/src/domain/email/EmailFolder.java @@ -0,0 +1,11 @@ +package domain.email; + +public interface EmailFolder { + + boolean addEmail(Email email); + Email removeEmail(String subject) throws EmailNotFoundException; + Email getEmailBySubject(String subject) throws EmailNotFoundException ; + int getNumberOfEmails(); + boolean clearAllEmails(); + String[] listAllEmails(); +} diff --git a/MailSystem/src/domain/email/EmailNotFoundException.java b/MailSystem/src/domain/email/EmailNotFoundException.java new file mode 100644 index 0000000..1ed7ede --- /dev/null +++ b/MailSystem/src/domain/email/EmailNotFoundException.java @@ -0,0 +1,7 @@ +package domain.email; + +public class EmailNotFoundException extends Exception { + public EmailNotFoundException(String error) { + super(error); + } +} diff --git a/MailSystem/src/domain/email/Inbox.java b/MailSystem/src/domain/email/Inbox.java new file mode 100644 index 0000000..695fac7 --- /dev/null +++ b/MailSystem/src/domain/email/Inbox.java @@ -0,0 +1,68 @@ +package domain.email; + +import java.util.ArrayList; + +public class Inbox implements EmailFolder { + + private ArrayList receivedEmails; + + public Inbox() { + this.receivedEmails = new ArrayList<>(); + } + + @Override + public boolean addEmail(Email email) { + if (email == null) { + return false; + } + receivedEmails.add(email); + return true; + } + + @Override + public Email removeEmail(String subject) throws EmailNotFoundException { + Email emailToBeRemoved = getEmailBySubject(subject); + if (emailToBeRemoved == null) { + throw new EmailNotFoundException("Email not found in inbox!"); + } + receivedEmails.remove(emailToBeRemoved); + return emailToBeRemoved; + } + + @Override + public Email getEmailBySubject(String subject) throws EmailNotFoundException { + if (subject == null || subject.trim().isEmpty()) { + throw new IllegalArgumentException("Subject cannot be null or empty!"); + } + for (Email email : receivedEmails) { + if (email.getSubject().equalsIgnoreCase(subject)) { + return email; + } + } + throw new EmailNotFoundException("Email with subject '" + subject + "' not found!"); + } + + @Override + public int getNumberOfEmails() { + return receivedEmails.size(); + } + + @Override + public boolean clearAllEmails() { + if (receivedEmails.isEmpty()) { + return false; + } + receivedEmails.clear(); + return true; + } + + @Override + public String[] listAllEmails() { + String[] subjects = new String[receivedEmails.size()]; + for (int i = 0; i < receivedEmails.size(); i++) { + subjects[i] = receivedEmails.get(i).getSubject(); + } + return subjects; + } +} + diff --git a/MailSystem/src/domain/email/RemoveEmailTest.java b/MailSystem/src/domain/email/RemoveEmailTest.java new file mode 100644 index 0000000..937257d --- /dev/null +++ b/MailSystem/src/domain/email/RemoveEmailTest.java @@ -0,0 +1,42 @@ +package domain.email; + +import static org.junit.jupiter.api.Assertions.*; + +import java.time.LocalDate; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import domain.*; +import domain.email.EmailNotFoundException; +import domain.user.*; + +class RemoveEmailTest { + + private User user; + private Email email; + + @BeforeEach + void setUp() { + user = new User("Alice", "Wonder", LocalDate.of(1995, 7, 20), "alicewonder", "wonderPass".toCharArray()); + email = new Email(user,new User("Bob", "Marley", LocalDate.of(1990, 6, 1), "bobmarley", "bobPass".toCharArray()), + "Trash Test Subject", "This email will go to trash.", LocalDate.now()); + } + + @Test + void testAddEmailToTrash() { + boolean added = user.getUsermail().getTrashFolder().addEmail(email); + + assertTrue(added); // erfolgreich hinzugefügt + assertEquals(1, user.getUsermail().getTrashFolder().getNumberOfEmails()); // Anzahl prüfen + } + + + @Test + void testRemoveEmailNotFoundInTrash() { + assertThrows(EmailNotFoundException.class, () -> { + user.getUsermail().getTrashFolder().removeEmail("Nonexistent Subject"); + }); + } + +} diff --git a/MailSystem/src/domain/email/SendEmailTest.java b/MailSystem/src/domain/email/SendEmailTest.java new file mode 100644 index 0000000..7587d79 --- /dev/null +++ b/MailSystem/src/domain/email/SendEmailTest.java @@ -0,0 +1,48 @@ +package domain.email; + +import static org.junit.jupiter.api.Assertions.*; + +import java.time.LocalDate; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import domain.*; +import domain.email.EmailNotFoundException; +import domain.user.User; + +class SendEmailTest { + + private User sender; + private User receiver; + + @BeforeEach + void setUp() { + sender = new User("John", "Doe", LocalDate.of(1990, 1, 1), "johndoe", "password123".toCharArray()); + receiver = new User("Jane", "Smith", LocalDate.of(1992, 5, 10), "janesmith", "securePass".toCharArray()); + } + + @Test + void testAddEmailToSentFolder() { + Email email = new Email(sender, receiver, "Test Subject", "This is a test email content.", LocalDate.now()); + boolean added = sender.getUsermail().getSentFolder().addEmail(email); + + assertTrue(added); + assertEquals(1, sender.getUsermail().getSentFolder().getNumberOfEmails()); // 1 Email gespeichert + } + + @Test + void testRemoveEmailFromSentFolder() throws EmailNotFoundException { + Email email = new Email(sender, receiver, "Test Subject", "This is a test email content.", LocalDate.now()); + boolean added = sender.getUsermail().getSentFolder().addEmail(email); + + assertTrue(added); + assertEquals(1, sender.getUsermail().getSentFolder().getNumberOfEmails()); + + Email removed = sender.getUsermail().getSentFolder().removeEmail("Test Subject"); + assertNotNull(removed); + assertEquals(0, sender.getUsermail().getSentFolder().getNumberOfEmails()); + + + } +} diff --git a/MailSystem/src/domain/email/SentFolder.java b/MailSystem/src/domain/email/SentFolder.java new file mode 100644 index 0000000..30073bc --- /dev/null +++ b/MailSystem/src/domain/email/SentFolder.java @@ -0,0 +1,63 @@ +package domain.email; + +import java.util.ArrayList; + +public class SentFolder implements EmailFolder { + + private ArrayList emails; + + public SentFolder() { + this.emails = new ArrayList<>(); + } + + @Override + public boolean addEmail(Email email) { + if (email == null) return false; + return emails.add(email); + } + + @Override + public Email removeEmail(String subject) throws EmailNotFoundException { + Email emailToBeRemoved = getEmailBySubject(subject); + if (emailToBeRemoved == null) + throw new EmailNotFoundException("Email not found!"); + + emails.remove(emailToBeRemoved); + return emailToBeRemoved; + } + + @Override + public Email getEmailBySubject(String subject) throws EmailNotFoundException { + if (subject == null) + throw new EmailNotFoundException("Email not found!"); + + for (Email email : emails) + if (email.getSubject().equalsIgnoreCase(subject)) + return email; + + return null; + } + + @Override + public int getNumberOfEmails() { + return emails.size(); + } + + @Override + public boolean clearAllEmails() { + if (emails.isEmpty()) + return false; + + emails.clear(); + return true; + } + + @Override + public String[] listAllEmails() { + String[] subjects = new String[emails.size()]; + for (int i = 0; i < emails.size(); i++) + subjects[i] = emails.get(i).toString(); + + return subjects; + } +} diff --git a/MailSystem/src/domain/email/TrashFolder.java b/MailSystem/src/domain/email/TrashFolder.java new file mode 100644 index 0000000..786c27c --- /dev/null +++ b/MailSystem/src/domain/email/TrashFolder.java @@ -0,0 +1,67 @@ +package domain.email; + +import java.util.ArrayList; +import java.util.ArrayList; + +public class TrashFolder implements EmailFolder { + + private ArrayList removedEmails; + + public TrashFolder() { + this.removedEmails = new ArrayList<>(); + } + + @Override + public boolean addEmail(Email email) { + if (email == null) { + return false; + } + removedEmails.add(email); + return true; + } + + @Override + public Email removeEmail(String subject) throws EmailNotFoundException { + Email emailToBeRemoved = getEmailBySubject(subject); + if (emailToBeRemoved == null) + throw new EmailNotFoundException("Email not found in trash!"); + + removedEmails.remove(emailToBeRemoved); + return null; + } + + @Override + public Email getEmailBySubject(String subject) { + if (subject == null) + throw new IllegalArgumentException("No input should be null!"); + + for (Email email : removedEmails) + if (email.getSubject().equalsIgnoreCase(subject)) + return email; + + return null; + } + + @Override + public int getNumberOfEmails() { + return removedEmails.size(); + } + + @Override + public boolean clearAllEmails() { + if (removedEmails.isEmpty()) return false; + + removedEmails.clear(); + return true; + } + + @Override + public String[] listAllEmails() { + String[] subjects = new String[removedEmails.size()]; + for (int i = 0; i < removedEmails.size(); i++) + subjects[i] = removedEmails.get(i).toString(); + + return subjects; + } +} + diff --git a/MailSystem/src/domain/unitTest/RemoveUserTest.java b/MailSystem/src/domain/unitTest/RemoveUserTest.java deleted file mode 100644 index ab6d186..0000000 --- a/MailSystem/src/domain/unitTest/RemoveUserTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package domain.unitTest; - -import static org.junit.jupiter.api.Assertions.*; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import domain.UserManager; -import domain.exception.UserNotFoundException; - -class RemoveUserTest { - - private UserManager userManager; - - @BeforeEach - void setUp() throws Exception { - userManager = new UserManager(); - userManager.addUser("Jane", "Doe", "janedoe", 1992, 20, "April", "securePass1".toCharArray(), "securePass1".toCharArray()); - } - - @Test - void testRemoveUserSuccessfully() throws Exception { - boolean removed = userManager.removeUser("janedoe@easymail.de"); - assertTrue(removed); - - assertNull(userManager.getUserByUsername("janedoe@easymail.de")); - } - - @Test - void testRemoveUserNotFound() { - assertThrows(UserNotFoundException.class, () -> { - userManager.removeUser("nonexistent@easymail.de"); - }); - } - - @Test - void testRemoveUserNullUsername() { - assertThrows(IllegalArgumentException.class, () -> { - userManager.removeUser(null); - }); - } - - @Test - void testRemoveUserEmptyUsername() { - assertThrows(IllegalArgumentException.class, () -> { - userManager.removeUser(" "); - }); - } -} - diff --git a/MailSystem/src/domain/unitTest/AddUserTest.java b/MailSystem/src/domain/user/AddUserTest.java similarity index 98% rename from MailSystem/src/domain/unitTest/AddUserTest.java rename to MailSystem/src/domain/user/AddUserTest.java index 482e148..b99baa6 100644 --- a/MailSystem/src/domain/unitTest/AddUserTest.java +++ b/MailSystem/src/domain/user/AddUserTest.java @@ -1,11 +1,10 @@ -package domain.unitTest; +package domain.user; import static org.junit.Assert.*; import static org.junit.Assert.assertThrows; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import domain.UserManager; class AddUserTest { private UserManager userManager; diff --git a/MailSystem/src/domain/unitTest/CheckLoginTest.java b/MailSystem/src/domain/user/CheckLoginTest.java similarity index 94% rename from MailSystem/src/domain/unitTest/CheckLoginTest.java rename to MailSystem/src/domain/user/CheckLoginTest.java index a103827..55ebdeb 100644 --- a/MailSystem/src/domain/unitTest/CheckLoginTest.java +++ b/MailSystem/src/domain/user/CheckLoginTest.java @@ -1,11 +1,10 @@ -package domain.unitTest; +package domain.user; import static org.junit.Assert.*; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import domain.UserManager; class CheckLoginTest { private UserManager userManager; diff --git a/MailSystem/src/domain/unitTest/UpdateUserTest.java b/MailSystem/src/domain/user/UpdateUserTest.java similarity index 96% rename from MailSystem/src/domain/unitTest/UpdateUserTest.java rename to MailSystem/src/domain/user/UpdateUserTest.java index 64bcd5f..328a1d5 100644 --- a/MailSystem/src/domain/unitTest/UpdateUserTest.java +++ b/MailSystem/src/domain/user/UpdateUserTest.java @@ -1,14 +1,9 @@ -package domain.unitTest; +package domain.user; import static org.junit.jupiter.api.Assertions.*; - - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import domain.User; -import domain.UserManager; -import domain.exception.UserNotFoundException; class UpdateUserTest { diff --git a/MailSystem/src/domain/User.java b/MailSystem/src/domain/user/User.java similarity index 93% rename from MailSystem/src/domain/User.java rename to MailSystem/src/domain/user/User.java index dda9db8..30a88c2 100644 --- a/MailSystem/src/domain/User.java +++ b/MailSystem/src/domain/user/User.java @@ -1,4 +1,4 @@ -package domain; +package domain.user; import java.time.LocalDate; diff --git a/MailSystem/src/domain/exception/UserAlreadyExistsException.java b/MailSystem/src/domain/user/UserAlreadyExistsException.java similarity index 83% rename from MailSystem/src/domain/exception/UserAlreadyExistsException.java rename to MailSystem/src/domain/user/UserAlreadyExistsException.java index 97d59d4..dde124f 100644 --- a/MailSystem/src/domain/exception/UserAlreadyExistsException.java +++ b/MailSystem/src/domain/user/UserAlreadyExistsException.java @@ -1,4 +1,4 @@ -package domain.exception; +package domain.user; public class UserAlreadyExistsException extends Exception { public UserAlreadyExistsException(String msg) { diff --git a/MailSystem/src/domain/UserEmail.java b/MailSystem/src/domain/user/UserEmail.java similarity index 52% rename from MailSystem/src/domain/UserEmail.java rename to MailSystem/src/domain/user/UserEmail.java index c7dd4be..00f64b5 100644 --- a/MailSystem/src/domain/UserEmail.java +++ b/MailSystem/src/domain/user/UserEmail.java @@ -1,4 +1,6 @@ -package domain; +package domain.user; + +import domain.email.*; public class UserEmail { @@ -6,11 +8,17 @@ public class UserEmail { private int accountID; private String username; private char[] password; + private SentFolder sentFolder; + private TrashFolder trashFolder; + private Inbox inbox; public UserEmail(String username, char[] password) { this.username = username; this.password = password; this.accountID = counter++; + this.sentFolder = new SentFolder(); + this.trashFolder = new TrashFolder(); + this.inbox = new Inbox(); } public String getUsername() { @@ -29,4 +37,16 @@ public class UserEmail { return accountID; } + public SentFolder getSentFolder() { + return sentFolder; + } + + public TrashFolder getTrashFolder() { + return trashFolder; + } + + public Inbox getInbox() { + return inbox; + } + } diff --git a/MailSystem/src/domain/UserManager.java b/MailSystem/src/domain/user/UserManager.java similarity index 95% rename from MailSystem/src/domain/UserManager.java rename to MailSystem/src/domain/user/UserManager.java index b796fd0..3ea311f 100644 --- a/MailSystem/src/domain/UserManager.java +++ b/MailSystem/src/domain/user/UserManager.java @@ -1,11 +1,9 @@ -package domain; +package domain.user; import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; -import domain.exception.UserAlreadyExistsException; -import domain.exception.UserNotFoundException; public class UserManager { diff --git a/MailSystem/src/domain/exception/UserNotFoundException.java b/MailSystem/src/domain/user/UserNotFoundException.java similarity index 82% rename from MailSystem/src/domain/exception/UserNotFoundException.java rename to MailSystem/src/domain/user/UserNotFoundException.java index d0fc3a4..b0b2866 100644 --- a/MailSystem/src/domain/exception/UserNotFoundException.java +++ b/MailSystem/src/domain/user/UserNotFoundException.java @@ -1,4 +1,4 @@ -package domain.exception; +package domain.user; public class UserNotFoundException extends Exception { public UserNotFoundException(String error) {