From 1394257c0b5c69ebdb1f039b87569340c256359e Mon Sep 17 00:00:00 2001
From: obai Albek <3009594@stud.hs-mannheim.de>
Date: Fri, 12 Sep 2025 15:49:30 +0200
Subject: [PATCH] Add Project to my Repo
---
MyLocalChat/.project | 23 +++
MyLocalChat/pom.xml | 7 +
MyLocalChat/src/main/java/app/Main.java | 14 ++
.../src/main/java/domain/ChatRoom.java | 88 ++++++++++++
MyLocalChat/src/main/java/domain/Message.java | 55 ++++++++
.../src/main/java/domain/MessageType.java | 5 +
MyLocalChat/src/main/java/domain/User.java | 53 +++++++
.../src/main/java/domain/UserContacts.java | 53 +++++++
.../src/main/java/domain/UserInfo.java | 6 +
.../src/main/java/fassade/ChatService.java | 133 ++++++++++++++++++
MyLocalChat/src/main/java/ui/Chat.java | 25 ++++
.../src/test/java/test/ChatRoomTest.java | 77 ++++++++++
.../src/test/java/test/ChatServiceTest.java | 117 +++++++++++++++
.../src/test/java/test/IntegrationTest.java | 66 +++++++++
.../src/test/java/test/MessageTest.java | 51 +++++++
MyLocalChat/src/test/java/test/UserTest.java | 54 +++++++
16 files changed, 827 insertions(+)
create mode 100644 MyLocalChat/.project
create mode 100644 MyLocalChat/pom.xml
create mode 100644 MyLocalChat/src/main/java/app/Main.java
create mode 100644 MyLocalChat/src/main/java/domain/ChatRoom.java
create mode 100644 MyLocalChat/src/main/java/domain/Message.java
create mode 100644 MyLocalChat/src/main/java/domain/MessageType.java
create mode 100644 MyLocalChat/src/main/java/domain/User.java
create mode 100644 MyLocalChat/src/main/java/domain/UserContacts.java
create mode 100644 MyLocalChat/src/main/java/domain/UserInfo.java
create mode 100644 MyLocalChat/src/main/java/fassade/ChatService.java
create mode 100644 MyLocalChat/src/main/java/ui/Chat.java
create mode 100644 MyLocalChat/src/test/java/test/ChatRoomTest.java
create mode 100644 MyLocalChat/src/test/java/test/ChatServiceTest.java
create mode 100644 MyLocalChat/src/test/java/test/IntegrationTest.java
create mode 100644 MyLocalChat/src/test/java/test/MessageTest.java
create mode 100644 MyLocalChat/src/test/java/test/UserTest.java
diff --git a/MyLocalChat/.project b/MyLocalChat/.project
new file mode 100644
index 0000000..da77eea
--- /dev/null
+++ b/MyLocalChat/.project
@@ -0,0 +1,23 @@
+
+
+ MyLocalChat
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/MyLocalChat/pom.xml b/MyLocalChat/pom.xml
new file mode 100644
index 0000000..71728f6
--- /dev/null
+++ b/MyLocalChat/pom.xml
@@ -0,0 +1,7 @@
+
+ 4.0.0
+ com.github.ObaiAlbek
+ MyLocalChat
+ 0.0.1-SNAPSHOT
+ LocalChat
+
\ No newline at end of file
diff --git a/MyLocalChat/src/main/java/app/Main.java b/MyLocalChat/src/main/java/app/Main.java
new file mode 100644
index 0000000..6e06727
--- /dev/null
+++ b/MyLocalChat/src/main/java/app/Main.java
@@ -0,0 +1,14 @@
+package app;
+
+import java.util.List;
+
+import domain.*;
+import fassade.ChatService;
+
+public class Main {
+
+ public static void main(String[] args) {
+
+ }
+
+}
diff --git a/MyLocalChat/src/main/java/domain/ChatRoom.java b/MyLocalChat/src/main/java/domain/ChatRoom.java
new file mode 100644
index 0000000..1721054
--- /dev/null
+++ b/MyLocalChat/src/main/java/domain/ChatRoom.java
@@ -0,0 +1,88 @@
+package domain;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ChatRoom {
+ private static int nextRoomId = 1000;
+ private int roomId;
+ private String roomName;
+ private List messages;
+ private final LocalDateTime createdAt;
+ private List participants;
+
+ public ChatRoom(String roomName, User user1, User user2) {
+ this.roomId = nextRoomId++;
+ this.roomName = roomName;
+ this.messages = new ArrayList<>();
+ this.createdAt = LocalDateTime.now();
+ this.participants = new ArrayList<>();
+ this.participants.add(user1);
+ this.participants.add(user2);
+ }
+
+ public ChatRoom(String roomName, List participants) {
+ this.roomId = nextRoomId++;
+ this.roomName = roomName;
+ this.messages = new ArrayList<>();
+ this.createdAt = LocalDateTime.now();
+ this.participants = new ArrayList<>(participants);
+ }
+
+ public void addMessage(Message message) {
+ if (messages == null)
+ messages = new ArrayList<>();
+
+ messages.add(message);
+ }
+
+ public boolean addParticipant(User user) {
+ if (!participants.contains(user)) {
+ participants.add(user);
+ return true;
+ }
+ return false;
+ }
+
+ // Getter und Setter
+ public int getRoomId() {
+ return roomId;
+ }
+
+ public String getRoomName() {
+ return roomName;
+ }
+
+ public void setRoomName(String roomName) {
+ this.roomName = roomName;
+ }
+
+ public List getMessages() {
+ return messages;
+ }
+
+ public LocalDateTime getCreatedAt() {
+ return createdAt;
+ }
+
+ public List getParticipants() {
+ return participants;
+ }
+
+ @Override
+ public String toString() {
+ return "ChatRoom [roomId=" + roomId + ", roomName=" + roomName +
+ ", createdAt=" + createdAt + ", participants=" +
+ participants.stream().map(User::getUsername).toList() + "]";
+ }
+
+ public List showMessages(){
+ if (messages == null || messages.isEmpty())
+ return new ArrayList<>();
+
+ return messages.stream()
+ .map(Message::toString)
+ .toList();
+ }
+}
\ No newline at end of file
diff --git a/MyLocalChat/src/main/java/domain/Message.java b/MyLocalChat/src/main/java/domain/Message.java
new file mode 100644
index 0000000..c592e84
--- /dev/null
+++ b/MyLocalChat/src/main/java/domain/Message.java
@@ -0,0 +1,55 @@
+package domain;
+
+import java.time.LocalDateTime;
+
+
+public class Message {
+ private User sender;
+ private String content;
+ private LocalDateTime timestamp;
+ //private MessageType type;
+
+ public Message(User sender, String content) {
+ super();
+ this.sender = sender;
+ this.content = content;
+ this.timestamp = LocalDateTime.now();
+ }
+
+
+ public User getSender() {
+ return sender;
+ }
+
+ public void setSender(User sender) {
+ this.sender = sender;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public LocalDateTime getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(LocalDateTime timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ @Override
+ public String toString() {
+ return "Message [sender=" + sender.getUsername() + ", content=" + content + ", timestamp="
+ + timestamp + "]";
+ }
+
+
+
+
+
+}
+
diff --git a/MyLocalChat/src/main/java/domain/MessageType.java b/MyLocalChat/src/main/java/domain/MessageType.java
new file mode 100644
index 0000000..40608cd
--- /dev/null
+++ b/MyLocalChat/src/main/java/domain/MessageType.java
@@ -0,0 +1,5 @@
+package domain;
+
+public enum MessageType {
+ TEXT,LINK;
+}
diff --git a/MyLocalChat/src/main/java/domain/User.java b/MyLocalChat/src/main/java/domain/User.java
new file mode 100644
index 0000000..e4a5846
--- /dev/null
+++ b/MyLocalChat/src/main/java/domain/User.java
@@ -0,0 +1,53 @@
+package domain;
+
+public class User {
+ private static int nextUserId = 1000;
+ private int userId;
+ private final String username;
+ private boolean isOnline;
+ private UserInfo userInfo;
+ private UserContacts userContacts;
+
+ public User(String username) {
+ this.userId = nextUserId++;
+ this.username = username;
+ this.isOnline = true;
+ this.userInfo = UserInfo.VERFÜGBAR;
+ this.userContacts = new UserContacts();
+ }
+
+ public int getUserId() {
+ return userId;
+ }
+
+ public boolean isOnline() {
+ return isOnline;
+ }
+
+ public void setOnline(boolean isOnline) {
+ this.isOnline = isOnline;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public UserInfo getUserInfo() {
+ return userInfo;
+ }
+
+ public void setUserInfo(UserInfo userInfo) {
+ this.userInfo = userInfo;
+ }
+
+ public UserContacts getUserContacts() {
+ return userContacts;
+ }
+
+ @Override
+ public String toString() {
+ return "User [userId=" + userId + ", username=" + username + ", isOnline=" + isOnline + ", userInfo=" + userInfo
+ + "]";
+ }
+
+}
\ No newline at end of file
diff --git a/MyLocalChat/src/main/java/domain/UserContacts.java b/MyLocalChat/src/main/java/domain/UserContacts.java
new file mode 100644
index 0000000..fa2ec60
--- /dev/null
+++ b/MyLocalChat/src/main/java/domain/UserContacts.java
@@ -0,0 +1,53 @@
+package domain;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+public class UserContacts {
+ private List contacts;
+
+ public UserContacts() {
+ this.contacts = new ArrayList<>();
+ }
+
+ public boolean addContact(User user) {
+ if (user == null)
+ throw new NullPointerException("User darf nicht null sein");
+
+ if (contacts.contains(user))
+ throw new IllegalArgumentException("User existiert bereits in der Kontakt Liste");
+
+ return contacts.add(user);
+ }
+
+ public boolean removeContact(User user) {
+ if (user == null)
+ throw new NullPointerException("User darf nicht null sein");
+ return contacts.remove(user);
+ }
+
+ public boolean hasContact(User user) {
+ if (user == null)
+ throw new NullPointerException("User darf nicht null sein");
+ return contacts.contains(user);
+ }
+
+ public List showAllContacts() {
+ if (contacts == null || contacts.isEmpty()) {
+ return new ArrayList<>();
+ }
+
+ return contacts.stream()
+ .map(User::toString)
+ .toList();
+ }
+
+ public List getContacts() {
+ return new ArrayList<>(contacts);
+ }
+
+ public int getContactCount() {
+ return contacts.size();
+ }
+}
\ No newline at end of file
diff --git a/MyLocalChat/src/main/java/domain/UserInfo.java b/MyLocalChat/src/main/java/domain/UserInfo.java
new file mode 100644
index 0000000..8f5edae
--- /dev/null
+++ b/MyLocalChat/src/main/java/domain/UserInfo.java
@@ -0,0 +1,6 @@
+package domain;
+
+public enum UserInfo {
+ VERFÜGBAR,BESCHÄFTIGT,IN_DER_SCHULE,IM_KINO,BEI_DER_ARBEIT,AKKU_FAST_LEER,SCHLAFE;
+
+}
diff --git a/MyLocalChat/src/main/java/fassade/ChatService.java b/MyLocalChat/src/main/java/fassade/ChatService.java
new file mode 100644
index 0000000..534db52
--- /dev/null
+++ b/MyLocalChat/src/main/java/fassade/ChatService.java
@@ -0,0 +1,133 @@
+package fassade;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import domain.*;
+
+public class ChatService {
+ private Map chatrooms;
+ private Map users;
+
+ public ChatService() {
+ chatrooms = new HashMap<>();
+ users = new HashMap<>();
+ }
+
+ public boolean createUser(String userName) {
+ if (users.containsKey(userName))
+ throw new IllegalArgumentException("User existiert bereits: " + userName);
+
+ User tempUser = new User(userName);
+ users.put(userName, tempUser);
+ return true;
+ }
+
+ private User getUser(String userName) {
+ return users.get(userName);
+ }
+
+
+
+ public int createChatRoom(String roomName, String user1Name, String user2Name) {
+ User user1 = getUser(user1Name);
+ User user2 = getUser(user2Name);
+
+ if (user1 == null || user2 == null)
+ throw new IllegalArgumentException("User existiert nicht");
+
+ ChatRoom tempChatRoom = new ChatRoom(roomName, user1, user2);
+ chatrooms.put(tempChatRoom.getRoomId(), tempChatRoom);
+ return tempChatRoom.getRoomId();
+ }
+
+ public int createGroupChat(String roomName, List participantNames) {
+ if (participantNames == null || participantNames.size() < 2) {
+ throw new IllegalArgumentException("Mindestens 2 Teilnehmer benötigt");
+ }
+
+ List participants = new ArrayList<>();
+ for (String name : participantNames) {
+ User user = getUser(name);
+ if (user == null) {
+ throw new IllegalArgumentException("User existiert nicht: " + name);
+ }
+ participants.add(user);
+ }
+
+ ChatRoom tempChatRoom = new ChatRoom(roomName, participants);
+ chatrooms.put(tempChatRoom.getRoomId(), tempChatRoom);
+ return tempChatRoom.getRoomId();
+ }
+
+ public void sendMessage(int roomId, String senderName, String content) {
+ ChatRoom room = chatrooms.get(roomId);
+ if (room == null)
+ throw new IllegalArgumentException("Chatroom existiert nicht: " + roomId);
+
+ User sender = getUser(senderName);
+ if (sender == null) {
+ throw new IllegalArgumentException("Sender existiert nicht: " + senderName);
+ }
+
+ if (!room.getParticipants().contains(sender))
+ throw new IllegalArgumentException("Sender ist nicht Teil des Chatrooms");
+
+ Message message = new Message(sender, content);
+ room.addMessage(message);
+ }
+
+ public List showMessages(int roomId) {
+ ChatRoom room = chatrooms.get(roomId);
+ if (room == null)
+ throw new IllegalArgumentException("Chatroom existiert nicht: " + roomId);
+
+ return room.showMessages();
+ }
+
+ public boolean addContact(String contactUserName, String currentUserName) {
+ if (!users.containsKey(contactUserName))
+ throw new IllegalArgumentException("User existiert nicht: " + contactUserName);
+
+ if (!users.containsKey(currentUserName))
+ throw new IllegalArgumentException("User existiert nicht: " + currentUserName);
+
+ User contactUser = users.get(contactUserName);
+ User currentUser = users.get(currentUserName);
+
+ return currentUser.getUserContacts().addContact(contactUser);
+ }
+
+ public List getUserContacts(String userName) {
+ if (!users.containsKey(userName))
+ throw new IllegalArgumentException("User existiert nicht: " + userName);
+
+ User user = users.get(userName);
+ return user.getUserContacts().showAllContacts();
+ }
+
+ public List getUserChatRoomIds(String userName) {
+ if (!users.containsKey(userName))
+ throw new IllegalArgumentException("User existiert nicht: " + userName);
+
+ User user = users.get(userName);
+ List roomIds = new ArrayList<>();
+
+ for (ChatRoom room : chatrooms.values()) {
+ if (room.getParticipants().contains(user)) {
+ roomIds.add(room.getRoomId());
+ }
+ }
+
+ return roomIds;
+ }
+
+ public String getChatRoomInfo(int roomId) {
+ ChatRoom room = chatrooms.get(roomId);
+ if (room == null)
+ throw new IllegalArgumentException("Chatroom existiert nicht: " + roomId);
+
+ return room.toString();
+ }
+}
\ No newline at end of file
diff --git a/MyLocalChat/src/main/java/ui/Chat.java b/MyLocalChat/src/main/java/ui/Chat.java
new file mode 100644
index 0000000..df326b7
--- /dev/null
+++ b/MyLocalChat/src/main/java/ui/Chat.java
@@ -0,0 +1,25 @@
+package ui;
+
+
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.border.EmptyBorder;
+
+public class Chat extends JFrame {
+
+ private static final long serialVersionUID = 1L;
+ private JPanel contentPane;
+
+
+
+
+ public Chat() {
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ setBounds(100, 100, 567, 400);
+ contentPane = new JPanel();
+ contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
+ setContentPane(contentPane);
+ contentPane.setLayout(null);
+
+ }
+}
diff --git a/MyLocalChat/src/test/java/test/ChatRoomTest.java b/MyLocalChat/src/test/java/test/ChatRoomTest.java
new file mode 100644
index 0000000..6c29b86
--- /dev/null
+++ b/MyLocalChat/src/test/java/test/ChatRoomTest.java
@@ -0,0 +1,77 @@
+package test;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+
+import domain.*;
+
+import java.util.List;
+
+public class ChatRoomTest {
+
+ @Test
+ public void testChatRoomCreation() {
+ User user1 = new User("User1");
+ User user2 = new User("User2");
+ ChatRoom room = new ChatRoom("TestRoom", user1, user2);
+
+ assertEquals("TestRoom", room.getRoomName());
+ assertEquals(2, room.getParticipants().size());
+ assertTrue(room.getParticipants().contains(user1));
+ assertTrue(room.getParticipants().contains(user2));
+ assertNotNull(room.getCreatedAt());
+ assertTrue(room.getRoomId() >= 1000);
+ }
+
+ @Test
+ public void testAddMessageToChatRoom() {
+ User user1 = new User("User1");
+ User user2 = new User("User2");
+ ChatRoom room = new ChatRoom("TestRoom", user1, user2);
+
+ Message message = new Message(user1, "Hallo!");
+ room.addMessage(message);
+
+ assertEquals(1, room.getMessages().size());
+ assertEquals(message, room.getMessages().get(0));
+ }
+
+ @Test
+ public void testShowMessages() {
+ User user1 = new User("User1");
+ User user2 = new User("User2");
+ ChatRoom room = new ChatRoom("TestRoom", user1, user2);
+
+ room.addMessage(new Message(user1, "Nachricht 1"));
+ room.addMessage(new Message(user2, "Nachricht 2"));
+
+ List messages = room.showMessages();
+ assertEquals(2, messages.size());
+ assertTrue(messages.get(0).contains("Nachricht 1"));
+ assertTrue(messages.get(1).contains("Nachricht 2"));
+ }
+
+ @Test
+ public void testAddParticipant() {
+ User user1 = new User("User1");
+ User user2 = new User("User2");
+ User user3 = new User("User3");
+ ChatRoom room = new ChatRoom("TestRoom", user1, user2);
+
+ assertTrue(room.addParticipant(user3));
+ assertEquals(3, room.getParticipants().size());
+ assertTrue(room.getParticipants().contains(user3));
+ }
+
+ @Test
+ public void testAddDuplicateParticipant() {
+ User user1 = new User("User1");
+ User user2 = new User("User2");
+ ChatRoom room = new ChatRoom("TestRoom", user1, user2);
+
+ assertFalse(room.addParticipant(user1)); // Bereits vorhanden
+ assertEquals(2, room.getParticipants().size());
+ }
+
+
+}
\ No newline at end of file
diff --git a/MyLocalChat/src/test/java/test/ChatServiceTest.java b/MyLocalChat/src/test/java/test/ChatServiceTest.java
new file mode 100644
index 0000000..649ed6e
--- /dev/null
+++ b/MyLocalChat/src/test/java/test/ChatServiceTest.java
@@ -0,0 +1,117 @@
+package test;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+import org.junit.Before;
+import fassade.ChatService;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class ChatServiceTest {
+
+ private ChatService chatService;
+
+ @Before
+ public void setUp() {
+ chatService = new ChatService();
+ chatService.createUser("User1");
+ chatService.createUser("User2");
+ chatService.createUser("User3");
+ }
+
+ @Test
+ public void testCreateUser() {
+ boolean result = chatService.createUser("NewUser");
+ assertTrue(result);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testCreateDuplicateUser() {
+ chatService.createUser("User1"); // Bereits existiert
+ }
+
+ @Test
+ public void testCreateChatRoom() {
+ int roomId = chatService.createChatRoom("TestRoom", "User1", "User2");
+ assertTrue(roomId >= 1000);
+
+ String roomInfo = chatService.getChatRoomInfo(roomId);
+ assertTrue(roomInfo.contains("TestRoom"));
+ assertTrue(roomInfo.contains("User1"));
+ assertTrue(roomInfo.contains("User2"));
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testCreateChatRoomWithNonExistentUser() {
+ chatService.createChatRoom("TestRoom", "NonExistent", "User2");
+ }
+
+ @Test
+ public void testSendAndRetrieveMessages() {
+ int roomId = chatService.createChatRoom("TestRoom", "User1", "User2");
+
+ chatService.sendMessage(roomId, "User1", "Hallo User2!");
+ chatService.sendMessage(roomId, "User2", "Hallo User1!");
+
+ List messages = chatService.showMessages(roomId);
+ assertEquals(2, messages.size());
+ assertTrue(messages.get(0).contains("Hallo User2!"));
+ assertTrue(messages.get(1).contains("Hallo User1!"));
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testSendMessageToNonExistentRoom() {
+ chatService.sendMessage(9999, "User1", "Test");
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testSendMessageFromNonParticipant() {
+ int roomId = chatService.createChatRoom("TestRoom", "User1", "User2");
+ chatService.sendMessage(roomId, "User3", "Ich bin nicht dabei!");
+ }
+
+ @Test
+ public void testGetUserChatRooms() {
+ int room1 = chatService.createChatRoom("Room1", "User1", "User2");
+ int room2 = chatService.createChatRoom("Room2", "User1", "User3");
+
+ List user1Rooms = chatService.getUserChatRoomIds("User1");
+ assertEquals(2, user1Rooms.size());
+
+ List user2Rooms = chatService.getUserChatRoomIds("User2");
+ assertEquals(1, user2Rooms.size());
+ assertEquals((Integer) room1, user2Rooms.get(0));
+ }
+
+ @Test
+ public void testCreateGroupChat() {
+ List participants = Arrays.asList("User1", "User2", "User3");
+ int roomId = chatService.createGroupChat("Gruppenchat", participants);
+
+ assertTrue(roomId >= 1000);
+ String roomInfo = chatService.getChatRoomInfo(roomId);
+ assertTrue(roomInfo.contains("Gruppenchat"));
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testCreateGroupChatWithTooFewParticipants() {
+ List participants = Arrays.asList("User1");
+ chatService.createGroupChat("UngültigerChat", participants);
+ }
+
+ @Test
+ public void testAddContact() {
+ boolean result = chatService.addContact("User2", "User1");
+ assertTrue(result);
+
+ List contacts = chatService.getUserContacts("User1");
+ assertEquals(1, contacts.size());
+ assertTrue(contacts.get(0).contains("User2"));
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testAddContactNonExistentUser() {
+ chatService.addContact("NonExistent", "User1");
+ }
+}
\ No newline at end of file
diff --git a/MyLocalChat/src/test/java/test/IntegrationTest.java b/MyLocalChat/src/test/java/test/IntegrationTest.java
new file mode 100644
index 0000000..3d2ccc9
--- /dev/null
+++ b/MyLocalChat/src/test/java/test/IntegrationTest.java
@@ -0,0 +1,66 @@
+package test;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+import fassade.ChatService;
+import java.util.Arrays;
+import java.util.List;
+
+public class IntegrationTest {
+
+ @Test
+ public void testCompleteChatFlow() {
+ ChatService chatService = new ChatService();
+
+ // Benutzer erstellen
+ chatService.createUser("Alice");
+ chatService.createUser("Bob");
+
+ // Chatroom erstellen
+ int roomId = chatService.createChatRoom("Alice-Bob-Chat", "Alice", "Bob");
+
+ // Nachrichten austauschen
+ chatService.sendMessage(roomId, "Alice", "Hallo Bob, wie geht's?");
+ chatService.sendMessage(roomId, "Bob", "Hallo Alice! Mir geht's gut, danke!");
+ chatService.sendMessage(roomId, "Alice", "Lust auf Kaffee?");
+
+ // Nachrichten überprüfen
+ List messages = chatService.showMessages(roomId);
+ assertEquals(3, messages.size());
+ assertTrue(messages.get(0).contains("Hallo Bob, wie geht's?"));
+ assertTrue(messages.get(1).contains("Mir geht's gut, danke!"));
+ assertTrue(messages.get(2).contains("Lust auf Kaffee?"));
+
+ // Chaträume der Benutzer überprüfen
+ assertEquals(1, chatService.getUserChatRoomIds("Alice").size());
+ assertEquals(1, chatService.getUserChatRoomIds("Bob").size());
+ }
+
+ @Test
+ public void testContactsWorkflow() {
+ ChatService chatService = new ChatService();
+
+ chatService.createUser("Alice");
+ chatService.createUser("Bob");
+ chatService.createUser("Charlie");
+
+ // Kontakte hinzufügen
+ chatService.addContact("Bob", "Alice");
+ chatService.addContact("Charlie", "Alice");
+
+ // Kontakte überprüfen
+ List contacts = chatService.getUserContacts("Alice");
+ assertEquals(2, contacts.size());
+
+ // Gruppenchat mit Kontakten erstellen
+ List participants = Arrays.asList("Alice", "Bob", "Charlie");
+ int roomId = chatService.createGroupChat("Freunde-Chat", participants);
+
+ // Chat nutzen
+ chatService.sendMessage(roomId, "Alice", "Hallo zusammen!");
+ chatService.sendMessage(roomId, "Bob", "Hallo Alice!");
+
+ List messages = chatService.showMessages(roomId);
+ assertEquals(2, messages.size());
+ }
+}
\ No newline at end of file
diff --git a/MyLocalChat/src/test/java/test/MessageTest.java b/MyLocalChat/src/test/java/test/MessageTest.java
new file mode 100644
index 0000000..8b67963
--- /dev/null
+++ b/MyLocalChat/src/test/java/test/MessageTest.java
@@ -0,0 +1,51 @@
+package test;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+import java.time.LocalDateTime;
+import domain.*;
+
+
+public class MessageTest {
+
+ @Test
+ public void testMessageCreation() {
+ User sender = new User("Sender");
+ Message message = new Message(sender, "Testnachricht");
+
+ assertEquals(sender, message.getSender());
+ assertEquals("Testnachricht", message.getContent());
+ assertNotNull(message.getTimestamp());
+ assertTrue(message.getTimestamp().isBefore(LocalDateTime.now().plusSeconds(1)));
+ assertTrue(message.getTimestamp().isAfter(LocalDateTime.now().minusSeconds(1)));
+ }
+
+ @Test
+ public void testMessageSetters() {
+ User sender1 = new User("Sender1");
+ User sender2 = new User("Sender2");
+ Message message = new Message(sender1, "Original");
+
+ message.setSender(sender2);
+ message.setContent("Geändert");
+
+ assertEquals(sender2, message.getSender());
+ assertEquals("Geändert", message.getContent());
+ }
+
+ @Test
+ public void testMessageToString() {
+ User sender = new User("TestSender");
+ Message message = new Message(sender, "Testinhalt");
+
+ String toString = message.toString();
+ assertTrue(toString.contains("TestSender"));
+ assertTrue(toString.contains("Testinhalt"));
+ assertTrue(toString.contains("timestamp"));
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testMessageWithNullSender() {
+ new Message(null, "Test");
+ }
+}
\ No newline at end of file
diff --git a/MyLocalChat/src/test/java/test/UserTest.java b/MyLocalChat/src/test/java/test/UserTest.java
new file mode 100644
index 0000000..d42f518
--- /dev/null
+++ b/MyLocalChat/src/test/java/test/UserTest.java
@@ -0,0 +1,54 @@
+package test;
+
+import static org.junit.jupiter.api.Assertions.*;
+import domain.*;
+
+import org.junit.jupiter.api.Test;
+
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+
+public class UserTest {
+
+ @Test
+ public void testUserCreation() {
+ User user = new User("TestUser");
+ assertEquals("TestUser", user.getUsername());
+ assertTrue(user.isOnline());
+ assertEquals(UserInfo.VERFÜGBAR, user.getUserInfo());
+ assertTrue(user.getUserId() >= 1000);
+ }
+
+ @Test
+ public void testUserStatusChange() {
+ User user = new User("TestUser");
+ user.setOnline(false);
+ assertFalse(user.isOnline());
+
+ user.setUserInfo(UserInfo.BESCHÄFTIGT);
+ assertEquals(UserInfo.BESCHÄFTIGT, user.getUserInfo());
+ }
+
+ @Test
+ public void testUserIdUniqueness() {
+ User user1 = new User("User1");
+ User user2 = new User("User2");
+ User user3 = new User("User3");
+
+ assertNotEquals(user1.getUserId(), user2.getUserId());
+ assertNotEquals(user2.getUserId(), user3.getUserId());
+ assertNotEquals(user1.getUserId(), user3.getUserId());
+ }
+
+ @Test
+ public void testUserToString() {
+ User user = new User("TestUser");
+ String toString = user.toString();
+ assertTrue(toString.contains("TestUser"));
+ assertTrue(toString.contains("VERFÜGBAR"));
+ }
+}
\ No newline at end of file