From 72c8d2b9b0f00f6d9eb6ff438609017e596d2352 Mon Sep 17 00:00:00 2001 From: Mahgs Date: Mon, 9 Mar 2020 14:39:46 +0100 Subject: [PATCH 1/4] added Tests and fix addUserEvent --- src/main/java/mops/gruppen2/domain/Group.java | 4 ++- src/main/java/mops/gruppen2/domain/User.java | 6 +++- .../java/mops/gruppen2/domain/GroupTest.java | 33 +++++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/main/java/mops/gruppen2/domain/Group.java b/src/main/java/mops/gruppen2/domain/Group.java index 2716aeb..843a1b1 100644 --- a/src/main/java/mops/gruppen2/domain/Group.java +++ b/src/main/java/mops/gruppen2/domain/Group.java @@ -52,7 +52,9 @@ public class Group extends Aggregate { private void applyEvent(AddUserEvent event) { User user = new User(event.getUser_id(), event.getGivenname(), event.getFamilyname(), event.getEmail()); - this.members.add(user); + if (!this.members.contains(user)){ + this.members.add(user); + } } private void applyEvent(UpdateGroupTitleEvent event) { diff --git a/src/main/java/mops/gruppen2/domain/User.java b/src/main/java/mops/gruppen2/domain/User.java index d162b94..efb14b9 100644 --- a/src/main/java/mops/gruppen2/domain/User.java +++ b/src/main/java/mops/gruppen2/domain/User.java @@ -2,12 +2,16 @@ package mops.gruppen2.domain; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.Value; -@Data +@Value @AllArgsConstructor +@EqualsAndHashCode(exclude = {"givenname", "familyname", "email"}) public class User { String user_id; + String givenname; String familyname; String email; diff --git a/src/test/java/mops/gruppen2/domain/GroupTest.java b/src/test/java/mops/gruppen2/domain/GroupTest.java index 3901fe0..2d814aa 100644 --- a/src/test/java/mops/gruppen2/domain/GroupTest.java +++ b/src/test/java/mops/gruppen2/domain/GroupTest.java @@ -2,6 +2,7 @@ package mops.gruppen2.domain; import mops.gruppen2.domain.event.AddUserEvent; import mops.gruppen2.domain.event.CreateGroupEvent; +import mops.gruppen2.domain.event.DeleteUserEvent; import mops.gruppen2.domain.event.UpdateRoleEvent; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; @@ -47,6 +48,38 @@ class GroupTest { assertThat(group.getMembers().get(0)).isEqualTo(user); } + @Test + void addExistingUser() { + CreateGroupEvent createGroupEvent = new CreateGroupEvent(1,1,"prof1", "hi", "foo"); + Group group = new Group(); + group.applyEvent(createGroupEvent); + + User user1 = new User("prof", "jens", "bendi", "hi@gmail.com"); + AddUserEvent addUserEvent1 = new AddUserEvent(2,1, user1); + group.applyEvent(addUserEvent1); + + User user2 = new User("prof", "olga", "bendi", "hi@gmail.com"); + AddUserEvent addUserEvent2 = new AddUserEvent(3,1, user2); + group.applyEvent(addUserEvent2); + + assertThat(group.getMembers().size()).isEqualTo(1); + } + + @Test + void deleteSingleUser() { + CreateGroupEvent createGroupEvent = new CreateGroupEvent(1, 2, "Prof", "Tolle Gruppe", "Tolle Beshreibung"); + User user = new User("Prof", "Pro", "fessor", "pro@fessor.de"); + AddUserEvent addUserEvent = new AddUserEvent(2, 2, user); + Group group = new Group(); + group.applyEvent(createGroupEvent); + group.applyEvent(addUserEvent); + + DeleteUserEvent deleteUserEvent = new DeleteUserEvent(3, 2, "Prof"); + group.applyEvent(deleteUserEvent); + + assertThat(group.getMembers().size()).isEqualTo(0); + } + // Verwendet CreateGroupEvent und AddUserEvent @Test void updateRoleForExistingUser() { From b30a4d02f9782281510635b4aac22e9a56a87885 Mon Sep 17 00:00:00 2001 From: Mahgs Date: Mon, 9 Mar 2020 16:18:14 +0100 Subject: [PATCH 2/4] Implemented Exeption and their handling --- .../java/mops/gruppen2/domain/Aggregate.java | 17 +++++++++++++-- .../domain/Exceptions/EventException.java | 14 +++++++++++++ .../UserAlreadyExistsException.java | 7 +++++++ .../Exceptions/UserNotFoundException.java | 7 +++++++ src/main/java/mops/gruppen2/domain/Group.java | 13 +++++++----- .../mops/gruppen2/service/GroupService.java | 9 +++++++- .../java/mops/gruppen2/domain/GroupTest.java | 21 ++++++++++++------- 7 files changed, 73 insertions(+), 15 deletions(-) create mode 100644 src/main/java/mops/gruppen2/domain/Exceptions/EventException.java create mode 100644 src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java create mode 100644 src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java diff --git a/src/main/java/mops/gruppen2/domain/Aggregate.java b/src/main/java/mops/gruppen2/domain/Aggregate.java index 294cc60..e7a7b23 100644 --- a/src/main/java/mops/gruppen2/domain/Aggregate.java +++ b/src/main/java/mops/gruppen2/domain/Aggregate.java @@ -1,10 +1,17 @@ package mops.gruppen2.domain; +import com.google.common.base.Throwables; import lombok.Getter; +import mops.gruppen2.domain.Exceptions.EventException; +import mops.gruppen2.domain.Exceptions.UserAlreadyExistsException; import mops.gruppen2.domain.event.Event; +import javax.swing.table.TableRowSorter; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import static java.lang.String.format; + /** * Repräsentiert viele Events als aggregiertes Objekt. */ @@ -18,13 +25,19 @@ public abstract class Aggregate { * * @param event Event, welches aggregiert wird */ - public void applyEvent(Event event) { + public void applyEvent(Event event) throws EventException { try { Method method = this.getClass().getDeclaredMethod("applyEvent", event.getClass()); method.setAccessible(true); method.invoke(this, event); - } catch (Exception e) { + } + catch (IllegalAccessException e) { e.printStackTrace(); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + EventException f = (EventException) e.getTargetException(); + throw f; } } } diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java b/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java new file mode 100644 index 0000000..20bb176 --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java @@ -0,0 +1,14 @@ +package mops.gruppen2.domain.Exceptions; + +public class EventException extends Exception { + private String msg; + + public EventException(String msg) { + this.msg = msg; + } + + @Override + public String getMessage() { + return msg; + } +} diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java b/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java new file mode 100644 index 0000000..8896356 --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java @@ -0,0 +1,7 @@ +package mops.gruppen2.domain.Exceptions; + +public class UserAlreadyExistsException extends EventException { + public UserAlreadyExistsException(String msg){ + super(msg); + } +} diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java b/src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java new file mode 100644 index 0000000..f7e0080 --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java @@ -0,0 +1,7 @@ +package mops.gruppen2.domain.Exceptions; + +public class UserNotFoundException extends EventException{ + public UserNotFoundException(String msg){ + super(msg); + } +} diff --git a/src/main/java/mops/gruppen2/domain/Group.java b/src/main/java/mops/gruppen2/domain/Group.java index 843a1b1..26ed5a5 100644 --- a/src/main/java/mops/gruppen2/domain/Group.java +++ b/src/main/java/mops/gruppen2/domain/Group.java @@ -2,6 +2,8 @@ package mops.gruppen2.domain; import lombok.EqualsAndHashCode; import lombok.Getter; +import mops.gruppen2.domain.Exceptions.UserAlreadyExistsException; +import mops.gruppen2.domain.Exceptions.UserNotFoundException; import mops.gruppen2.domain.event.*; import java.util.*; @@ -28,7 +30,7 @@ public class Group extends Aggregate { id = event.getGroup_id(); } - private void applyEvent(UpdateRoleEvent event) { + private void applyEvent(UpdateRoleEvent event) throws UserNotFoundException { User user; Optional userOptional = members.stream() @@ -38,8 +40,7 @@ public class Group extends Aggregate { if (userOptional.isPresent()) { user = userOptional.get(); } else { - System.out.println("UserNotFoundException"); - return; + throw new UserNotFoundException("Nutzer wurde nicht gefunden!"); } if (roles.containsKey(user) && event.getNewRole() == Role.STUDENT) { @@ -49,11 +50,13 @@ public class Group extends Aggregate { } } - private void applyEvent(AddUserEvent event) { + private void applyEvent(AddUserEvent event) throws UserAlreadyExistsException { User user = new User(event.getUser_id(), event.getGivenname(), event.getFamilyname(), event.getEmail()); - if (!this.members.contains(user)){ + if (!this.members.contains(user)) { this.members.add(user); + } else { + throw new UserAlreadyExistsException("Nutzer bereits in Gruppe vorhanden!"); } } diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index 42e9d31..06356fa 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -1,5 +1,6 @@ package mops.gruppen2.service; +import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.event.Event; import org.springframework.stereotype.Service; @@ -19,7 +20,13 @@ public class GroupService { Group buildGroupFromEvents(List eventList) { Group newGroup = new Group(); - eventList.forEach(newGroup::applyEvent); + try { + for (Event event : eventList) { + newGroup.applyEvent(event); + } + }catch (EventException e){ + e.printStackTrace(); + } return newGroup; } diff --git a/src/test/java/mops/gruppen2/domain/GroupTest.java b/src/test/java/mops/gruppen2/domain/GroupTest.java index 2d814aa..014c036 100644 --- a/src/test/java/mops/gruppen2/domain/GroupTest.java +++ b/src/test/java/mops/gruppen2/domain/GroupTest.java @@ -1,9 +1,11 @@ package mops.gruppen2.domain; +import mops.gruppen2.domain.Exceptions.UserAlreadyExistsException; import mops.gruppen2.domain.event.AddUserEvent; import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.domain.event.DeleteUserEvent; import mops.gruppen2.domain.event.UpdateRoleEvent; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -23,12 +25,14 @@ class GroupTest { } @Test - void createSingleGroup() { + void createSingleGroup() throws Exception{ CreateGroupEvent createGroupEvent = new CreateGroupEvent(1,2, "asd", "hello", "foo"); Group group = new Group(); + group.applyEvent(createGroupEvent); + assertThat(group.getDescription()).isEqualTo("foo"); assertThat(group.getTitle()).isEqualTo("hello"); assertThat(group.getId()).isEqualTo(2); @@ -36,7 +40,7 @@ class GroupTest { // Verwendet CreateGroupEvent @Test - void addSingleUser() { + void addSingleUser() throws Exception{ CreateGroupEvent createGroupEvent = new CreateGroupEvent(1,1,"prof1", "hi", "foo"); Group group = new Group(); group.applyEvent(createGroupEvent); @@ -49,7 +53,7 @@ class GroupTest { } @Test - void addExistingUser() { + void addExistingUser() throws Exception{ CreateGroupEvent createGroupEvent = new CreateGroupEvent(1,1,"prof1", "hi", "foo"); Group group = new Group(); group.applyEvent(createGroupEvent); @@ -60,13 +64,16 @@ class GroupTest { User user2 = new User("prof", "olga", "bendi", "hi@gmail.com"); AddUserEvent addUserEvent2 = new AddUserEvent(3,1, user2); - group.applyEvent(addUserEvent2); + Assertions.assertThrows(UserAlreadyExistsException.class, () ->{ + group.applyEvent(addUserEvent2); + }); - assertThat(group.getMembers().size()).isEqualTo(1); + + //assertThat(group.getMembers().size()).isEqualTo(1); } @Test - void deleteSingleUser() { + void deleteSingleUser() throws Exception{ CreateGroupEvent createGroupEvent = new CreateGroupEvent(1, 2, "Prof", "Tolle Gruppe", "Tolle Beshreibung"); User user = new User("Prof", "Pro", "fessor", "pro@fessor.de"); AddUserEvent addUserEvent = new AddUserEvent(2, 2, user); @@ -82,7 +89,7 @@ class GroupTest { // Verwendet CreateGroupEvent und AddUserEvent @Test - void updateRoleForExistingUser() { + void updateRoleForExistingUser() throws Exception{ // Arrange CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L, 1L, "1L", "gruppe1", "Eine Testgruppe"); AddUserEvent addUserEvent = new AddUserEvent(1L, 1L, "5L", "Peter", "Pan", "123@mail.de"); From 3c51896fb061b40bcf88a566f19e029f0275f5d5 Mon Sep 17 00:00:00 2001 From: Mahgs Date: Mon, 9 Mar 2020 16:29:18 +0100 Subject: [PATCH 3/4] added Tests for Title and Description --- .../java/mops/gruppen2/domain/GroupTest.java | 40 +++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/src/test/java/mops/gruppen2/domain/GroupTest.java b/src/test/java/mops/gruppen2/domain/GroupTest.java index 014c036..c81e2cf 100644 --- a/src/test/java/mops/gruppen2/domain/GroupTest.java +++ b/src/test/java/mops/gruppen2/domain/GroupTest.java @@ -1,10 +1,8 @@ package mops.gruppen2.domain; import mops.gruppen2.domain.Exceptions.UserAlreadyExistsException; -import mops.gruppen2.domain.event.AddUserEvent; -import mops.gruppen2.domain.event.CreateGroupEvent; -import mops.gruppen2.domain.event.DeleteUserEvent; -import mops.gruppen2.domain.event.UpdateRoleEvent; +import mops.gruppen2.domain.Exceptions.UserNotFoundException; +import mops.gruppen2.domain.event.*; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; @@ -19,7 +17,6 @@ class GroupTest { } - @Disabled @Test void applyEvent() { } @@ -109,10 +106,39 @@ class GroupTest { .containsValue(Role.ORGA); } - @Disabled @Test - void updateRoleForNonExistingUser() { + void updateRoleForNonExistingUser() throws Exception{ + CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L, 1L, "1L", "gruppe1", "Eine Testgruppe"); + UpdateRoleEvent updateRoleEvent = new UpdateRoleEvent(345L, 33 , "coolerUser", Role.ADMIN); + Group group = new Group(); + group.applyEvent(createGroupEvent); + Assertions.assertThrows(UserNotFoundException.class, () ->{ + group.applyEvent(updateRoleEvent); + }); } + @Test + void updateTitle() throws Exception{ + CreateGroupEvent createGroupEvent = new CreateGroupEvent(1,1,"prof1", "hi", "foo"); + Group group = new Group(); + group.applyEvent(createGroupEvent); + + UpdateGroupTitleEvent updateGroupTitleEvent = new UpdateGroupTitleEvent(2, 1, "Klaus", "Toller Titel"); + group.applyEvent(updateGroupTitleEvent); + + assertThat(group.getTitle()).isEqualTo("Toller Titel"); + } + + @Test + void updateBeschreibung() throws Exception{ + CreateGroupEvent createGroupEvent = new CreateGroupEvent(1,1,"prof1", "hi", "foo"); + Group group = new Group(); + group.applyEvent(createGroupEvent); + + UpdateGroupDescriptionEvent updateGroupDescriptionEvent = new UpdateGroupDescriptionEvent(2, 1, "Peter", "Tolle Beschreibung"); + group.applyEvent(updateGroupDescriptionEvent); + + assertThat(group.getDescription()).isEqualTo("Tolle Beschreibung"); + } } From 6f1f802b6d7cd7851718bc088662e1b0704b4200 Mon Sep 17 00:00:00 2001 From: Mahgs Date: Mon, 9 Mar 2020 16:41:52 +0100 Subject: [PATCH 4/4] added Exception for deleteUserEvent --- src/main/java/mops/gruppen2/domain/Group.java | 13 +++++++------ src/test/java/mops/gruppen2/domain/GroupTest.java | 15 ++++++++++++++- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/main/java/mops/gruppen2/domain/Group.java b/src/main/java/mops/gruppen2/domain/Group.java index 26ed5a5..03eb2fb 100644 --- a/src/main/java/mops/gruppen2/domain/Group.java +++ b/src/main/java/mops/gruppen2/domain/Group.java @@ -68,12 +68,13 @@ public class Group extends Aggregate { this.description = event.getNewGroupDescription(); } - private void applyEvent(DeleteUserEvent event) { - for (User user : members) { - if (user.getUser_id().equals(event.getUser_id())) { - this.members.remove(user); - break; - } + private void applyEvent(DeleteUserEvent event) throws UserNotFoundException{ + User user = new User(event.getUser_id(), "","",""); + + if (this.members.contains(user)) { + this.members.remove(user); + } else { + throw new UserNotFoundException("Nutzer wurde nicht gefunden!"); } } } diff --git a/src/test/java/mops/gruppen2/domain/GroupTest.java b/src/test/java/mops/gruppen2/domain/GroupTest.java index c81e2cf..65906bc 100644 --- a/src/test/java/mops/gruppen2/domain/GroupTest.java +++ b/src/test/java/mops/gruppen2/domain/GroupTest.java @@ -66,7 +66,7 @@ class GroupTest { }); - //assertThat(group.getMembers().size()).isEqualTo(1); + assertThat(group.getMembers().size()).isEqualTo(1); } @Test @@ -84,6 +84,19 @@ class GroupTest { assertThat(group.getMembers().size()).isEqualTo(0); } + @Test + void deleteUserThatDoesNotExists() throws Exception{ + CreateGroupEvent createGroupEvent = new CreateGroupEvent(1, 2, "Prof", "Tolle Gruppe", "Tolle Beshreibung"); + Group group = new Group(); + group.applyEvent(createGroupEvent); + + DeleteUserEvent deleteUserEvent = new DeleteUserEvent(3, 2, "Prof"); + + Assertions.assertThrows(UserNotFoundException.class, () ->{ + group.applyEvent(deleteUserEvent); + }); + } + // Verwendet CreateGroupEvent und AddUserEvent @Test void updateRoleForExistingUser() throws Exception{