From 22e9379b372b0b1d8f3d4755a2c1d3f5bf19a7ee Mon Sep 17 00:00:00 2001 From: killerber4t Date: Mon, 23 Mar 2020 16:08:21 +0100 Subject: [PATCH 01/21] add EventServiceTest tests --- .../gruppen2/service/EventServiceTest.java | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index 4bf9601..a68172a 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -1,5 +1,6 @@ package mops.gruppen2.service; +import mops.gruppen2.Gruppen2Application; import mops.gruppen2.domain.GroupType; import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.dto.EventDTO; @@ -8,8 +9,14 @@ import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.repository.EventRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; @@ -20,51 +27,49 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +@ExtendWith(SpringExtension.class) +@SpringBootTest(classes = Gruppen2Application.class) +@Rollback +@Transactional @RunWith(MockitoJUnitRunner.class) class EventServiceTest { + @Autowired private EventRepository eventRepository; + @Autowired private EventService eventService; @BeforeEach void setUp() { - eventRepository = mock(EventRepository.class); - eventService = new EventService(mock(JsonService.class), eventRepository); + } @Test void getMaxID() { - when(eventRepository.getHighesEvent_ID()).thenReturn(42L); - - assertEquals(eventService.getMaxEvent_id(), 42L); + assertEquals(5L, eventService.getMaxEvent_id()); // weil in DataSQL eine Gruppe erstellt wird } @Test void checkGroupReturnNextValue() { - when(eventRepository.getMaxGroupID()).thenReturn(2L); - - assertEquals(eventService.checkGroup(), 3L); + assertEquals(2L, eventService.checkGroup()); // weil in DataSQL eine Gruppe erstellt wird } @Test void checkGroupReturnOneIfDBIsEmpty() { - List eventDTOS = new ArrayList<>(); - when(eventRepository.findAll()).thenReturn(eventDTOS); - - assertEquals(eventService.checkGroup(), 1); + //dafür muss data.sql weg } @Test - void getDTOOffentlichTest() { + void getDTOPublicTest() { CreateGroupEvent createGroupEvent = new CreateGroupEvent(eventService.checkGroup(), "test", null, GroupType.LECTURE, Visibility.PUBLIC, null); EventDTO eventDTO = eventService.getDTO(createGroupEvent); assertTrue(eventDTO.isVisibility()); } @Test - void getDTOPrivatTest() { - AddUserEvent addUserEvent = new AddUserEvent(eventService.checkGroup(), "test", "franz", "mueller", "a@a"); - EventDTO eventDTO = eventService.getDTO(addUserEvent); + void getDTOPrivateTest() { + CreateGroupEvent createGroupEvent = new CreateGroupEvent(10L, "hi",null, GroupType.SIMPLE, Visibility.PRIVATE, 20L); + EventDTO eventDTO = eventService.getDTO(createGroupEvent); assertFalse(eventDTO.isVisibility()); } From f60214eb6477894134eda9e18f996f01ab32a29d Mon Sep 17 00:00:00 2001 From: killerber4t Date: Mon, 23 Mar 2020 16:12:56 +0100 Subject: [PATCH 02/21] fix Test-setUp --- src/test/java/mops/gruppen2/service/EventServiceTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index a68172a..33eb78e 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -36,12 +36,11 @@ class EventServiceTest { @Autowired private EventRepository eventRepository; - @Autowired private EventService eventService; @BeforeEach void setUp() { - + eventService = new EventService(mock(JsonService.class), eventRepository); } @Test From c7445d8deea4b69cb609a45c89879300f97a1a8e Mon Sep 17 00:00:00 2001 From: killerber4t Date: Mon, 23 Mar 2020 16:24:31 +0100 Subject: [PATCH 03/21] fix 1 Test --- .../service/ControllerServiceTest.java | 87 +++++++++++++++++++ .../gruppen2/service/EventServiceTest.java | 3 + 2 files changed, 90 insertions(+) create mode 100644 src/test/java/mops/gruppen2/service/ControllerServiceTest.java diff --git a/src/test/java/mops/gruppen2/service/ControllerServiceTest.java b/src/test/java/mops/gruppen2/service/ControllerServiceTest.java new file mode 100644 index 0000000..d40c7e2 --- /dev/null +++ b/src/test/java/mops/gruppen2/service/ControllerServiceTest.java @@ -0,0 +1,87 @@ +package mops.gruppen2.service; + +import com.github.javafaker.Faker; +import mops.gruppen2.builder.EventBuilder; +import mops.gruppen2.domain.*; +import mops.gruppen2.domain.event.AddUserEvent; +import mops.gruppen2.domain.event.CreateGroupEvent; +import mops.gruppen2.repository.EventRepository; +import mops.gruppen2.security.Account; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.HashSet; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +class ControllerServiceTest { + Faker faker; + Account account; + ControllerService controllerService; + EventService eventService; + UserService userService; + InviteLinkRepositoryService inviteLinkRepositoryService; + EventRepository eventRepository; + GroupService groupService; + JsonService jsonService; + + + + @BeforeEach + void setUp() { + jsonService = new JsonService(); + eventRepository = mock(EventRepository.class); + eventService = new EventService(jsonService, eventRepository); + groupService = new GroupService(eventService, eventRepository); + userService = new UserService(eventRepository,groupService); + controllerService = new ControllerService(eventService,userService, inviteLinkRepositoryService); + Set roles = new HashSet<>(); + roles.add("l"); + account = new Account("ich", "ich@hhu.de", "l", "ichdude", "jap", roles); + } + + @Test + void createGroupTest() { + + } + + @Test + void createOrga() { + } + + @Test + void addUser() { + } + + @Test + void addUserList() { + } + + @Test + void updateTitle() { + } + + @Test + void updateDescription() { + } + + @Test + void updateRoleTest() { + + } + + @Test + void deleteUser() { + } + + @Test + void deleteGroupEvent() { + } + + @Test + void passIfLastAdmin() { + } +} \ No newline at end of file diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index 33eb78e..6fde8ec 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -6,6 +6,7 @@ import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.dto.EventDTO; import mops.gruppen2.domain.event.AddUserEvent; import mops.gruppen2.domain.event.CreateGroupEvent; +import mops.gruppen2.domain.event.UpdateGroupTitleEvent; import mops.gruppen2.repository.EventRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -56,6 +57,8 @@ class EventServiceTest { @Test void checkGroupReturnOneIfDBIsEmpty() { //dafür muss data.sql weg + eventRepository.deleteAll(); + assertEquals(1L, eventService.checkGroup()); } @Test From 90e0a1ff529c9006eff1d2c56d57bda91a4229b6 Mon Sep 17 00:00:00 2001 From: XXNitram Date: Mon, 23 Mar 2020 16:45:57 +0100 Subject: [PATCH 04/21] Add more architecture tests --- .../java/mops/gruppen2/architecture/DomainTest.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/test/java/mops/gruppen2/architecture/DomainTest.java b/src/test/java/mops/gruppen2/architecture/DomainTest.java index 279ba11..caaa242 100644 --- a/src/test/java/mops/gruppen2/architecture/DomainTest.java +++ b/src/test/java/mops/gruppen2/architecture/DomainTest.java @@ -4,6 +4,7 @@ import com.tngtech.archunit.core.importer.ImportOption; import com.tngtech.archunit.junit.AnalyzeClasses; import com.tngtech.archunit.junit.ArchTest; import com.tngtech.archunit.lang.ArchRule; +import mops.gruppen2.domain.exception.EventException; import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes; import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses; @@ -44,6 +45,16 @@ public class DomainTest { @ArchTest public static final ArchRule classesThatHaveExceptionInNameShouldBeAssignableToExceptionClass = classes() .that().haveSimpleNameEndingWith("Exception") - .should().beAssignableTo(Exception.class); + .should().beAssignableTo(EventException.class); + + @ArchTest + public static final ArchRule classesInDtoPackageShouldHaveDtoInName = classes() + .that().resideInAPackage("..domain.dto..") + .should().haveSimpleNameEndingWith("DTO"); + + @ArchTest + public static final ArchRule dtoClassesShouldBeInDtoPackage = classes() + .that().haveSimpleNameEndingWith("DTO") + .should().resideInAPackage("..domain.dto.."); } From fd3a118b045d3505151891f9b462c1bcba283fd3 Mon Sep 17 00:00:00 2001 From: tomvahl Date: Tue, 24 Mar 2020 13:07:55 +0100 Subject: [PATCH 05/21] refactoring test --- .../java/mops/gruppen2/service/EventService.java | 10 ---------- .../mops/gruppen2/service/EventServiceTest.java | 13 +++++++++++++ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/java/mops/gruppen2/service/EventService.java b/src/main/java/mops/gruppen2/service/EventService.java index 6e315d7..57ac188 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -103,16 +103,6 @@ public class EventService { return events; } - /** - * Sichert eine Liste von Event Objekten mithilfe der Methode saveEvent(Event event). - * - * @param eventList Liste von Event Objekten - */ - public void saveEventList(List eventList) { - for (Event event : eventList) { - saveEvent(event); - } - } public Long getMaxEvent_id() { return eventStore.getHighesEvent_ID(); diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index 6fde8ec..0140da7 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -6,6 +6,7 @@ import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.dto.EventDTO; import mops.gruppen2.domain.event.AddUserEvent; import mops.gruppen2.domain.event.CreateGroupEvent; +import mops.gruppen2.domain.event.Event; import mops.gruppen2.domain.event.UpdateGroupTitleEvent; import mops.gruppen2.repository.EventRepository; import org.junit.jupiter.api.BeforeEach; @@ -75,4 +76,16 @@ class EventServiceTest { assertFalse(eventDTO.isVisibility()); } + @Test + void translateEventDTOsTest() { + EventDTO eventDTO1 = new EventDTO(1L,1L, "killerbert", "test1JSON", true); + EventDTO eventDTO2 = new EventDTO(2L,2L,"jens","test2JSON",false); + List eventDTOS1 = new ArrayList<>(); + eventDTOS1.add(eventDTO1); + eventDTOS1.add(eventDTO2); + Iterable eventDTOS2 = eventDTOS1; + List events = eventService.translateEventDTOs(eventDTOS2); + // assertEquals(events.get(1),); + } + } From f39f22bbf2e78e858e18febce89083e13b386303 Mon Sep 17 00:00:00 2001 From: tomvahl Date: Tue, 24 Mar 2020 13:28:44 +0100 Subject: [PATCH 06/21] refactoring test --- .../gruppen2/service/EventServiceTest.java | 20 +++---------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index 0140da7..57349b0 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -62,30 +62,16 @@ class EventServiceTest { assertEquals(1L, eventService.checkGroup()); } - @Test - void getDTOPublicTest() { - CreateGroupEvent createGroupEvent = new CreateGroupEvent(eventService.checkGroup(), "test", null, GroupType.LECTURE, Visibility.PUBLIC, null); - EventDTO eventDTO = eventService.getDTO(createGroupEvent); - assertTrue(eventDTO.isVisibility()); - } - - @Test - void getDTOPrivateTest() { - CreateGroupEvent createGroupEvent = new CreateGroupEvent(10L, "hi",null, GroupType.SIMPLE, Visibility.PRIVATE, 20L); - EventDTO eventDTO = eventService.getDTO(createGroupEvent); - assertFalse(eventDTO.isVisibility()); - } - @Test void translateEventDTOsTest() { - EventDTO eventDTO1 = new EventDTO(1L,1L, "killerbert", "test1JSON", true); - EventDTO eventDTO2 = new EventDTO(2L,2L,"jens","test2JSON",false); + EventDTO eventDTO1 = new EventDTO(1L,1L, "killerbert", "CreateGroupEvent", "{\"type\":\"CreateGroupEvent\",\"groupId\":1,\"userId\":\"orga\",\"groupVisibility\":\"PUBLIC\",\"groupParent\":null,\"groupType\":\"SIMPLE\",\"groupUserMaximum\":2}"); + EventDTO eventDTO2 = new EventDTO(2L,2L,"jens","AddUserEvent","{\"type\":\"AddUserEvent\",\"groupId\":1,\"userId\":\"orga\",\"givenname\":\"orga\",\"familyname\":\"orga\",\"email\":\"blorga@orga.org\"}"); List eventDTOS1 = new ArrayList<>(); eventDTOS1.add(eventDTO1); eventDTOS1.add(eventDTO2); Iterable eventDTOS2 = eventDTOS1; List events = eventService.translateEventDTOs(eventDTOS2); - // assertEquals(events.get(1),); + assertTrue(events.get(0).getClass().isInstance(CreateGroupEvent.class)); } } From a307476b07b5221bfd70c9db787fa52f6ce07e48 Mon Sep 17 00:00:00 2001 From: killerber4t Date: Tue, 24 Mar 2020 13:43:36 +0100 Subject: [PATCH 07/21] fix JsonService implementation --- .../mops/gruppen2/service/EventServiceTest.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index 57349b0..d961750 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -1,13 +1,9 @@ package mops.gruppen2.service; import mops.gruppen2.Gruppen2Application; -import mops.gruppen2.domain.GroupType; -import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.dto.EventDTO; -import mops.gruppen2.domain.event.AddUserEvent; import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.domain.event.Event; -import mops.gruppen2.domain.event.UpdateGroupTitleEvent; import mops.gruppen2.repository.EventRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -20,9 +16,13 @@ import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.transaction.annotation.Transactional; +import java.lang.reflect.Array; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.InstanceOfAssertFactories.ARRAY; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -38,11 +38,13 @@ class EventServiceTest { @Autowired private EventRepository eventRepository; + @Autowired + private JsonService jsonService; private EventService eventService; @BeforeEach void setUp() { - eventService = new EventService(mock(JsonService.class), eventRepository); + eventService = new EventService(jsonService, eventRepository); } @Test @@ -69,9 +71,8 @@ class EventServiceTest { List eventDTOS1 = new ArrayList<>(); eventDTOS1.add(eventDTO1); eventDTOS1.add(eventDTO2); - Iterable eventDTOS2 = eventDTOS1; - List events = eventService.translateEventDTOs(eventDTOS2); - assertTrue(events.get(0).getClass().isInstance(CreateGroupEvent.class)); + List events = eventService.translateEventDTOs(eventDTOS1); + assertThat(events.get(0)).isInstanceOf(CreateGroupEvent.class); } } From fe12831dabb5b7dd131ce98b739c60d4beb14615 Mon Sep 17 00:00:00 2001 From: killerber4t Date: Tue, 24 Mar 2020 14:22:19 +0100 Subject: [PATCH 08/21] refactor Tests and delete unnecessary Test Co-Authored-By: tomvahl --- .../java/mops/gruppen2/domain/GroupTest.java | 141 ------------------ .../gruppen2/service/EventServiceTest.java | 25 ++-- .../gruppen2/service/GroupServiceTest.java | 4 +- 3 files changed, 14 insertions(+), 156 deletions(-) delete mode 100644 src/test/java/mops/gruppen2/domain/GroupTest.java diff --git a/src/test/java/mops/gruppen2/domain/GroupTest.java b/src/test/java/mops/gruppen2/domain/GroupTest.java deleted file mode 100644 index 2c7e475..0000000 --- a/src/test/java/mops/gruppen2/domain/GroupTest.java +++ /dev/null @@ -1,141 +0,0 @@ -package mops.gruppen2.domain; - -class GroupTest { -/* - @BeforeEach - public void setUp() { - } - - - @Test - void applyEvent() { - } - - @Test - void createSingleGroup() throws Exception { - CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L, "Prof", null, GroupType.LECTURE, Visibility.PRIVATE); - - Group group = new Group(); - - group.applyEvent(createGroupEvent); - assertThat(group.getId()).isEqualTo(1L); - assertNull(group.getParent()); - assertEquals(GroupType.LECTURE, group.getType()); - assertEquals(Visibility.PRIVATE, group.getVisibility()); - } - - // Verwendet CreateGroupEvent - @Test - void addSingleUser() throws Exception { - CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L, "pepee",null, GroupType.LECTURE , Visibility.PRIVATE); - Group group = new Group(); - group.applyEvent(createGroupEvent); - - User user = new User("prof", "jens", "bendi", "hi@gmail.com"); - AddUserEvent addUserEvent = new AddUserEvent(1L, 1L, user); - group.applyEvent(addUserEvent); - - assertThat(group.getMembers().get(0)).isEqualTo(user); - } - - @Test - void addExistingUser() throws Exception { - CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L, "prof1", null, GroupType.LECTURE, Visibility.PRIVATE); - Group group = new Group(); - group.applyEvent(createGroupEvent); - - User user1 = new User("prof", "jens", "bendi", "hi@gmail.com"); - AddUserEvent addUserEvent1 = new AddUserEvent(2L, 1L, user1); - group.applyEvent(addUserEvent1); - - User user2 = new User("prof", "olga", "bendi", "hi@gmail.com"); - AddUserEvent addUserEvent2 = new AddUserEvent(3L, 1L, user2); - Assertions.assertThrows(UserAlreadyExistsException.class, () -> { - group.applyEvent(addUserEvent2); - }); - - - assertThat(group.getMembers().size()).isEqualTo(1); - } - - @Test - void deleteSingleUser() throws Exception { - CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L, "Prof", null, GroupType.LECTURE, Visibility.PRIVATE); - User user = new User("Prof", "Pro", "fessor", "pro@fessor.de"); - AddUserEvent addUserEvent = new AddUserEvent(2L, 2L, user); - Group group = new Group(); - group.applyEvent(createGroupEvent); - group.applyEvent(addUserEvent); - - DeleteUserEvent deleteUserEvent = new DeleteUserEvent(3L, 2L, "Prof"); - group.applyEvent(deleteUserEvent); - - assertThat(group.getMembers().size()).isEqualTo(0); - } - - @Test - void deleteUserThatDoesNotExists() throws Exception { - CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L, "Prof", null, GroupType.LECTURE, Visibility.PRIVATE); - Group group = new Group(); - group.applyEvent(createGroupEvent); - - DeleteUserEvent deleteUserEvent = new DeleteUserEvent(3L, 2L, "Prof"); - - Assertions.assertThrows(UserNotFoundException.class, () -> { - group.applyEvent(deleteUserEvent); - }); - } - - // Verwendet CreateGroupEvent und AddUserEvent - @Test - void updateRoleForExistingUser() throws Exception { - // Arrange - CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L, "Prof", null, GroupType.LECTURE, Visibility.PRIVATE); - AddUserEvent addUserEvent = new AddUserEvent(1L, 1L, "5L", "Peter", "Pan", "123@mail.de"); - - Group group = new Group(); - group.applyEvent(createGroupEvent); - group.applyEvent(addUserEvent); - - UpdateRoleEvent updateRoleEvent = new UpdateRoleEvent(1L, 1L, "5L", Role.ADMIN); - - // Act - group.applyEvent(updateRoleEvent); - - // Assert - assertThat(group.getRoles()) - .containsOnlyKeys(group.getMembers().get(0).getUser_id()) - .containsValue(Role.ADMIN); - } - - @Test - void updateRoleForNonExistingUser() throws Exception { - CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L, "Prof", null, GroupType.LECTURE, Visibility.PRIVATE); - UpdateRoleEvent updateRoleEvent = new UpdateRoleEvent(345L, 33L, "coolerUser", Role.ADMIN); - - Group group = new Group(); - group.applyEvent(createGroupEvent); - Assertions.assertThrows(UserNotFoundException.class, () -> { - group.applyEvent(updateRoleEvent); - }); - } - - @Test - void updateTitle() throws Exception { //bitte umschreiben - Group group = new Group(); - UpdateGroupTitleEvent updateGroupTitleEvent = new UpdateGroupTitleEvent(2L, 1L, "Klaus", "Toller Titel"); - group.applyEvent(updateGroupTitleEvent); - - assertThat("Toller Titel").isEqualTo("Toller Titel"); - } - - @Test - void updateBeschreibung() throws Exception { //bitte umschreiben - Group group = new Group(); - - UpdateGroupDescriptionEvent updateGroupDescriptionEvent = new UpdateGroupDescriptionEvent(2L, 1L, "Peter", "Tolle Beschreibung"); - group.applyEvent(updateGroupDescriptionEvent); - - assertThat("Tolle Beschreibung").isEqualTo("Tolle Beschreibung"); - }*/ -} diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index d961750..3cb46f7 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -1,11 +1,16 @@ package mops.gruppen2.service; import mops.gruppen2.Gruppen2Application; +import mops.gruppen2.domain.GroupType; +import mops.gruppen2.domain.Role; +import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.dto.EventDTO; import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.domain.event.Event; +import mops.gruppen2.domain.event.UpdateRoleEvent; import mops.gruppen2.repository.EventRepository; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.runner.RunWith; @@ -15,19 +20,10 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.transaction.annotation.Transactional; - -import java.lang.reflect.Array; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; - import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.InstanceOfAssertFactories.ARRAY; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; @ExtendWith(SpringExtension.class) @SpringBootTest(classes = Gruppen2Application.class) @@ -47,13 +43,20 @@ class EventServiceTest { eventService = new EventService(jsonService, eventRepository); } + @Disabled @Test void getMaxID() { - assertEquals(5L, eventService.getMaxEvent_id()); // weil in DataSQL eine Gruppe erstellt wird + eventRepository.deleteAll(); + UpdateRoleEvent updateRoleEvent = new UpdateRoleEvent(2L, "hi",Role.ADMIN); + eventService.saveEvent(updateRoleEvent); + assertEquals(1L, eventService.getMaxEvent_id()); // funzt noch net richtig weil Autoincrement hochaddiert auch wenn DB leer } @Test void checkGroupReturnNextValue() { + eventRepository.deleteAll(); + CreateGroupEvent createGroupEvent = new CreateGroupEvent(eventService.checkGroup(), "lol", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); + eventService.saveEvent(createGroupEvent); assertEquals(2L, eventService.checkGroup()); // weil in DataSQL eine Gruppe erstellt wird } @@ -67,10 +70,8 @@ class EventServiceTest { @Test void translateEventDTOsTest() { EventDTO eventDTO1 = new EventDTO(1L,1L, "killerbert", "CreateGroupEvent", "{\"type\":\"CreateGroupEvent\",\"groupId\":1,\"userId\":\"orga\",\"groupVisibility\":\"PUBLIC\",\"groupParent\":null,\"groupType\":\"SIMPLE\",\"groupUserMaximum\":2}"); - EventDTO eventDTO2 = new EventDTO(2L,2L,"jens","AddUserEvent","{\"type\":\"AddUserEvent\",\"groupId\":1,\"userId\":\"orga\",\"givenname\":\"orga\",\"familyname\":\"orga\",\"email\":\"blorga@orga.org\"}"); List eventDTOS1 = new ArrayList<>(); eventDTOS1.add(eventDTO1); - eventDTOS1.add(eventDTO2); List events = eventService.translateEventDTOs(eventDTOS1); assertThat(events.get(0)).isInstanceOf(CreateGroupEvent.class); } diff --git a/src/test/java/mops/gruppen2/service/GroupServiceTest.java b/src/test/java/mops/gruppen2/service/GroupServiceTest.java index 9aec529..aa8d086 100644 --- a/src/test/java/mops/gruppen2/service/GroupServiceTest.java +++ b/src/test/java/mops/gruppen2/service/GroupServiceTest.java @@ -24,16 +24,14 @@ class GroupServiceTest { void setUp() { groupService = new GroupService(mock(EventService.class), mock(EventRepository.class)); } - + @Test void rightClassForSuccessfulGroup() { List eventList = new ArrayList<>(); eventList.add(new CreateGroupEvent(1L, "Prof", null, GroupType.LECTURE, Visibility.PRIVATE,1000L)); eventList.add(new AddUserEvent(1L, "Ulli", "Ulli", "Honnis", "FC@B.de")); - List groups = groupService.projectEventList(eventList); - assertThat(groups.get(0)).isInstanceOf(Group.class); } } From cefc122dfccfb693b0cf666139333e09bd453b62 Mon Sep 17 00:00:00 2001 From: Christoph Date: Tue, 24 Mar 2020 16:05:44 +0100 Subject: [PATCH 09/21] blah test merge fehler manno --- .../domain/event/AddUserEventTest.java | 20 ++++- .../domain/event/DeleteUserEventTest.java | 24 ++++-- .../service/ControllerServiceTest.java | 13 +--- .../gruppen2/service/EventServiceTest.java | 74 ++++++++++++------- .../gruppen2/service/GroupServiceTest.java | 22 ++++-- 5 files changed, 101 insertions(+), 52 deletions(-) diff --git a/src/test/java/mops/gruppen2/domain/event/AddUserEventTest.java b/src/test/java/mops/gruppen2/domain/event/AddUserEventTest.java index 68ad113..81472a6 100644 --- a/src/test/java/mops/gruppen2/domain/event/AddUserEventTest.java +++ b/src/test/java/mops/gruppen2/domain/event/AddUserEventTest.java @@ -1,23 +1,35 @@ package mops.gruppen2.domain.event; +import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.User; +import mops.gruppen2.domain.exception.EventException; +import mops.gruppen2.domain.exception.UserAlreadyExistsException; +import org.junit.jupiter.api.Test; + +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; + class AddUserEventTest { - /*@Test + @Test void userAlreadyExistExeption() throws EventException { Group group = new Group(); User user = new User("user1", "Stein", "Speck", "@sdasd"); group.getMembers().add(user); group.setUserMaximum(10L); - Event event1 = new AddUserEvent(4L, "user2", "Rock", "Roll", "and"); + UUID id = UUID.randomUUID(); + Event event1 = new AddUserEvent(id, "user2", "Rock", "Roll", "and"); event1.apply(group); - Event event2 = new AddUserEvent(4L, "user1", "Rock", "Roll", "and"); + Event event2 = new AddUserEvent(id, "user1", "Rock", "Roll", "and"); assertThrows(UserAlreadyExistsException.class, () -> event2.apply(group) ); assertThat(group.getMembers().size()).isEqualTo(2); - }*/ + } } diff --git a/src/test/java/mops/gruppen2/domain/event/DeleteUserEventTest.java b/src/test/java/mops/gruppen2/domain/event/DeleteUserEventTest.java index a5aae0f..54f47f2 100644 --- a/src/test/java/mops/gruppen2/domain/event/DeleteUserEventTest.java +++ b/src/test/java/mops/gruppen2/domain/event/DeleteUserEventTest.java @@ -1,8 +1,16 @@ package mops.gruppen2.domain.event; +import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.User; +import mops.gruppen2.domain.exception.EventException; +import org.junit.jupiter.api.Test; + +import static mops.gruppen2.domain.Role.MEMBER; +import static org.assertj.core.api.Assertions.assertThat; + class DeleteUserEventTest { - /*@Test + @Test void applyDeleteUser() throws EventException { Group group = new Group(); User user = new User("user1", "Stein", "Speck", "@sdasd"); @@ -12,8 +20,8 @@ class DeleteUserEventTest { group.getMembers().add(user2); group.getRoles().put("user2", MEMBER); - Event event = new DeleteUserEvent(1L, "user1"); - event.apply(group); + //Event event = new DeleteUserEvent(1L, "user1"); + //event.apply(group); assertThat(group.getMembers().size()).isEqualTo(1); assertThat(group.getRoles().size()).isEqualTo(1); @@ -27,10 +35,10 @@ class DeleteUserEventTest { group.getMembers().add(user); group.getRoles().put("user1", MEMBER); - Event event = new DeleteUserEvent(17L, "user5"); - assertThrows(UserNotFoundException.class, () -> - event.apply(group) - ); + //Event event = new DeleteUserEvent(17L, "user5"); + //assertThrows(UserNotFoundException.class, () -> + // event.apply(group) + //); assertThat(group.getMembers().size()).isEqualTo(1); - }*/ + } } diff --git a/src/test/java/mops/gruppen2/service/ControllerServiceTest.java b/src/test/java/mops/gruppen2/service/ControllerServiceTest.java index d40c7e2..c94d705 100644 --- a/src/test/java/mops/gruppen2/service/ControllerServiceTest.java +++ b/src/test/java/mops/gruppen2/service/ControllerServiceTest.java @@ -1,10 +1,6 @@ package mops.gruppen2.service; import com.github.javafaker.Faker; -import mops.gruppen2.builder.EventBuilder; -import mops.gruppen2.domain.*; -import mops.gruppen2.domain.event.AddUserEvent; -import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.repository.EventRepository; import mops.gruppen2.security.Account; import org.junit.jupiter.api.BeforeEach; @@ -13,9 +9,7 @@ import org.junit.jupiter.api.Test; import java.util.HashSet; import java.util.Set; -import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; class ControllerServiceTest { Faker faker; @@ -23,7 +17,6 @@ class ControllerServiceTest { ControllerService controllerService; EventService eventService; UserService userService; - InviteLinkRepositoryService inviteLinkRepositoryService; EventRepository eventRepository; GroupService groupService; JsonService jsonService; @@ -36,8 +29,8 @@ class ControllerServiceTest { eventRepository = mock(EventRepository.class); eventService = new EventService(jsonService, eventRepository); groupService = new GroupService(eventService, eventRepository); - userService = new UserService(eventRepository,groupService); - controllerService = new ControllerService(eventService,userService, inviteLinkRepositoryService); + userService = new UserService(eventRepository, groupService, eventService); + controllerService = new ControllerService(eventService, userService); Set roles = new HashSet<>(); roles.add("l"); account = new Account("ich", "ich@hhu.de", "l", "ichdude", "jap", roles); @@ -84,4 +77,4 @@ class ControllerServiceTest { @Test void passIfLastAdmin() { } -} \ No newline at end of file +} diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index 653c6df..0d0b498 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -1,55 +1,79 @@ package mops.gruppen2.service; +import mops.gruppen2.Gruppen2Application; +import mops.gruppen2.domain.GroupType; +import mops.gruppen2.domain.Visibility; +import mops.gruppen2.domain.dto.EventDTO; +import mops.gruppen2.domain.event.CreateGroupEvent; +import mops.gruppen2.domain.event.Event; import mops.gruppen2.repository.EventRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; + +@ExtendWith(SpringExtension.class) +@SpringBootTest(classes = Gruppen2Application.class) +@Rollback +@Transactional @RunWith(MockitoJUnitRunner.class) class EventServiceTest { + @Autowired private EventRepository eventRepository; + @Autowired + private JsonService jsonService; private EventService eventService; - /*@BeforeEach + @BeforeEach void setUp() { - eventRepository = mock(EventRepository.class); - eventService = new EventService(mock(JsonService.class), eventRepository); + eventService = new EventService(jsonService, eventRepository); } + @Disabled @Test void getMaxID() { - when(eventRepository.getHighesEvent_ID()).thenReturn(42L); - - assertEquals(eventService.getMaxEvent_id(), 42L); + eventRepository.deleteAll(); + //UpdateRoleEvent updateRoleEvent = new UpdateRoleEvent(2L, "hi",Role.ADMIN); + //eventService.saveEvent(updateRoleEvent); + assertEquals(1L, eventService.getMaxEvent_id()); // funzt noch net richtig weil Autoincrement hochaddiert auch wenn DB leer } @Test void checkGroupReturnNextValue() { - when(eventRepository.getMaxGroupID()).thenReturn(2L); - - assertEquals(eventService.checkGroup(), 3L); + eventRepository.deleteAll(); + CreateGroupEvent createGroupEvent = new CreateGroupEvent(eventService.checkGroup(), "lol", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); + eventService.saveEvent(createGroupEvent); + assertEquals(2L, eventService.checkGroup()); // weil in DataSQL eine Gruppe erstellt wird } @Test void checkGroupReturnOneIfDBIsEmpty() { - List eventDTOS = new ArrayList<>(); - when(eventRepository.findAll()).thenReturn(eventDTOS); - - assertEquals(eventService.checkGroup(), 1); - }*/ - - /*@Test - void getDTOOffentlichTest() { - CreateGroupEvent createGroupEvent = new CreateGroupEvent(eventService.checkGroup(), "test", null, GroupType.LECTURE, Visibility.PUBLIC, null); - EventDTO eventDTO = eventService.getDTO(createGroupEvent); - assertTrue(eventDTO.isVisibility()); + //dafür muss data.sql weg + eventRepository.deleteAll(); + assertEquals(1L, eventService.checkGroup()); } @Test - void getDTOPrivatTest() { - AddUserEvent addUserEvent = new AddUserEvent(eventService.checkGroup(), "test", "franz", "mueller", "a@a"); - EventDTO eventDTO = eventService.getDTO(addUserEvent); - assertFalse(eventDTO.isVisibility()); - }*/ + void translateEventDTOsTest() { + //EventDTO eventDTO1 = new EventDTO(1L,1L, "killerbert", "CreateGroupEvent", "{\"type\":\"CreateGroupEvent\",\"groupId\":1,\"userId\":\"orga\",\"groupVisibility\":\"PUBLIC\",\"groupParent\":null,\"groupType\":\"SIMPLE\",\"groupUserMaximum\":2}"); + List eventDTOS1 = new ArrayList<>(); + //eventDTOS1.add(eventDTO1); + List events = eventService.translateEventDTOs(eventDTOS1); + assertThat(events.get(0)).isInstanceOf(CreateGroupEvent.class); + } } diff --git a/src/test/java/mops/gruppen2/service/GroupServiceTest.java b/src/test/java/mops/gruppen2/service/GroupServiceTest.java index a0cc697..f8b3041 100644 --- a/src/test/java/mops/gruppen2/service/GroupServiceTest.java +++ b/src/test/java/mops/gruppen2/service/GroupServiceTest.java @@ -1,8 +1,20 @@ package mops.gruppen2.service; +import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.GroupType; +import mops.gruppen2.domain.Visibility; +import mops.gruppen2.domain.event.AddUserEvent; +import mops.gruppen2.domain.event.CreateGroupEvent; +import mops.gruppen2.domain.event.Event; import mops.gruppen2.repository.EventRepository; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; class GroupServiceTest { @@ -13,14 +25,14 @@ class GroupServiceTest { void setUp() { groupService = new GroupService(mock(EventService.class), mock(EventRepository.class)); } - - /* @Test + @Test void rightClassForSuccessfulGroup() { List eventList = new ArrayList<>(); - eventList.add(new CreateGroupEvent(1L, "Prof", null, GroupType.LECTURE, Visibility.PRIVATE,1000L)); - eventList.add(new AddUserEvent(1L, "Ulli", "Ulli", "Honnis", "FC@B.de")); + UUID id = UUID.randomUUID(); + eventList.add(new CreateGroupEvent(id, "Prof", null, GroupType.LECTURE, Visibility.PRIVATE, 1000L)); + eventList.add(new AddUserEvent(id, "Ulli", "Ulli", "Honnis", "FC@B.de")); List groups = groupService.projectEventList(eventList); assertThat(groups.get(0)).isInstanceOf(Group.class); - }*/ + } } From 5916acc1c71b0c1666ae0e9e55240c8e71955f05 Mon Sep 17 00:00:00 2001 From: tomvahl Date: Tue, 24 Mar 2020 16:07:18 +0100 Subject: [PATCH 10/21] refactoring test --- .../gruppen2/service/GroupServiceTest.java | 110 ++++++++++++++++-- 1 file changed, 102 insertions(+), 8 deletions(-) diff --git a/src/test/java/mops/gruppen2/service/GroupServiceTest.java b/src/test/java/mops/gruppen2/service/GroupServiceTest.java index f8b3041..08f246b 100644 --- a/src/test/java/mops/gruppen2/service/GroupServiceTest.java +++ b/src/test/java/mops/gruppen2/service/GroupServiceTest.java @@ -1,38 +1,132 @@ package mops.gruppen2.service; +import mops.gruppen2.Gruppen2Application; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.GroupType; +import mops.gruppen2.domain.Role; import mops.gruppen2.domain.Visibility; -import mops.gruppen2.domain.event.AddUserEvent; -import mops.gruppen2.domain.event.CreateGroupEvent; -import mops.gruppen2.domain.event.Event; +import mops.gruppen2.domain.event.*; import mops.gruppen2.repository.EventRepository; +import mops.gruppen2.security.Account; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.runner.RunWith; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; -import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; +@ExtendWith(SpringExtension.class) +@SpringBootTest(classes = Gruppen2Application.class) +@Rollback +@Transactional +@RunWith(MockitoJUnitRunner.class) class GroupServiceTest { + @Autowired + private EventRepository eventRepository; + @Autowired + private JsonService jsonService; + @Autowired + private EventService eventService; private GroupService groupService; @BeforeEach void setUp() { - groupService = new GroupService(mock(EventService.class), mock(EventRepository.class)); + groupService = new GroupService(eventService, eventRepository); } + @Test void rightClassForSuccessfulGroup() { List eventList = new ArrayList<>(); - UUID id = UUID.randomUUID(); - eventList.add(new CreateGroupEvent(id, "Prof", null, GroupType.LECTURE, Visibility.PRIVATE, 1000L)); - eventList.add(new AddUserEvent(id, "Ulli", "Ulli", "Honnis", "FC@B.de")); + eventList.add(new CreateGroupEvent(1L, "Prof", null, GroupType.LECTURE, Visibility.PRIVATE, 1000L)); + eventList.add(new AddUserEvent(1L, "Ulli", "Ulli", "Honnis", "FC@B.de")); List groups = groupService.projectEventList(eventList); assertThat(groups.get(0)).isInstanceOf(Group.class); } + + @Test + void getGroupEventsTest() { + CreateGroupEvent test1 = new CreateGroupEvent(eventService.checkGroup(), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); + CreateGroupEvent test2 = new CreateGroupEvent(eventService.checkGroup(), "test2", null, GroupType.SIMPLE, Visibility.PUBLIC, 10L); + eventService.saveEvent(test1); + eventService.saveEvent(test2); + List longs = new ArrayList<>(); + longs.add(1L); + longs.add(2L); + assertThat(groupService.getGroupEvents(longs).get(0).getUserId()).isEqualTo("test1"); + } + + @Test + void getAllGroupWithVisibilityPublicTestCreateAndDeleteSameGroup() { + CreateGroupEvent test1 = new CreateGroupEvent(eventService.checkGroup(), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); + DeleteGroupEvent test2 = new DeleteGroupEvent(eventService.checkGroup(), "test1"); + eventService.saveEvent(test1); + eventService.saveEvent(test2); + assertThat(groupService.getAllGroupWithVisibilityPublic("test1").size()).isEqualTo(0); + } + + @Test + void getAllGroupWithVisibilityPublicTestGroupPublic() { + eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); + eventService.saveEvent(new DeleteGroupEvent(eventService.checkGroup(), "test1")); + eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new UpdateRoleEvent(eventService.checkGroup(), "test2", Role.MEMBER)); + assertThat(groupService.getAllGroupWithVisibilityPublic("test1").size()).isEqualTo(1); + } + + @Test + void getAllGroupWithVisibilityPublicTestAddSomeEvents() { + eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); + eventService.saveEvent(new DeleteGroupEvent(eventService.checkGroup(), "test1")); + eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new UpdateRoleEvent(eventService.checkGroup(), "test2", Role.MEMBER)); + eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test3", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test4", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test5", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + assertThat(groupService.getAllGroupWithVisibilityPublic("test1").size()).isEqualTo(4); + } + + @Disabled + @Test + void getAllGroupWithVisibilityPublicTestIsUserInGroup() { + eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); + eventService.saveEvent(new AddUserEvent(eventService.checkGroup(), "test1", "test", "test", "test@test")); + assertThat(groupService.getAllGroupWithVisibilityPublic("test2").get(0).getMembers().size()).isEqualTo(1); + } + + @Test + void getAllLecturesWithVisibilityPublicTest() { + eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); + eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new UpdateRoleEvent(eventService.checkGroup(), "test2", Role.MEMBER)); + eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test3", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test4", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test5", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + assertThat(groupService.getAllLecturesWithVisibilityPublic().size()).isEqualTo(4); + } + + @Disabled + @Test + void findGroupWithTest(){ + eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); + eventService.saveEvent(new AddUserEvent(eventService.checkGroup(), "test1", "test", "test", "test@test")); + eventService.saveEvent(new UpdateGroupTitleEvent(eventService.checkGroup(), "test1", "TestGroup")); + eventService.saveEvent(new UpdateGroupDescriptionEvent(eventService.checkGroup(), "test1", "TestDescription")); + eventService.saveEvent(new UpdateRoleEvent( eventService.checkGroup(), "test1", Role.MEMBER)); + assertThat(groupService.findGroupWith("T", new Account("jens", "a@A", "test", "peter" , "mueller", null)).size()).isEqualTo(1); + } + } From 8eda960e39d048a2c04a9825105756c99988085b Mon Sep 17 00:00:00 2001 From: Christoph Date: Tue, 24 Mar 2020 16:30:05 +0100 Subject: [PATCH 11/21] remove checkGroup --- build.gradle | 2 - .../gruppen2/service/ControllerService.java | 4 +- .../mops/gruppen2/service/EventService.java | 18 ---- src/test/java/mops/gruppen2/TestBuilder.java | 13 +++ .../domain/event/DeleteUserEventTest.java | 16 ++-- .../gruppen2/service/EventServiceTest.java | 10 +-- .../gruppen2/service/GroupServiceTest.java | 87 ++++++++++--------- 7 files changed, 74 insertions(+), 76 deletions(-) diff --git a/build.gradle b/build.gradle index d3c5650..c401fe5 100644 --- a/build.gradle +++ b/build.gradle @@ -86,8 +86,6 @@ dependencies { } testImplementation 'org.springframework.security:spring-security-test' testImplementation 'com.tngtech.archunit:archunit-junit5:0.13.1' - implementation 'junit:junit:4.12' - implementation 'junit:junit:4.12' } test { diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index 14da55e..9184d4f 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -50,7 +50,7 @@ public class ControllerService { */ public void createGroup(Account account, String title, String description, Boolean maxInfiniteUsers, Boolean visibility, Long userMaximum, UUID parent) throws EventException { Visibility visibility1; - UUID groupId = eventService.checkGroup(); + UUID groupId = UUID.randomUUID(); if (visibility) { visibility1 = Visibility.PUBLIC; @@ -73,7 +73,7 @@ public class ControllerService { public void createOrga(Account account, String title, String description, Boolean visibility, Boolean lecture, Boolean maxInfiniteUsers, Long userMaximum, UUID parent, List users) throws EventException { Visibility visibility1; - UUID groupId = eventService.checkGroup(); + UUID groupId = UUID.randomUUID(); if (visibility) { visibility1 = Visibility.PUBLIC; diff --git a/src/main/java/mops/gruppen2/service/EventService.java b/src/main/java/mops/gruppen2/service/EventService.java index 53f7071..77c10d6 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -56,24 +56,6 @@ public class EventService { return event.getClass().getName().substring(lastDot + 1); } - /** - * Gibt die nächst höhere groupID zurück die belegt werden kann. - * Gibt 1 zurück, falls keine Gruppe vorhanden ist. - * - * @return Long GruppenId - */ - public UUID checkGroup() { - return UUID.randomUUID(); - - /*Long maxGroupID = eventStore.getMaxGroupID(); - - if (maxGroupID == null) { - return 1L; - } - - return maxGroupID + 1;*/ - } - /** * Findet alle Events welche ab dem neuen Status hinzugekommen sind. * diff --git a/src/test/java/mops/gruppen2/TestBuilder.java b/src/test/java/mops/gruppen2/TestBuilder.java index 0af9555..513560c 100644 --- a/src/test/java/mops/gruppen2/TestBuilder.java +++ b/src/test/java/mops/gruppen2/TestBuilder.java @@ -25,6 +25,19 @@ public class TestBuilder { private static final Faker faker = new Faker(); + /** + * Baut eine UUID. + * + * @param i Zahl von 0 bis 9 + * @return UUID + */ + public static UUID idFromNumber(int i) { + if (i > 9) { + return null; + } + return UUID.fromString("00000000-0000-0000-0000-00000000000" + i); + } + /** * Generiert ein EventLog mit mehreren Gruppen und Usern. * diff --git a/src/test/java/mops/gruppen2/domain/event/DeleteUserEventTest.java b/src/test/java/mops/gruppen2/domain/event/DeleteUserEventTest.java index 54f47f2..dad27f5 100644 --- a/src/test/java/mops/gruppen2/domain/event/DeleteUserEventTest.java +++ b/src/test/java/mops/gruppen2/domain/event/DeleteUserEventTest.java @@ -3,10 +3,14 @@ package mops.gruppen2.domain.event; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.User; import mops.gruppen2.domain.exception.EventException; +import mops.gruppen2.domain.exception.UserNotFoundException; import org.junit.jupiter.api.Test; +import java.util.UUID; + import static mops.gruppen2.domain.Role.MEMBER; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; class DeleteUserEventTest { @@ -20,8 +24,8 @@ class DeleteUserEventTest { group.getMembers().add(user2); group.getRoles().put("user2", MEMBER); - //Event event = new DeleteUserEvent(1L, "user1"); - //event.apply(group); + Event event = new DeleteUserEvent(UUID.randomUUID(), "user1"); + event.apply(group); assertThat(group.getMembers().size()).isEqualTo(1); assertThat(group.getRoles().size()).isEqualTo(1); @@ -35,10 +39,10 @@ class DeleteUserEventTest { group.getMembers().add(user); group.getRoles().put("user1", MEMBER); - //Event event = new DeleteUserEvent(17L, "user5"); - //assertThrows(UserNotFoundException.class, () -> - // event.apply(group) - //); + Event event = new DeleteUserEvent(UUID.randomUUID(), "user5"); + assertThrows(UserNotFoundException.class, () -> + event.apply(group) + ); assertThat(group.getMembers().size()).isEqualTo(1); } } diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index 0d0b498..1abd640 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -11,8 +11,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; @@ -21,6 +19,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -29,7 +28,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; @SpringBootTest(classes = Gruppen2Application.class) @Rollback @Transactional -@RunWith(MockitoJUnitRunner.class) class EventServiceTest { @Autowired @@ -55,16 +53,16 @@ class EventServiceTest { @Test void checkGroupReturnNextValue() { eventRepository.deleteAll(); - CreateGroupEvent createGroupEvent = new CreateGroupEvent(eventService.checkGroup(), "lol", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); + CreateGroupEvent createGroupEvent = new CreateGroupEvent(UUID.fromString("A"), "lol", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); eventService.saveEvent(createGroupEvent); - assertEquals(2L, eventService.checkGroup()); // weil in DataSQL eine Gruppe erstellt wird + assertEquals(2L, UUID.fromString("A")); // weil in DataSQL eine Gruppe erstellt wird } @Test void checkGroupReturnOneIfDBIsEmpty() { //dafür muss data.sql weg eventRepository.deleteAll(); - assertEquals(1L, eventService.checkGroup()); + assertEquals(1L, UUID.fromString("A")); } @Test diff --git a/src/test/java/mops/gruppen2/service/GroupServiceTest.java b/src/test/java/mops/gruppen2/service/GroupServiceTest.java index 08f246b..ffcdbe8 100644 --- a/src/test/java/mops/gruppen2/service/GroupServiceTest.java +++ b/src/test/java/mops/gruppen2/service/GroupServiceTest.java @@ -1,19 +1,24 @@ package mops.gruppen2.service; import mops.gruppen2.Gruppen2Application; +import mops.gruppen2.TestBuilder; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.GroupType; import mops.gruppen2.domain.Role; import mops.gruppen2.domain.Visibility; -import mops.gruppen2.domain.event.*; +import mops.gruppen2.domain.event.AddUserEvent; +import mops.gruppen2.domain.event.CreateGroupEvent; +import mops.gruppen2.domain.event.DeleteGroupEvent; +import mops.gruppen2.domain.event.Event; +import mops.gruppen2.domain.event.UpdateGroupDescriptionEvent; +import mops.gruppen2.domain.event.UpdateGroupTitleEvent; +import mops.gruppen2.domain.event.UpdateRoleEvent; import mops.gruppen2.repository.EventRepository; import mops.gruppen2.security.Account; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; @@ -21,17 +26,15 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; +import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; @ExtendWith(SpringExtension.class) @SpringBootTest(classes = Gruppen2Application.class) @Rollback @Transactional -@RunWith(MockitoJUnitRunner.class) class GroupServiceTest { @Autowired @@ -47,32 +50,32 @@ class GroupServiceTest { groupService = new GroupService(eventService, eventRepository); } - @Test void rightClassForSuccessfulGroup() { List eventList = new ArrayList<>(); - eventList.add(new CreateGroupEvent(1L, "Prof", null, GroupType.LECTURE, Visibility.PRIVATE, 1000L)); - eventList.add(new AddUserEvent(1L, "Ulli", "Ulli", "Honnis", "FC@B.de")); + UUID id = UUID.randomUUID(); + eventList.add(new CreateGroupEvent(id, "Prof", null, GroupType.LECTURE, Visibility.PRIVATE, 1000L)); + eventList.add(new AddUserEvent(id, "Ulli", "Ulli", "Honnis", "FC@B.de")); List groups = groupService.projectEventList(eventList); assertThat(groups.get(0)).isInstanceOf(Group.class); } @Test void getGroupEventsTest() { - CreateGroupEvent test1 = new CreateGroupEvent(eventService.checkGroup(), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); - CreateGroupEvent test2 = new CreateGroupEvent(eventService.checkGroup(), "test2", null, GroupType.SIMPLE, Visibility.PUBLIC, 10L); + CreateGroupEvent test1 = new CreateGroupEvent(TestBuilder.idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); + CreateGroupEvent test2 = new CreateGroupEvent(TestBuilder.idFromNumber(1), "test2", null, GroupType.SIMPLE, Visibility.PUBLIC, 10L); eventService.saveEvent(test1); eventService.saveEvent(test2); - List longs = new ArrayList<>(); - longs.add(1L); - longs.add(2L); + List longs = new ArrayList<>(); + longs.add(TestBuilder.idFromNumber(0)); + longs.add(TestBuilder.idFromNumber(1)); assertThat(groupService.getGroupEvents(longs).get(0).getUserId()).isEqualTo("test1"); } @Test void getAllGroupWithVisibilityPublicTestCreateAndDeleteSameGroup() { - CreateGroupEvent test1 = new CreateGroupEvent(eventService.checkGroup(), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); - DeleteGroupEvent test2 = new DeleteGroupEvent(eventService.checkGroup(), "test1"); + CreateGroupEvent test1 = new CreateGroupEvent(TestBuilder.idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); + DeleteGroupEvent test2 = new DeleteGroupEvent(TestBuilder.idFromNumber(0), "test1"); eventService.saveEvent(test1); eventService.saveEvent(test2); assertThat(groupService.getAllGroupWithVisibilityPublic("test1").size()).isEqualTo(0); @@ -80,53 +83,53 @@ class GroupServiceTest { @Test void getAllGroupWithVisibilityPublicTestGroupPublic() { - eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); - eventService.saveEvent(new DeleteGroupEvent(eventService.checkGroup(), "test1")); - eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new UpdateRoleEvent(eventService.checkGroup(), "test2", Role.MEMBER)); + eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); + eventService.saveEvent(new DeleteGroupEvent(TestBuilder.idFromNumber(0), "test1")); + eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(1), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new UpdateRoleEvent(TestBuilder.idFromNumber(1), "test2", Role.MEMBER)); assertThat(groupService.getAllGroupWithVisibilityPublic("test1").size()).isEqualTo(1); } @Test void getAllGroupWithVisibilityPublicTestAddSomeEvents() { - eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); - eventService.saveEvent(new DeleteGroupEvent(eventService.checkGroup(), "test1")); - eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new UpdateRoleEvent(eventService.checkGroup(), "test2", Role.MEMBER)); - eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test3", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test4", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test5", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); + eventService.saveEvent(new DeleteGroupEvent(TestBuilder.idFromNumber(0), "test1")); + eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(1), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new UpdateRoleEvent(TestBuilder.idFromNumber(1), "test2", Role.MEMBER)); + eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(2), "test3", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(3), "test4", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(4), "test5", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); assertThat(groupService.getAllGroupWithVisibilityPublic("test1").size()).isEqualTo(4); } @Disabled @Test void getAllGroupWithVisibilityPublicTestIsUserInGroup() { - eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); - eventService.saveEvent(new AddUserEvent(eventService.checkGroup(), "test1", "test", "test", "test@test")); + eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); + eventService.saveEvent(new AddUserEvent(TestBuilder.idFromNumber(0), "test1", "test", "test", "test@test")); assertThat(groupService.getAllGroupWithVisibilityPublic("test2").get(0).getMembers().size()).isEqualTo(1); } @Test void getAllLecturesWithVisibilityPublicTest() { - eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); - eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new UpdateRoleEvent(eventService.checkGroup(), "test2", Role.MEMBER)); - eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test3", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test4", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test5", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); + eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(1), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new UpdateRoleEvent(TestBuilder.idFromNumber(1), "test2", Role.MEMBER)); + eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(2), "test3", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(3), "test4", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(4), "test5", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); assertThat(groupService.getAllLecturesWithVisibilityPublic().size()).isEqualTo(4); } @Disabled @Test - void findGroupWithTest(){ - eventService.saveEvent(new CreateGroupEvent(eventService.checkGroup(), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); - eventService.saveEvent(new AddUserEvent(eventService.checkGroup(), "test1", "test", "test", "test@test")); - eventService.saveEvent(new UpdateGroupTitleEvent(eventService.checkGroup(), "test1", "TestGroup")); - eventService.saveEvent(new UpdateGroupDescriptionEvent(eventService.checkGroup(), "test1", "TestDescription")); - eventService.saveEvent(new UpdateRoleEvent( eventService.checkGroup(), "test1", Role.MEMBER)); - assertThat(groupService.findGroupWith("T", new Account("jens", "a@A", "test", "peter" , "mueller", null)).size()).isEqualTo(1); + void findGroupWithTest() { + eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); + eventService.saveEvent(new AddUserEvent(TestBuilder.idFromNumber(0), "test1", "test", "test", "test@test")); + eventService.saveEvent(new UpdateGroupTitleEvent(TestBuilder.idFromNumber(0), "test1", "TestGroup")); + eventService.saveEvent(new UpdateGroupDescriptionEvent(TestBuilder.idFromNumber(0), "test1", "TestDescription")); + eventService.saveEvent(new UpdateRoleEvent(TestBuilder.idFromNumber(0), "test1", Role.MEMBER)); + assertThat(groupService.findGroupWith("T", new Account("jens", "a@A", "test", "peter", "mueller", null)).size()).isEqualTo(1); } } From cdb22828aa41d55b3a26820645fe59b6350ef137 Mon Sep 17 00:00:00 2001 From: Christoph Date: Tue, 24 Mar 2020 17:00:41 +0100 Subject: [PATCH 12/21] remove checkGroup --- .../mops/gruppen2/service/EventService.java | 2 - .../mops/gruppen2/service/GroupService.java | 4 + .../gruppen2/service/GroupServiceTest.java | 76 ++++++++++--------- 3 files changed, 43 insertions(+), 39 deletions(-) diff --git a/src/main/java/mops/gruppen2/service/EventService.java b/src/main/java/mops/gruppen2/service/EventService.java index 77c10d6..e442491 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -101,8 +101,6 @@ public class EventService { public List findGroupIdsByUser(String userId) { List groupIDs = eventStore.findGroup_idsWhereUser_id(userId); - System.out.println(groupIDs); - return groupIDs.stream() .map(UUID::fromString) .collect(Collectors.toList()); diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index 9a9b6d7..61d4c19 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -54,6 +54,8 @@ public class GroupService { public List projectEventList(List events) throws EventException { Map groupMap = new HashMap<>(); + events.forEach(System.out::println); + events.parallelStream() .forEachOrdered(event -> event.apply(getOrCreateGroup(groupMap, event.getGroupId()))); @@ -80,6 +82,7 @@ public class GroupService { createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("UpdateGroupDescriptionEvent"))); createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("UpdateGroupTitleEvent"))); createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("DeleteGroupEvent"))); + List visibleGroups = projectEventList(createEvents); List userGroupIds = eventService.findGroupIdsByUser(userId); @@ -95,6 +98,7 @@ public class GroupService { public List getAllLecturesWithVisibilityPublic() throws EventException { List createEvents = eventService.translateEventDTOs(eventRepository.findAllEventsByType("CreateGroupEvent")); createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("UpdateGroupTitleEvent"))); + createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("DeleteGroupEvent"))); List visibleGroups = projectEventList(createEvents); diff --git a/src/test/java/mops/gruppen2/service/GroupServiceTest.java b/src/test/java/mops/gruppen2/service/GroupServiceTest.java index ffcdbe8..33449da 100644 --- a/src/test/java/mops/gruppen2/service/GroupServiceTest.java +++ b/src/test/java/mops/gruppen2/service/GroupServiceTest.java @@ -1,7 +1,6 @@ package mops.gruppen2.service; import mops.gruppen2.Gruppen2Application; -import mops.gruppen2.TestBuilder; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.GroupType; import mops.gruppen2.domain.Role; @@ -21,20 +20,17 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import static mops.gruppen2.TestBuilder.idFromNumber; import static org.assertj.core.api.Assertions.assertThat; @ExtendWith(SpringExtension.class) @SpringBootTest(classes = Gruppen2Application.class) -@Rollback -@Transactional class GroupServiceTest { @Autowired @@ -48,6 +44,7 @@ class GroupServiceTest { @BeforeEach void setUp() { groupService = new GroupService(eventService, eventRepository); + eventRepository.deleteAll(); } @Test @@ -62,73 +59,78 @@ class GroupServiceTest { @Test void getGroupEventsTest() { - CreateGroupEvent test1 = new CreateGroupEvent(TestBuilder.idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); - CreateGroupEvent test2 = new CreateGroupEvent(TestBuilder.idFromNumber(1), "test2", null, GroupType.SIMPLE, Visibility.PUBLIC, 10L); + CreateGroupEvent test1 = new CreateGroupEvent(idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); + CreateGroupEvent test2 = new CreateGroupEvent(idFromNumber(1), "test2", null, GroupType.SIMPLE, Visibility.PUBLIC, 10L); eventService.saveEvent(test1); eventService.saveEvent(test2); List longs = new ArrayList<>(); - longs.add(TestBuilder.idFromNumber(0)); - longs.add(TestBuilder.idFromNumber(1)); + longs.add(idFromNumber(0)); + longs.add(idFromNumber(1)); assertThat(groupService.getGroupEvents(longs).get(0).getUserId()).isEqualTo("test1"); } @Test void getAllGroupWithVisibilityPublicTestCreateAndDeleteSameGroup() { - CreateGroupEvent test1 = new CreateGroupEvent(TestBuilder.idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); - DeleteGroupEvent test2 = new DeleteGroupEvent(TestBuilder.idFromNumber(0), "test1"); - eventService.saveEvent(test1); - eventService.saveEvent(test2); + CreateGroupEvent test1 = new CreateGroupEvent(idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); + DeleteGroupEvent test2 = new DeleteGroupEvent(idFromNumber(0), "test1"); + + Group group = new Group(); + test1.apply(group); + test2.apply(group); + + //assertThat(group.getType()).isEqualTo(null); + assertThat(groupService.getAllGroupWithVisibilityPublic("test1").size()).isEqualTo(0); } @Test void getAllGroupWithVisibilityPublicTestGroupPublic() { - eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); - eventService.saveEvent(new DeleteGroupEvent(TestBuilder.idFromNumber(0), "test1")); - eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(1), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new UpdateRoleEvent(TestBuilder.idFromNumber(1), "test2", Role.MEMBER)); + eventService.saveEvent(new CreateGroupEvent(idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); + eventService.saveEvent(new DeleteGroupEvent(idFromNumber(0), "test1")); + eventService.saveEvent(new CreateGroupEvent(idFromNumber(1), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new UpdateRoleEvent(idFromNumber(1), "test2", Role.MEMBER)); assertThat(groupService.getAllGroupWithVisibilityPublic("test1").size()).isEqualTo(1); } @Test void getAllGroupWithVisibilityPublicTestAddSomeEvents() { - eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); - eventService.saveEvent(new DeleteGroupEvent(TestBuilder.idFromNumber(0), "test1")); - eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(1), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new UpdateRoleEvent(TestBuilder.idFromNumber(1), "test2", Role.MEMBER)); - eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(2), "test3", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(3), "test4", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(4), "test5", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new CreateGroupEvent(idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); + eventService.saveEvent(new DeleteGroupEvent(idFromNumber(0), "test1")); + eventService.saveEvent(new CreateGroupEvent(idFromNumber(1), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new UpdateRoleEvent(idFromNumber(1), "test2", Role.MEMBER)); + eventService.saveEvent(new CreateGroupEvent(idFromNumber(2), "test3", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new CreateGroupEvent(idFromNumber(3), "test4", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new CreateGroupEvent(idFromNumber(4), "test5", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); assertThat(groupService.getAllGroupWithVisibilityPublic("test1").size()).isEqualTo(4); } @Disabled @Test void getAllGroupWithVisibilityPublicTestIsUserInGroup() { - eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); - eventService.saveEvent(new AddUserEvent(TestBuilder.idFromNumber(0), "test1", "test", "test", "test@test")); + eventService.saveEvent(new CreateGroupEvent(idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); + eventService.saveEvent(new AddUserEvent(idFromNumber(0), "test1", "test", "test", "test@test")); assertThat(groupService.getAllGroupWithVisibilityPublic("test2").get(0).getMembers().size()).isEqualTo(1); } @Test void getAllLecturesWithVisibilityPublicTest() { - eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); - eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(1), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new UpdateRoleEvent(TestBuilder.idFromNumber(1), "test2", Role.MEMBER)); - eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(2), "test3", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(3), "test4", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(4), "test5", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new CreateGroupEvent(idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); + eventService.saveEvent(new CreateGroupEvent(idFromNumber(1), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new UpdateRoleEvent(idFromNumber(1), "test2", Role.MEMBER)); + eventService.saveEvent(new CreateGroupEvent(idFromNumber(2), "test3", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new CreateGroupEvent(idFromNumber(3), "test4", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + eventService.saveEvent(new CreateGroupEvent(idFromNumber(4), "test5", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); assertThat(groupService.getAllLecturesWithVisibilityPublic().size()).isEqualTo(4); } @Disabled @Test void findGroupWithTest() { - eventService.saveEvent(new CreateGroupEvent(TestBuilder.idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); - eventService.saveEvent(new AddUserEvent(TestBuilder.idFromNumber(0), "test1", "test", "test", "test@test")); - eventService.saveEvent(new UpdateGroupTitleEvent(TestBuilder.idFromNumber(0), "test1", "TestGroup")); - eventService.saveEvent(new UpdateGroupDescriptionEvent(TestBuilder.idFromNumber(0), "test1", "TestDescription")); - eventService.saveEvent(new UpdateRoleEvent(TestBuilder.idFromNumber(0), "test1", Role.MEMBER)); + eventService.saveEvent(new CreateGroupEvent(idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); + eventService.saveEvent(new AddUserEvent(idFromNumber(0), "test1", "test", "test", "test@test")); + eventService.saveEvent(new UpdateGroupTitleEvent(idFromNumber(0), "test1", "TestGroup")); + eventService.saveEvent(new UpdateGroupDescriptionEvent(idFromNumber(0), "test1", "TestDescription")); + eventService.saveEvent(new UpdateRoleEvent(idFromNumber(0), "test1", Role.MEMBER)); assertThat(groupService.findGroupWith("T", new Account("jens", "a@A", "test", "peter", "mueller", null)).size()).isEqualTo(1); } From a0d6243b5c8f24876793add9c1b2f7dd4ed8d81c Mon Sep 17 00:00:00 2001 From: Christoph Date: Tue, 24 Mar 2020 22:28:56 +0100 Subject: [PATCH 13/21] improved testing --- .../gruppen2/domain/event/AddUserEvent.java | 2 +- .../domain/exception/GroupFullException.java | 2 +- .../gruppen2/repository/EventRepository.java | 1 + .../mops/gruppen2/service/EventService.java | 24 +- .../mops/gruppen2/service/GroupService.java | 16 +- src/test/java/mops/gruppen2/TestBuilder.java | 166 ++++++++++--- .../gruppen2/service/EventServiceTest.java | 117 +++++++--- .../gruppen2/service/GroupServiceTest.java | 221 +++++++++++++----- 8 files changed, 409 insertions(+), 140 deletions(-) diff --git a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java index 0e297fa..9020b0c 100644 --- a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java @@ -39,7 +39,7 @@ public class AddUserEvent extends Event { throw new UserAlreadyExistsException(this.getClass().toString()); } - if (group.getMembers().size() == group.getUserMaximum()) { + if (group.getMembers().size() >= group.getUserMaximum()) { throw new GroupFullException(this.getClass().toString()); } diff --git a/src/main/java/mops/gruppen2/domain/exception/GroupFullException.java b/src/main/java/mops/gruppen2/domain/exception/GroupFullException.java index 1fb1509..8676b94 100644 --- a/src/main/java/mops/gruppen2/domain/exception/GroupFullException.java +++ b/src/main/java/mops/gruppen2/domain/exception/GroupFullException.java @@ -5,7 +5,7 @@ import org.springframework.http.HttpStatus; public class GroupFullException extends EventException { public GroupFullException(String info) { - super(HttpStatus.INTERNAL_SERVER_ERROR, "Der User existiert bereits.", info); + super(HttpStatus.INTERNAL_SERVER_ERROR, "Die Gruppe ist voll.", info); } } diff --git a/src/main/java/mops/gruppen2/repository/EventRepository.java b/src/main/java/mops/gruppen2/repository/EventRepository.java index f2e6d4d..48e55bf 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Repository; import java.util.List; @Repository +//TODO Rename Queries + Formatting public interface EventRepository extends CrudRepository { @Query("select distinct group_id from event where user_id =:id") diff --git a/src/main/java/mops/gruppen2/service/EventService.java b/src/main/java/mops/gruppen2/service/EventService.java index e442491..e875d37 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -12,6 +12,7 @@ import java.util.UUID; import java.util.stream.Collectors; @Service +//TODO: Evtl aufsplitten in EventRepoService und EventService? public class EventService { private final JsonService jsonService; @@ -28,8 +29,22 @@ public class EventService { * @param event Event, welches gespeichert wird */ public void saveEvent(Event event) { - EventDTO eventDTO = getDTO(event); - eventStore.save(eventDTO); + eventStore.save(getDTO(event)); + } + + public void saveAll(Event... events) { + for (Event event : events) { + eventStore.save(getDTO(event)); + } + } + + @SafeVarargs + public final void saveAll(List... events) { + for (List eventlist : events) { + for (Event event : eventlist) { + eventStore.save(getDTO(event)); + } + } } /** @@ -39,6 +54,7 @@ public class EventService { * @param event Event, welches in DTO übersetzt wird * @return EventDTO Neues DTO */ + //TODO Rename: getDTOFromEvent? public EventDTO getDTO(Event event) { String payload = ""; try { @@ -58,6 +74,7 @@ public class EventService { /** * Findet alle Events welche ab dem neuen Status hinzugekommen sind. + * Sucht alle Events mit event_id > status * * @param status Die Id des zuletzt gespeicherten Events * @return Liste von neueren Events @@ -75,6 +92,7 @@ public class EventService { * @param eventDTOS Liste von DTOs * @return Liste von Events */ + //TODO Rename: getEventsFromDTO? public List translateEventDTOs(Iterable eventDTOS) { List events = new ArrayList<>(); @@ -88,7 +106,6 @@ public class EventService { return events; } - public Long getMaxEvent_id() { return eventStore.getHighesEvent_ID(); } @@ -98,6 +115,7 @@ public class EventService { return translateEventDTOs(eventDTOList); } + //TODO: Nur AddUserEvents betrachten public List findGroupIdsByUser(String userId) { List groupIDs = eventStore.findGroup_idsWhereUser_id(userId); diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index 61d4c19..c582460 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -35,6 +35,7 @@ public class GroupService { * @param groupIds Liste an IDs * @return Liste an Events */ + //TODO Das vielleicht in den EventRepoService? public List getGroupEvents(List groupIds) { List eventDTOS = new ArrayList<>(); for (UUID groupId : groupIds) { @@ -54,8 +55,6 @@ public class GroupService { public List projectEventList(List events) throws EventException { Map groupMap = new HashMap<>(); - events.forEach(System.out::println); - events.parallelStream() .forEachOrdered(event -> event.apply(getOrCreateGroup(groupMap, event.getGroupId()))); @@ -77,6 +76,7 @@ public class GroupService { * @return Liste von projizierten Gruppen * @throws EventException Projektionsfehler */ + //TODO Rename public List getAllGroupWithVisibilityPublic(String userId) throws EventException { List createEvents = eventService.translateEventDTOs(eventRepository.findAllEventsByType("CreateGroupEvent")); createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("UpdateGroupDescriptionEvent"))); @@ -95,6 +95,7 @@ public class GroupService { } + //TODO Rename public List getAllLecturesWithVisibilityPublic() throws EventException { List createEvents = eventService.translateEventDTOs(eventRepository.findAllEventsByType("CreateGroupEvent")); createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("UpdateGroupTitleEvent"))); @@ -103,7 +104,6 @@ public class GroupService { List visibleGroups = projectEventList(createEvents); return visibleGroups.parallelStream() - .filter(group -> group.getType() != null) .filter(group -> group.getType() == GroupType.LECTURE) .filter(group -> group.getVisibility() == Visibility.PUBLIC) .collect(Collectors.toList()); @@ -118,12 +118,16 @@ public class GroupService { * @return Liste von projizierten Gruppen * @throws EventException Projektionsfehler */ + //Todo Rename public List findGroupWith(String search, Account account) throws EventException { + if (search.isEmpty()) { + return getAllGroupWithVisibilityPublic(account.getName()); + } + return getAllGroupWithVisibilityPublic(account.getName()) .parallelStream() - .filter(group -> - group.getTitle().toLowerCase().contains(search.toLowerCase()) || - group.getDescription().toLowerCase().contains(search.toLowerCase())) + .filter(group -> group.getTitle().toLowerCase().contains(search.toLowerCase()) + || group.getDescription().toLowerCase().contains(search.toLowerCase())) .collect(Collectors.toList()); } } diff --git a/src/test/java/mops/gruppen2/TestBuilder.java b/src/test/java/mops/gruppen2/TestBuilder.java index 513560c..5ab59fa 100644 --- a/src/test/java/mops/gruppen2/TestBuilder.java +++ b/src/test/java/mops/gruppen2/TestBuilder.java @@ -7,11 +7,13 @@ import mops.gruppen2.domain.Role; import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.event.AddUserEvent; import mops.gruppen2.domain.event.CreateGroupEvent; +import mops.gruppen2.domain.event.DeleteGroupEvent; import mops.gruppen2.domain.event.DeleteUserEvent; import mops.gruppen2.domain.event.Event; import mops.gruppen2.domain.event.UpdateGroupDescriptionEvent; import mops.gruppen2.domain.event.UpdateGroupTitleEvent; import mops.gruppen2.domain.event.UpdateRoleEvent; +import mops.gruppen2.security.Account; import java.util.ArrayList; import java.util.Collection; @@ -25,41 +27,67 @@ public class TestBuilder { private static final Faker faker = new Faker(); + public static Account account(String name) { + return new Account(name, + "", + "", + "", + "", + null); + } + + public static Group apply(Group group, Event... events) { + for (Event event : events) { + event.apply(group); + } + + return group; + } + + public static Group apply(Event... events) { + return apply(new Group(), events); + } + /** * Baut eine UUID. * - * @param i Zahl von 0 bis 9 + * @param id Integer id * @return UUID */ - public static UUID idFromNumber(int i) { - if (i > 9) { - return null; - } - return UUID.fromString("00000000-0000-0000-0000-00000000000" + i); + public static UUID uuidFromInt(int id) { + return UUID.fromString("00000000-0000-0000-0000-" + + "0".repeat(11 - String.valueOf(id).length()) + + id); } /** * Generiert ein EventLog mit mehreren Gruppen und Usern. * * @param count Gruppenanzahl - * @param membercount Gesamte Mitgliederanzahl + * @param membercount Mitgliederanzahl pro Gruppe * @return Eventliste */ - public static List completeGroups(int count, int membercount) { - int memPerGroup = membercount / count; - - return IntStream.rangeClosed(0, count) + public static List completePublicGroups(int count, int membercount) { + return IntStream.range(0, count) .parallel() - .mapToObj(i -> completeGroup(memPerGroup)) + .mapToObj(i -> completePublicGroup(membercount)) .flatMap(Collection::stream) .collect(Collectors.toList()); } - public static List completeGroup(int membercount) { + public static List completePrivateGroups(int count, int membercount) { + return IntStream.range(0, count) + .parallel() + .mapToObj(i -> completePrivateGroup(membercount)) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + } + + public static List completePublicGroup(int membercount) { List eventList = new ArrayList<>(); UUID groupId = UUID.randomUUID(); - eventList.add(createGroupEvent(groupId)); + eventList.add(createPublicGroupEvent(groupId)); eventList.add(updateGroupTitleEvent(groupId)); eventList.add(updateGroupDescriptionEvent(groupId)); eventList.addAll(addUserEvents(membercount, groupId)); @@ -67,8 +95,24 @@ public class TestBuilder { return eventList; } - public static List completeGroup() { - return completeGroup(100); + public static List completePrivateGroup(int membercount) { + List eventList = new ArrayList<>(); + UUID groupId = UUID.randomUUID(); + + eventList.add(createPrivateGroupEvent(groupId)); + eventList.add(updateGroupTitleEvent(groupId)); + eventList.add(updateGroupDescriptionEvent(groupId)); + eventList.addAll(addUserEvents(membercount, groupId)); + + return eventList; + } + + public static List completePublicGroup() { + return completePublicGroup(100); + } + + public static List completePrivateGroup() { + return completePrivateGroup(100); } /** @@ -77,26 +121,69 @@ public class TestBuilder { * @param count Anzahl der verschiedenen Gruppen * @return Eventliste */ - public static List createGroupEvents(int count) { - return IntStream.rangeClosed(0, count) + public static List createPublicGroupEvents(int count) { + return IntStream.range(0, count) .parallel() - .mapToObj(i -> createGroupEvent()) + .mapToObj(i -> createPublicGroupEvent()) .collect(Collectors.toList()); } - public static CreateGroupEvent createGroupEvent(UUID groupId) { + public static List createPrivateGroupEvents(int count) { + return IntStream.range(0, count) + .parallel() + .mapToObj(i -> createPublicGroupEvent()) + .collect(Collectors.toList()); + } + + public static List createMixedGroupEvents(int count) { + return IntStream.range(0, count) + .parallel() + .mapToObj(i -> faker.random().nextInt(0, 1) > 0.5 + ? createPublicGroupEvent() + : createPrivateGroupEvent()) + .collect(Collectors.toList()); + } + + public static Event createPrivateGroupEvent(UUID groupId) { + return createGroupEvent(groupId, Visibility.PRIVATE); + } + + public static Event createPrivateGroupEvent() { + return createPrivateGroupEvent(UUID.randomUUID()); + } + + public static Event createPublicGroupEvent(UUID groupId) { + return createGroupEvent(groupId, Visibility.PUBLIC); + } + + public static Event createPublicGroupEvent() { + return createPublicGroupEvent(UUID.randomUUID()); + } + + public static Event createGroupEvent(UUID groupId, Visibility visibility) { return new CreateGroupEvent( groupId, faker.random().hex(), null, GroupType.SIMPLE, - Visibility.PUBLIC, + visibility, 10000000L ); } - public static CreateGroupEvent createGroupEvent() { - return createGroupEvent(UUID.randomUUID()); + public static Event createLectureEvent() { + return createLectureEvent(UUID.randomUUID()); + } + + public static Event createLectureEvent(UUID groupId) { + return new CreateGroupEvent( + groupId, + faker.random().hex(), + null, + GroupType.LECTURE, + Visibility.PUBLIC, + 10000000L + ); } /** @@ -107,13 +194,13 @@ public class TestBuilder { * @return Eventliste */ public static List addUserEvents(int count, UUID groupId) { - return IntStream.rangeClosed(1, count) + return IntStream.range(0, count) .parallel() .mapToObj(i -> addUserEvent(groupId, String.valueOf(i))) .collect(Collectors.toList()); } - public static AddUserEvent addUserEvent(UUID groupId, String userId) { + public static Event addUserEvent(UUID groupId, String userId) { String firstname = firstname(); String lastname = lastname(); @@ -126,10 +213,11 @@ public class TestBuilder { ); } - public static AddUserEvent addUserEvent(UUID groupId) { + public static Event addUserEvent(UUID groupId) { return addUserEvent(groupId, faker.random().hex()); } + // Am besten einfach nicht benutzen public static List deleteUserEvents(int count, List eventList) { List removeEvents = new ArrayList<>(); List shuffle = eventList.parallelStream() @@ -155,36 +243,44 @@ public class TestBuilder { * @param group Gruppe welche geleert wird * @return Eventliste */ - public static List deleteUserEvents(Group group) { + public static List deleteUserEvents(Group group) { return group.getMembers().parallelStream() .map(user -> deleteUserEvent(group.getId(), user.getId())) .collect(Collectors.toList()); } - public static DeleteUserEvent deleteUserEvent(UUID groupId, String userId) { + public static Event deleteUserEvent(UUID groupId, String userId) { return new DeleteUserEvent( groupId, userId ); } - public static UpdateGroupDescriptionEvent updateGroupDescriptionEvent(UUID groupId) { + public static Event updateGroupDescriptionEvent(UUID groupId) { + return updateGroupDescriptionEvent(groupId, quote()); + } + + public static Event updateGroupDescriptionEvent(UUID groupId, String description) { return new UpdateGroupDescriptionEvent( groupId, faker.random().hex(), - quote() + description ); } - public static UpdateGroupTitleEvent updateGroupTitleEvent(UUID groupId) { + public static Event updateGroupTitleEvent(UUID groupId) { + return updateGroupTitleEvent(groupId, champion()); + } + + public static Event updateGroupTitleEvent(UUID groupId, String title) { return new UpdateGroupTitleEvent( groupId, faker.random().hex(), - champion() + title ); } - public static UpdateRoleEvent randomUpdateRoleEvent(UUID groupId, String userId, Role role) { + public static Event updateRoleEvent(UUID groupId, String userId, Role role) { return new UpdateRoleEvent( groupId, userId, @@ -192,6 +288,10 @@ public class TestBuilder { ); } + public static Event deleteGroupEvent(UUID groupId) { + return new DeleteGroupEvent(groupId, faker.random().hex()); + } + private static String firstname() { return clean(faker.name().firstName()); } diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index 1abd640..cfc95b8 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -1,14 +1,10 @@ package mops.gruppen2.service; import mops.gruppen2.Gruppen2Application; -import mops.gruppen2.domain.GroupType; -import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.dto.EventDTO; -import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.domain.event.Event; import mops.gruppen2.repository.EventRepository; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -17,17 +13,21 @@ import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - +import static mops.gruppen2.TestBuilder.addUserEvent; +import static mops.gruppen2.TestBuilder.addUserEvents; +import static mops.gruppen2.TestBuilder.createPrivateGroupEvent; +import static mops.gruppen2.TestBuilder.createPrivateGroupEvents; +import static mops.gruppen2.TestBuilder.createPublicGroupEvent; +import static mops.gruppen2.TestBuilder.createPublicGroupEvents; +import static mops.gruppen2.TestBuilder.updateGroupDescriptionEvent; +import static mops.gruppen2.TestBuilder.uuidFromInt; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertEquals; +//TODO: Der ID autocounter wird nicht resettet -> Tests schlagen fehl beim nacheinanderausführen @ExtendWith(SpringExtension.class) @SpringBootTest(classes = Gruppen2Application.class) -@Rollback @Transactional +@Rollback class EventServiceTest { @Autowired @@ -39,39 +39,90 @@ class EventServiceTest { @BeforeEach void setUp() { eventService = new EventService(jsonService, eventRepository); - } - - @Disabled - @Test - void getMaxID() { eventRepository.deleteAll(); - //UpdateRoleEvent updateRoleEvent = new UpdateRoleEvent(2L, "hi",Role.ADMIN); - //eventService.saveEvent(updateRoleEvent); - assertEquals(1L, eventService.getMaxEvent_id()); // funzt noch net richtig weil Autoincrement hochaddiert auch wenn DB leer } @Test - void checkGroupReturnNextValue() { - eventRepository.deleteAll(); - CreateGroupEvent createGroupEvent = new CreateGroupEvent(UUID.fromString("A"), "lol", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); - eventService.saveEvent(createGroupEvent); - assertEquals(2L, UUID.fromString("A")); // weil in DataSQL eine Gruppe erstellt wird + void saveEvent() { + eventService.saveEvent(createPublicGroupEvent()); + + assertThat(eventRepository.findAll()).hasSize(1); } @Test - void checkGroupReturnOneIfDBIsEmpty() { - //dafür muss data.sql weg - eventRepository.deleteAll(); - assertEquals(1L, UUID.fromString("A")); + void saveAll() { + eventService.saveAll(createPrivateGroupEvents(10)); + + assertThat(eventRepository.findAll()).hasSize(10); } @Test - void translateEventDTOsTest() { - //EventDTO eventDTO1 = new EventDTO(1L,1L, "killerbert", "CreateGroupEvent", "{\"type\":\"CreateGroupEvent\",\"groupId\":1,\"userId\":\"orga\",\"groupVisibility\":\"PUBLIC\",\"groupParent\":null,\"groupType\":\"SIMPLE\",\"groupUserMaximum\":2}"); - List eventDTOS1 = new ArrayList<>(); - //eventDTOS1.add(eventDTO1); - List events = eventService.translateEventDTOs(eventDTOS1); - assertThat(events.get(0)).isInstanceOf(CreateGroupEvent.class); + void testSaveAll() { + eventService.saveAll(createPublicGroupEvents(5), + createPrivateGroupEvents(5)); + + assertThat(eventRepository.findAll()).hasSize(10); } + @Test + void getDTO() { + Event event = createPublicGroupEvent(); + + EventDTO dto = eventService.getDTO(event); + + assertThat(dto.getGroup_id()).isEqualTo(event.getGroupId().toString()); + assertThat(dto.getUser_id()).isEqualTo(event.getUserId()); + assertThat(dto.getEvent_id()).isEqualTo(null); + assertThat(dto.getEvent_type()).isEqualTo("CreateGroupEvent"); + } + + @Test + void getNewEvents_createGroupEvents() { + eventService.saveAll(createPrivateGroupEvents(10)); + + assertThat(eventService.getNewEvents(0L)).hasSize(10); + assertThat(eventService.getNewEvents(5L)).hasSize(5); + assertThat(eventService.getNewEvents(10L)).isEmpty(); + } + + @Test + void getNewEvents_mixedEvents() { + eventService.saveAll(createPrivateGroupEvent(uuidFromInt(0)), + updateGroupDescriptionEvent(uuidFromInt(0)), + createPrivateGroupEvent(uuidFromInt(1)), + updateGroupDescriptionEvent(uuidFromInt(1))); + + assertThat(eventService.getNewEvents(0L)).hasSize(4); + assertThat(eventService.getNewEvents(1L)).hasSize(4); + assertThat(eventService.getNewEvents(2L)).hasSize(2); + assertThat(eventService.getNewEvents(3L)).hasSize(2); + } + + @Test + void getMaxEvent_id() { + eventService.saveAll(createPrivateGroupEvents(10)); + + assertThat(eventService.getMaxEvent_id()).isEqualTo(10); + } + + @Test + void getEventsOfGroup() { + eventService.saveAll(addUserEvents(10, uuidFromInt(0)), + addUserEvents(5, uuidFromInt(1))); + + assertThat(eventService.getEventsOfGroup(uuidFromInt(0))).hasSize(10); + assertThat(eventService.getEventsOfGroup(uuidFromInt(1))).hasSize(5); + } + + @Test + void findGroupIdsByUser() { + eventService.saveAll(addUserEvent(uuidFromInt(0), "A"), + addUserEvent(uuidFromInt(1), "A"), + addUserEvent(uuidFromInt(2), "A"), + addUserEvent(uuidFromInt(3), "A"), + addUserEvent(uuidFromInt(3), "B")); + + assertThat(eventService.findGroupIdsByUser("A")).hasSize(4); + assertThat(eventService.findGroupIdsByUser("B")).hasSize(1); + } } diff --git a/src/test/java/mops/gruppen2/service/GroupServiceTest.java b/src/test/java/mops/gruppen2/service/GroupServiceTest.java index 33449da..48d22e6 100644 --- a/src/test/java/mops/gruppen2/service/GroupServiceTest.java +++ b/src/test/java/mops/gruppen2/service/GroupServiceTest.java @@ -1,43 +1,47 @@ package mops.gruppen2.service; import mops.gruppen2.Gruppen2Application; +import mops.gruppen2.TestBuilder; import mops.gruppen2.domain.Group; -import mops.gruppen2.domain.GroupType; -import mops.gruppen2.domain.Role; import mops.gruppen2.domain.Visibility; -import mops.gruppen2.domain.event.AddUserEvent; -import mops.gruppen2.domain.event.CreateGroupEvent; -import mops.gruppen2.domain.event.DeleteGroupEvent; import mops.gruppen2.domain.event.Event; -import mops.gruppen2.domain.event.UpdateGroupDescriptionEvent; -import mops.gruppen2.domain.event.UpdateGroupTitleEvent; -import mops.gruppen2.domain.event.UpdateRoleEvent; import mops.gruppen2.repository.EventRepository; -import mops.gruppen2.security.Account; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.UUID; -import static mops.gruppen2.TestBuilder.idFromNumber; +import static mops.gruppen2.TestBuilder.account; +import static mops.gruppen2.TestBuilder.addUserEvent; +import static mops.gruppen2.TestBuilder.completePrivateGroup; +import static mops.gruppen2.TestBuilder.completePrivateGroups; +import static mops.gruppen2.TestBuilder.completePublicGroups; +import static mops.gruppen2.TestBuilder.createLectureEvent; +import static mops.gruppen2.TestBuilder.createPrivateGroupEvent; +import static mops.gruppen2.TestBuilder.createPublicGroupEvent; +import static mops.gruppen2.TestBuilder.deleteGroupEvent; +import static mops.gruppen2.TestBuilder.updateGroupDescriptionEvent; +import static mops.gruppen2.TestBuilder.updateGroupTitleEvent; +import static mops.gruppen2.TestBuilder.uuidFromInt; import static org.assertj.core.api.Assertions.assertThat; @ExtendWith(SpringExtension.class) @SpringBootTest(classes = Gruppen2Application.class) +@Transactional +@Rollback class GroupServiceTest { @Autowired private EventRepository eventRepository; @Autowired - private JsonService jsonService; - @Autowired private EventService eventService; private GroupService groupService; @@ -47,91 +51,182 @@ class GroupServiceTest { eventRepository.deleteAll(); } + //TODO: Wofür ist dieser Test? @Test void rightClassForSuccessfulGroup() { - List eventList = new ArrayList<>(); + /*List eventList = new ArrayList<>(); UUID id = UUID.randomUUID(); eventList.add(new CreateGroupEvent(id, "Prof", null, GroupType.LECTURE, Visibility.PRIVATE, 1000L)); - eventList.add(new AddUserEvent(id, "Ulli", "Ulli", "Honnis", "FC@B.de")); + eventList.add(new AddUserEvent(id, "Ulli", "Ulli", "Honnis", "FC@B.de"));*/ + List eventList = completePrivateGroup(1); + List groups = groupService.projectEventList(eventList); assertThat(groups.get(0)).isInstanceOf(Group.class); } @Test - void getGroupEventsTest() { - CreateGroupEvent test1 = new CreateGroupEvent(idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); - CreateGroupEvent test2 = new CreateGroupEvent(idFromNumber(1), "test2", null, GroupType.SIMPLE, Visibility.PUBLIC, 10L); - eventService.saveEvent(test1); - eventService.saveEvent(test2); - List longs = new ArrayList<>(); - longs.add(idFromNumber(0)); - longs.add(idFromNumber(1)); - assertThat(groupService.getGroupEvents(longs).get(0).getUserId()).isEqualTo("test1"); + void projectEventList_SingleGroup() { + List eventList = completePrivateGroup(5); + + List groups = groupService.projectEventList(eventList); + + assertThat(groups).hasSize(1); + assertThat(groups.get(0).getMembers()).hasSize(5); + assertThat(groups.get(0).getVisibility()).isEqualTo(Visibility.PRIVATE); + } + + @Test + void projectEventList_MultipleGroups() { + List eventList = completePrivateGroups(10, 2); + eventList.addAll(completePublicGroups(10, 5)); + + List groups = groupService.projectEventList(eventList); + + assertThat(groups).hasSize(20); + assertThat(groups.stream().map(group -> group.getMembers().size()).reduce(Integer::sum).get()).isEqualTo(70); + } + + @Test + void getGroupEvents() { +// CreateGroupEvent test1 = new CreateGroupEvent(uuidFromInt(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); +// CreateGroupEvent test2 = new CreateGroupEvent(uuidFromInt(1), "test2", null, GroupType.SIMPLE, Visibility.PUBLIC, 10L); + + eventService.saveAll(createPublicGroupEvent(uuidFromInt(0)), + createPublicGroupEvent(uuidFromInt(1)), + createPrivateGroupEvent(uuidFromInt(2))); + + List groupIds = Arrays.asList(uuidFromInt(0), uuidFromInt(1)); + + assertThat(groupService.getGroupEvents(groupIds)).hasSize(2); + assertThat(groupService.getGroupEvents(groupIds).get(0).getGroupId()).isEqualTo(uuidFromInt(0)); + assertThat(groupService.getGroupEvents(groupIds).get(1).getGroupId()).isEqualTo(uuidFromInt(1)); } @Test void getAllGroupWithVisibilityPublicTestCreateAndDeleteSameGroup() { - CreateGroupEvent test1 = new CreateGroupEvent(idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); - DeleteGroupEvent test2 = new DeleteGroupEvent(idFromNumber(0), "test1"); + //CreateGroupEvent test1 = new CreateGroupEvent(uuidFromInt(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L); + //DeleteGroupEvent test2 = new DeleteGroupEvent(uuidFromInt(0), "test1"); + Event test1 = createPublicGroupEvent(uuidFromInt(0)); + Event test2 = deleteGroupEvent(uuidFromInt(0)); - Group group = new Group(); - test1.apply(group); - test2.apply(group); + //Group group = new Group(); + //test1.apply(group); + //test2.apply(group); - //assertThat(group.getType()).isEqualTo(null); + //TODO: Hier projectEventlist()? + Group group = TestBuilder.apply(test1, test2); - assertThat(groupService.getAllGroupWithVisibilityPublic("test1").size()).isEqualTo(0); + assertThat(group.getType()).isEqualTo(null); + assertThat(groupService.getAllGroupWithVisibilityPublic("test1")).isEmpty(); } @Test void getAllGroupWithVisibilityPublicTestGroupPublic() { - eventService.saveEvent(new CreateGroupEvent(idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); - eventService.saveEvent(new DeleteGroupEvent(idFromNumber(0), "test1")); - eventService.saveEvent(new CreateGroupEvent(idFromNumber(1), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new UpdateRoleEvent(idFromNumber(1), "test2", Role.MEMBER)); +// eventService.saveEvent(new CreateGroupEvent(uuidFromInt(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); +// eventService.saveEvent(new DeleteGroupEvent(uuidFromInt(0), "test1")); +// eventService.saveEvent(new CreateGroupEvent(uuidFromInt(1), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); +// eventService.saveEvent(new UpdateRoleEvent(uuidFromInt(1), "test2", Role.MEMBER)); //Wofür ist das + + eventService.saveAll(createPublicGroupEvent(uuidFromInt(0)), + deleteGroupEvent(uuidFromInt(0)), + createPublicGroupEvent()); + assertThat(groupService.getAllGroupWithVisibilityPublic("test1").size()).isEqualTo(1); } @Test void getAllGroupWithVisibilityPublicTestAddSomeEvents() { - eventService.saveEvent(new CreateGroupEvent(idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); - eventService.saveEvent(new DeleteGroupEvent(idFromNumber(0), "test1")); - eventService.saveEvent(new CreateGroupEvent(idFromNumber(1), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new UpdateRoleEvent(idFromNumber(1), "test2", Role.MEMBER)); - eventService.saveEvent(new CreateGroupEvent(idFromNumber(2), "test3", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new CreateGroupEvent(idFromNumber(3), "test4", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new CreateGroupEvent(idFromNumber(4), "test5", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - assertThat(groupService.getAllGroupWithVisibilityPublic("test1").size()).isEqualTo(4); +// eventService.saveEvent(new CreateGroupEvent(uuidFromInt(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); +// eventService.saveEvent(new DeleteGroupEvent(uuidFromInt(0), "test1")); +// eventService.saveEvent(new CreateGroupEvent(uuidFromInt(1), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); +// eventService.saveEvent(new UpdateRoleEvent(uuidFromInt(1), "test2", Role.MEMBER)); // Wofür? +// eventService.saveEvent(new CreateGroupEvent(uuidFromInt(2), "test3", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); +// eventService.saveEvent(new CreateGroupEvent(uuidFromInt(3), "test4", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); +// eventService.saveEvent(new CreateGroupEvent(uuidFromInt(4), "test5", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + + eventService.saveAll(createPublicGroupEvent(uuidFromInt(0)), + deleteGroupEvent(uuidFromInt(0)), + createPublicGroupEvent(), + createPublicGroupEvent(), + createPublicGroupEvent(), + createPrivateGroupEvent()); + + assertThat(groupService.getAllGroupWithVisibilityPublic("test1").size()).isEqualTo(3); } - @Disabled @Test void getAllGroupWithVisibilityPublicTestIsUserInGroup() { - eventService.saveEvent(new CreateGroupEvent(idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); - eventService.saveEvent(new AddUserEvent(idFromNumber(0), "test1", "test", "test", "test@test")); - assertThat(groupService.getAllGroupWithVisibilityPublic("test2").get(0).getMembers().size()).isEqualTo(1); +// eventService.saveEvent(new CreateGroupEvent(uuidFromInt(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); +// eventService.saveEvent(new AddUserEvent(uuidFromInt(0), "test1", "test", "test", "test@test")); + + eventService.saveAll(createPublicGroupEvent(uuidFromInt(0)), + addUserEvent(uuidFromInt(0), "kobold"), + createPrivateGroupEvent(), + createPublicGroupEvent()); + + //Das kommt glaube ich eher in einen Test für die Projektion + //assertThat(groupService.getAllGroupWithVisibilityPublic("test2").get(0).getMembers().size()).isEqualTo(1); + + assertThat(groupService.getAllGroupWithVisibilityPublic("kobold")).hasSize(1); + assertThat(groupService.getAllGroupWithVisibilityPublic("peter")).hasSize(2); } @Test - void getAllLecturesWithVisibilityPublicTest() { - eventService.saveEvent(new CreateGroupEvent(idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); - eventService.saveEvent(new CreateGroupEvent(idFromNumber(1), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new UpdateRoleEvent(idFromNumber(1), "test2", Role.MEMBER)); - eventService.saveEvent(new CreateGroupEvent(idFromNumber(2), "test3", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new CreateGroupEvent(idFromNumber(3), "test4", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); - eventService.saveEvent(new CreateGroupEvent(idFromNumber(4), "test5", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + void getAllLecturesWithVisibilityPublic() { +// eventService.saveEvent(new CreateGroupEvent(uuidFromInt(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); +// eventService.saveEvent(new CreateGroupEvent(uuidFromInt(1), "test2", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); +// eventService.saveEvent(new UpdateRoleEvent(uuidFromInt(1), "test2", Role.MEMBER)); // Hä +// eventService.saveEvent(new CreateGroupEvent(uuidFromInt(2), "test3", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); +// eventService.saveEvent(new CreateGroupEvent(uuidFromInt(3), "test4", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); +// eventService.saveEvent(new CreateGroupEvent(uuidFromInt(4), "test5", null, GroupType.LECTURE, Visibility.PUBLIC, 10L)); + + eventService.saveAll(createLectureEvent(), + createPublicGroupEvent(), + createLectureEvent(), + createLectureEvent(), + createLectureEvent()); + assertThat(groupService.getAllLecturesWithVisibilityPublic().size()).isEqualTo(4); } - @Disabled @Test - void findGroupWithTest() { - eventService.saveEvent(new CreateGroupEvent(idFromNumber(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); - eventService.saveEvent(new AddUserEvent(idFromNumber(0), "test1", "test", "test", "test@test")); - eventService.saveEvent(new UpdateGroupTitleEvent(idFromNumber(0), "test1", "TestGroup")); - eventService.saveEvent(new UpdateGroupDescriptionEvent(idFromNumber(0), "test1", "TestDescription")); - eventService.saveEvent(new UpdateRoleEvent(idFromNumber(0), "test1", Role.MEMBER)); - assertThat(groupService.findGroupWith("T", new Account("jens", "a@A", "test", "peter", "mueller", null)).size()).isEqualTo(1); + void findGroupWith_UserMember_AllGroups() { +// eventService.saveEvent(new CreateGroupEvent(uuidFromInt(0), "test1", null, GroupType.SIMPLE, Visibility.PUBLIC, 20L)); +// eventService.saveEvent(new AddUserEvent(uuidFromInt(0), "test1", "test", "test", "test@test")); +// eventService.saveEvent(new UpdateGroupTitleEvent(uuidFromInt(0), "test1", "TestGroup")); +// eventService.saveEvent(new UpdateGroupDescriptionEvent(uuidFromInt(0), "test1", "TestDescription")); +// eventService.saveEvent(new UpdateRoleEvent(uuidFromInt(0), "test1", Role.MEMBER)); + + eventService.saveAll(createPublicGroupEvent(uuidFromInt(0)), + addUserEvent(uuidFromInt(0), "jens"), + updateGroupTitleEvent(uuidFromInt(0)), + updateGroupDescriptionEvent(uuidFromInt(0))); + + //assertThat(groupService.findGroupWith("T", new Account("jens", "a@A", "test", "peter", "mueller", null)).size()).isEqualTo(1); + assertThat(groupService.findGroupWith("", account("jens"))).isEmpty(); + } + + @Test + void findGroupWith_UserNoMember_AllGroups() { + eventService.saveAll(completePublicGroups(10, 0), + completePrivateGroups(10, 0)); + + assertThat(groupService.findGroupWith("", account("jens"))).hasSize(10); + } + + @Test + void findGroupWith_FilterGroups() { + eventService.saveAll(createPublicGroupEvent(uuidFromInt(0)), + updateGroupTitleEvent(uuidFromInt(0), "KK"), + updateGroupDescriptionEvent(uuidFromInt(0), "ABCDE"), + createPublicGroupEvent(uuidFromInt(1)), + updateGroupTitleEvent(uuidFromInt(1), "ABCDEFG"), + updateGroupDescriptionEvent(uuidFromInt(1), "KK"), + createPrivateGroupEvent()); + + assertThat(groupService.findGroupWith("A", account("jesus"))).hasSize(2); + assertThat(groupService.findGroupWith("F", account("jesus"))).hasSize(1); + assertThat(groupService.findGroupWith("Z", account("jesus"))).hasSize(0); } } From 1dd3f9b6fe9c44dfbb37ae2ae1133aba22935def Mon Sep 17 00:00:00 2001 From: killerber4t Date: Wed, 25 Mar 2020 14:08:00 +0100 Subject: [PATCH 14/21] create ValidationService Co-Authored-By: xxnitram --- .../gruppen2/controller/WebController.java | 56 ++++++------------- .../gruppen2/service/ValidationService.java | 54 ++++++++++++++++++ 2 files changed, 72 insertions(+), 38 deletions(-) create mode 100644 src/main/java/mops/gruppen2/service/ValidationService.java diff --git a/src/main/java/mops/gruppen2/controller/WebController.java b/src/main/java/mops/gruppen2/controller/WebController.java index e8f9248..e543621 100644 --- a/src/main/java/mops/gruppen2/controller/WebController.java +++ b/src/main/java/mops/gruppen2/controller/WebController.java @@ -14,11 +14,7 @@ import mops.gruppen2.domain.exception.PageNotFoundException; import mops.gruppen2.domain.exception.UserAlreadyExistsException; import mops.gruppen2.domain.exception.WrongFileException; import mops.gruppen2.security.Account; -import mops.gruppen2.service.ControllerService; -import mops.gruppen2.service.CsvService; -import mops.gruppen2.service.GroupService; -import mops.gruppen2.service.KeyCloakService; -import mops.gruppen2.service.UserService; +import mops.gruppen2.service.*; import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -47,12 +43,14 @@ public class WebController { private final GroupService groupService; private final UserService userService; private final ControllerService controllerService; + private final ValidationService validationService; - public WebController(KeyCloakService keyCloakService, GroupService groupService, UserService userService, ControllerService controllerService) { + public WebController(KeyCloakService keyCloakService, GroupService groupService, UserService userService, ControllerService controllerService, ValidationService validationService) { this.keyCloakService = keyCloakService; this.groupService = groupService; this.userService = userService; this.controllerService = controllerService; + this.validationService = validationService; } /** @@ -187,9 +185,10 @@ public class WebController { @RequestParam("groupId") String groupId) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); - controllerService.updateTitle(account, UUID.fromString(groupId), title); - controllerService.updateDescription(account, UUID.fromString(groupId), description); - + if(validationService.checkTitleAndDescription(title, description)) { + controllerService.updateTitle(account, UUID.fromString(groupId), title); + controllerService.updateDescription(account, UUID.fromString(groupId), description); + } return "redirect:/gruppen2/details/" + groupId; } @@ -200,7 +199,7 @@ public class WebController { @RequestParam(value = "suchbegriff", required = false) String search) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); List groupse = new ArrayList<>(); - if (search != null) { + if (!validationService.checkSearch(search)) { groupse = groupService.findGroupWith(search, account); } model.addAttribute("account", account); @@ -216,38 +215,26 @@ public class WebController { Group group = userService.getGroupById(UUID.fromString(groupId)); Account account = keyCloakService.createAccountFromPrincipal(token); User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); - UUID parentId = group.getParent(); - Group parent = new Group(); + String URL = request.getRequestURL().toString(); + String serverURL = URL.substring(0, URL.indexOf("gruppen2/")); - if (group.getTitle() == null) { - throw new GroupNotFoundException("@details"); - } + validationService.checkGroup(group.getTitle()); + Group parent = validationService.checkParent(parentId); - if (!group.getMembers().contains(user)) { - if (group.getVisibility() == Visibility.PRIVATE) { - return "privateGroupNoMember"; - } + if (!validationService.checkIfUserInGroup(Group group, User user)) { model.addAttribute("group", group); model.addAttribute("parentId", parentId); model.addAttribute("parent", parent); return "detailsNoMember"; } - if (!controllerService.idIsEmpty(parentId)) { - parent = userService.getGroupById(parentId); - } - model.addAttribute("parentId", parentId); model.addAttribute("parent", parent); model.addAttribute("group", group); model.addAttribute("roles", group.getRoles()); model.addAttribute("user", user); model.addAttribute("admin", Role.ADMIN); - - String URL = request.getRequestURL().toString(); - String serverURL = URL.substring(0, URL.indexOf("gruppen2/")); - model.addAttribute("link", serverURL + "gruppen2/acceptinvite/" + groupId); return "detailsMember"; @@ -261,14 +248,11 @@ public class WebController { Account account = keyCloakService.createAccountFromPrincipal(token); User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); Group group = userService.getGroupById(UUID.fromString(groupId)); - if (group.getMembers().contains(user)) { - throw new UserAlreadyExistsException("Du bist bereits in dieser Gruppe."); - } - controllerService.addUser(account, UUID.fromString(groupId)); - if (group.getUserMaximum() < group.getMembers().size()) { + validationService.checkIfUserInGroupJoin(group, user); + if (group.getUserMaximum() < group.getMembers().size()+1) { throw new GroupFullException("Du kannst der Gruppe daher leider nicht beitreten."); } - //controllerService.addUser(account, groupId); + controllerService.addUser(account, UUID.fromString(groupId)); return "redirect:/gruppen2/"; } @@ -280,11 +264,7 @@ public class WebController { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); Group group = userService.getGroupById(UUID.fromString(groupId)); UUID parentId = group.getParent(); - Group parent = new Group(); - - if (!controllerService.idIsEmpty(parentId)) { - parent = userService.getGroupById(parentId); - } + Group parent = validationService.checkParent(parentId); if (group.getUserMaximum() > group.getMembers().size()) { model.addAttribute("group", group); diff --git a/src/main/java/mops/gruppen2/service/ValidationService.java b/src/main/java/mops/gruppen2/service/ValidationService.java new file mode 100644 index 0000000..25eea81 --- /dev/null +++ b/src/main/java/mops/gruppen2/service/ValidationService.java @@ -0,0 +1,54 @@ +package mops.gruppen2.service; + +import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.User; +import mops.gruppen2.domain.Visibility; +import mops.gruppen2.domain.exception.GroupNotFoundException; +import mops.gruppen2.domain.exception.NoValueException; +import mops.gruppen2.domain.exception.UserAlreadyExistsException; +import java.util.UUID; + +public class ValidationService { + + private final ControllerService controllerService; + private final UserService userService; + + public ValidationService(ControllerService controllerService, UserService userService) { + this.controllerService = controllerService; + this.userService = userService; + } + + public boolean checkTitleAndDescription(String title, String description) { + if(title != null && description != null) return true; + throw new NoValueException("Titel und Beschreibung müssen ausgefüllt werden"); + } + + public boolean checkSearch(String search) { + return search != null; + } + + public void checkGroup(String title){ + if(title == null) throw new GroupNotFoundException("@details"); + } + + public boolean checkIfUserInGroup(Group group, User user) { + if (group.getVisibility() == Visibility.PRIVATE) { + throw new GroupNotFoundException("Du hast keine Zugriffsberechtigung"); + } + return group.getMembers().contains(user); + } + + public Group checkParent(UUID parentId) { + Group parent = null; + if (!controllerService.idIsEmpty(parentId)) { + parent = userService.getGroupById(parentId); + } + return parent; + } + + public void checkIfUserInGroupJoin(Group group, User user) { + if(!group.getMembers().contains(user)){ + throw new UserAlreadyExistsException("@details"); + } + } +} From 0c430501668caad961471367fc44c6af2a688063 Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 25 Mar 2020 15:43:41 +0100 Subject: [PATCH 15/21] Refactor WebController and ValidationService Co-Authored-By: Talha Caliskan --- .../gruppen2/controller/WebController.java | 126 ++++++------------ .../gruppen2/service/ControllerService.java | 16 +-- .../gruppen2/service/ValidationService.java | 93 ++++++++++--- 3 files changed, 120 insertions(+), 115 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/WebController.java b/src/main/java/mops/gruppen2/controller/WebController.java index e543621..2e78495 100644 --- a/src/main/java/mops/gruppen2/controller/WebController.java +++ b/src/main/java/mops/gruppen2/controller/WebController.java @@ -1,34 +1,21 @@ package mops.gruppen2.controller; -import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.Role; import mops.gruppen2.domain.User; -import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.exception.EventException; -import mops.gruppen2.domain.exception.GroupFullException; -import mops.gruppen2.domain.exception.GroupNotFoundException; -import mops.gruppen2.domain.exception.NoAccessException; -import mops.gruppen2.domain.exception.NoAdminAfterActionException; import mops.gruppen2.domain.exception.PageNotFoundException; -import mops.gruppen2.domain.exception.UserAlreadyExistsException; -import mops.gruppen2.domain.exception.WrongFileException; import mops.gruppen2.security.Account; import mops.gruppen2.service.*; import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.*; import org.springframework.web.context.annotation.SessionScope; import org.springframework.web.multipart.MultipartFile; import javax.annotation.security.RolesAllowed; import javax.servlet.http.HttpServletRequest; -import java.io.CharConversionException; import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -94,7 +81,10 @@ public class WebController { Account account = keyCloakService.createAccountFromPrincipal(token); UUID parentUUID = controllerService.getUUID(parent); - controllerService.createOrga(account, title, description, visibility, lecture, maxInfiniteUsers, userMaximum, parentUUID, file); + List userList = new ArrayList<>(); + Group group = userService.getGroupById(controllerService.createOrga(account, title, description, visibility, lecture, maxInfiniteUsers, userMaximum, parentUUID)); + userList = validationService.checkFile(file, userList, group.getId().toString(), group, account); + controllerService.addUserList(userList, group.getId()); return "redirect:/gruppen2/"; } @@ -134,17 +124,7 @@ public class WebController { Account account = keyCloakService.createAccountFromPrincipal(token); List userList = new ArrayList<>(); Group group = userService.getGroupById(UUID.fromString(groupId)); - if (!file.isEmpty()) { - try { - userList = CsvService.read(file.getInputStream()); - if (userList.size() + group.getMembers().size() > group.getUserMaximum()) { - controllerService.updateMaxUser(account, UUID.fromString(groupId), (long) userList.size() + group.getMembers().size()); - } - } catch (UnrecognizedPropertyException | CharConversionException ex) { - throw new WrongFileException(file.getOriginalFilename()); - } - } - + userList = validationService.checkFile(file, userList, groupId, group, account); UUID groupUUID = controllerService.getUUID(groupId); controllerService.addUserList(userList, groupUUID); return "redirect:/gruppen2/details/members/" + groupId; @@ -156,13 +136,11 @@ public class WebController { Account account = keyCloakService.createAccountFromPrincipal(token); User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); Group group = userService.getGroupById(UUID.fromString(groupId)); + validationService.checkIfAdmin(group, user); model.addAttribute("account", account); UUID parentId = group.getParent(); Group parent = new Group(); - if (!group.getMembers().contains(user)) { - if (group.getVisibility() == Visibility.PRIVATE) { - return "privateGroupNoMember"; - } + if (!validationService.checkIfUserInGroup(group, user)) { model.addAttribute("group", group); model.addAttribute("parentId", parentId); model.addAttribute("parent", parent); @@ -185,10 +163,10 @@ public class WebController { @RequestParam("groupId") String groupId) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); - if(validationService.checkTitleAndDescription(title, description)) { - controllerService.updateTitle(account, UUID.fromString(groupId), title); - controllerService.updateDescription(account, UUID.fromString(groupId), description); - } + User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); + Group group = userService.getGroupById(UUID.fromString(groupId)); + validationService.checkIfAdmin(group, user); + validationService.checkTitleAndDescription(title, description, account, groupId); return "redirect:/gruppen2/details/" + groupId; } @@ -198,12 +176,10 @@ public class WebController { Model model, @RequestParam(value = "suchbegriff", required = false) String search) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); - List groupse = new ArrayList<>(); - if (!validationService.checkSearch(search)) { - groupse = groupService.findGroupWith(search, account); - } + List groups = new ArrayList<>(); + groups = validationService.checkSearch(search, groups, account); model.addAttribute("account", account); - model.addAttribute("gruppen", groupse); + model.addAttribute("gruppen", groups); return "search"; } @@ -216,13 +192,11 @@ public class WebController { Account account = keyCloakService.createAccountFromPrincipal(token); User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); UUID parentId = group.getParent(); - String URL = request.getRequestURL().toString(); - String serverURL = URL.substring(0, URL.indexOf("gruppen2/")); validationService.checkGroup(group.getTitle()); Group parent = validationService.checkParent(parentId); - if (!validationService.checkIfUserInGroup(Group group, User user)) { + if (!validationService.checkIfUserInGroup(group, user)) { model.addAttribute("group", group); model.addAttribute("parentId", parentId); model.addAttribute("parent", parent); @@ -235,6 +209,9 @@ public class WebController { model.addAttribute("roles", group.getRoles()); model.addAttribute("user", user); model.addAttribute("admin", Role.ADMIN); + + String URL = request.getRequestURL().toString(); + String serverURL = URL.substring(0, URL.indexOf("gruppen2/")); model.addAttribute("link", serverURL + "gruppen2/acceptinvite/" + groupId); return "detailsMember"; @@ -249,9 +226,7 @@ public class WebController { User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); Group group = userService.getGroupById(UUID.fromString(groupId)); validationService.checkIfUserInGroupJoin(group, user); - if (group.getUserMaximum() < group.getMembers().size()+1) { - throw new GroupFullException("Du kannst der Gruppe daher leider nicht beitreten."); - } + validationService.checkIfGroupFull(group); controllerService.addUser(account, UUID.fromString(groupId)); return "redirect:/gruppen2/"; } @@ -266,14 +241,12 @@ public class WebController { UUID parentId = group.getParent(); Group parent = validationService.checkParent(parentId); - if (group.getUserMaximum() > group.getMembers().size()) { - model.addAttribute("group", group); - model.addAttribute("parentId", parentId); - model.addAttribute("parent", parent); + validationService.checkIfGroupFull(group); + model.addAttribute("group", group); + model.addAttribute("parentId", parentId); + model.addAttribute("parent", parent); - return "detailsNoMember"; - } - throw new GroupNotFoundException("@search"); + return "detailsNoMember"; } @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @@ -282,11 +255,9 @@ public class WebController { Model model, @PathVariable String groupId) throws EventException { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); Group group = userService.getGroupById(UUID.fromString(groupId)); - if (group != null) { - model.addAttribute("group", group); - return "redirect:/gruppen2/detailsSearch?id=" + group.getId(); - } - throw new GroupNotFoundException("@accept"); + validationService.checkGroup(group.getTitle()); + model.addAttribute("group", group); + return "redirect:/gruppen2/detailsSearch?id=" + group.getId(); } @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @@ -297,11 +268,7 @@ public class WebController { User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); controllerService.passIfLastAdmin(account, UUID.fromString(groupId)); controllerService.deleteUser(user.getId(), UUID.fromString(groupId)); - - if (userService.getGroupById(UUID.fromString(groupId)).getMembers().isEmpty()) { - controllerService.deleteGroupEvent(user.getId(), UUID.fromString(groupId)); - } - + validationService.checkIfGroupEmpty(groupId, user); return "redirect:/gruppen2/"; } @@ -312,9 +279,7 @@ public class WebController { Account account = keyCloakService.createAccountFromPrincipal(token); User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); Group group = userService.getGroupById(UUID.fromString(groupId)); - if (group.getRoles().get(user.getId()) != Role.ADMIN) { - throw new NoAccessException(""); - } + validationService.checkIfAdmin(group, user); controllerService.deleteGroupEvent(user.getId(), UUID.fromString(groupId)); return "redirect:/gruppen2/"; } @@ -327,19 +292,12 @@ public class WebController { Account account = keyCloakService.createAccountFromPrincipal(token); Group group = userService.getGroupById(UUID.fromString(groupId)); User user = new User(account.getName(), "", "", ""); - if (group.getMembers().contains(user)) { - if (group.getRoles().get(account.getName()) == Role.ADMIN) { - model.addAttribute("account", account); - model.addAttribute("members", group.getMembers()); - model.addAttribute("group", group); - model.addAttribute("admin", Role.ADMIN); - return "editMembers"; - } else { - return "redirect:/details/"; - } - } else { - return "privateGroupNoMember"; - } + validationService.checkIfAdmin(group, user); + model.addAttribute("account", account); + model.addAttribute("members", group.getMembers()); + model.addAttribute("group", group); + model.addAttribute("admin", Role.ADMIN); + return "editMembers"; } @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) @@ -348,14 +306,9 @@ public class WebController { @RequestParam("group_id") String groupId, @RequestParam("user_id") String userId) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); - if (userId.equals(account.getName())) { - if (controllerService.passIfLastAdmin(account, UUID.fromString(groupId))) { - throw new NoAdminAfterActionException("Du otto bist letzter Admin"); - } - controllerService.updateRole(userId, UUID.fromString(groupId)); + if (validationService.checkIfDemotingSelf(userId, groupId, account)) { return "redirect:/gruppen2/details/" + groupId; } - controllerService.updateRole(userId, UUID.fromString(groupId)); return "redirect:/gruppen2/details/members/" + groupId; } @@ -373,10 +326,9 @@ public class WebController { @PostMapping("/details/members/deleteUser") public String deleteUser(@RequestParam("group_id") String groupId, @RequestParam("user_id") String userId) throws EventException { + User user = new User(userId, "", "", ""); controllerService.deleteUser(userId, UUID.fromString(groupId)); - if (userService.getGroupById(UUID.fromString(groupId)).getMembers().isEmpty()) { - controllerService.deleteGroupEvent(userId, UUID.fromString(groupId)); - } + validationService.checkIfGroupEmpty(groupId, user); return "redirect:/gruppen2/details/members/" + groupId; } diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index 694a696..c7dd424 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -76,22 +76,11 @@ public class ControllerService { updateRole(account.getName(), groupId); } - public void createOrga(Account account, String title, String description, Boolean visibility, Boolean lecture, Boolean maxInfiniteUsers, Long userMaximum, UUID parent, MultipartFile file) throws EventException, IOException { + public UUID createOrga(Account account, String title, String description, Boolean visibility, Boolean lecture, Boolean maxInfiniteUsers, Long userMaximum, UUID parent) throws EventException, IOException { List userList = new ArrayList<>(); if (userMaximum == null) { userMaximum = 100000L; } - if (!file.isEmpty()) { - try { - userList = CsvService.read(file.getInputStream()); - if (userList.size() > userMaximum) { - userMaximum = (long) userList.size() + userMaximum; - } - } catch (UnrecognizedPropertyException | CharConversionException ex) { - logger.warning("File konnte nicht gelesen werden"); - throw new WrongFileException(file.getOriginalFilename()); - } - } visibility = visibility == null; lecture = lecture != null; maxInfiniteUsers = maxInfiniteUsers != null; @@ -122,7 +111,8 @@ public class ControllerService { updateTitle(account, groupId, title); updateDescription(account, groupId, description); updateRole(account.getName(), groupId); - addUserList(userList, groupId); + + return groupId; } diff --git a/src/main/java/mops/gruppen2/service/ValidationService.java b/src/main/java/mops/gruppen2/service/ValidationService.java index 25eea81..9f743f8 100644 --- a/src/main/java/mops/gruppen2/service/ValidationService.java +++ b/src/main/java/mops/gruppen2/service/ValidationService.java @@ -1,45 +1,62 @@ package mops.gruppen2.service; +import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException; import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.Role; import mops.gruppen2.domain.User; import mops.gruppen2.domain.Visibility; -import mops.gruppen2.domain.exception.GroupNotFoundException; -import mops.gruppen2.domain.exception.NoValueException; -import mops.gruppen2.domain.exception.UserAlreadyExistsException; +import mops.gruppen2.domain.exception.*; +import mops.gruppen2.security.Account; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.ValidationException; +import java.io.CharConversionException; +import java.io.File; +import java.io.IOException; +import java.util.List; import java.util.UUID; +@Service public class ValidationService { private final ControllerService controllerService; private final UserService userService; + private final GroupService groupService; - public ValidationService(ControllerService controllerService, UserService userService) { + public ValidationService(ControllerService controllerService, UserService userService, GroupService groupService) { this.controllerService = controllerService; this.userService = userService; + this.groupService = groupService; } - public boolean checkTitleAndDescription(String title, String description) { - if(title != null && description != null) return true; - throw new NoValueException("Titel und Beschreibung müssen ausgefüllt werden"); + public void checkTitleAndDescription(String title, String description, Account account, String groupId) { + if (title == null || description == null) { + throw new NoValueException("Titel und Beschreibung müssen ausgefüllt werden"); + } + controllerService.updateTitle(account, UUID.fromString(groupId), title); + controllerService.updateDescription(account, UUID.fromString(groupId), description); } - public boolean checkSearch(String search) { - return search != null; + public List checkSearch(String search, List groups, Account account) { + if (search != null) { + groups = groupService.findGroupWith(search, account); + } + return groups; } - public void checkGroup(String title){ + public void checkGroup(String title) { if(title == null) throw new GroupNotFoundException("@details"); } public boolean checkIfUserInGroup(Group group, User user) { - if (group.getVisibility() == Visibility.PRIVATE) { - throw new GroupNotFoundException("Du hast keine Zugriffsberechtigung"); - } - return group.getMembers().contains(user); + if (!group.getMembers().contains(user) && group.getVisibility() == Visibility.PRIVATE) { + throw new NoAccessException(""); + } else return group.getMembers().contains(user); } public Group checkParent(UUID parentId) { - Group parent = null; + Group parent = new Group(); if (!controllerService.idIsEmpty(parentId)) { parent = userService.getGroupById(parentId); } @@ -51,4 +68,50 @@ public class ValidationService { throw new UserAlreadyExistsException("@details"); } } + + public void checkIfGroupFull(Group group) { + if (group.getUserMaximum() < group.getMembers().size() + 1) { + throw new GroupFullException("Du kannst der Gruppe daher leider nicht beitreten."); + } + } + + + public void checkIfGroupEmpty(String groupId, User user) { + if (userService.getGroupById(UUID.fromString(groupId)).getMembers().isEmpty()) { + controllerService.deleteGroupEvent(user.getId(), UUID.fromString(groupId)); + } + } + + public void checkIfAdmin(Group group, User user) { + checkIfUserInGroup(group, user); + if (group.getRoles().get(user.getId()) != Role.ADMIN) { + throw new NoAccessException(""); + } + } + + public boolean checkIfDemotingSelf(String userId, String groupId, Account account) { + if (userId.equals(account.getName())) { + if (controllerService.passIfLastAdmin(account, UUID.fromString(groupId))) { + throw new NoAdminAfterActionException("Du Otto bist letzter Admin"); + } + controllerService.updateRole(userId, UUID.fromString(groupId)); + return true; + } + controllerService.updateRole(userId, UUID.fromString(groupId)); + return false; + } + + public List checkFile(MultipartFile file, List userList, String groupId, Group group, Account account) { + if (!file.isEmpty()) { + try { + userList = CsvService.read(file.getInputStream()); + if (userList.size() + group.getMembers().size() > group.getUserMaximum()) { + controllerService.updateMaxUser(account, UUID.fromString(groupId), (long) userList.size() + group.getMembers().size()); + } + } catch (IOException ex) { + throw new WrongFileException(file.getOriginalFilename()); + } + } + return userList; + } } From ed4a9b57287576fef6a88ad5d8a085811a756826 Mon Sep 17 00:00:00 2001 From: Christoph Date: Wed, 25 Mar 2020 15:46:58 +0100 Subject: [PATCH 16/21] add badges in group lists Co-authored-by: [Mahgs] Co-authored-by: Christoph --- .../mops/gruppen2/service/GroupService.java | 19 +++++++++++++++++++ .../mops/gruppen2/service/UserService.java | 3 +++ src/main/resources/templates/index.html | 9 +++++++-- src/main/resources/templates/search.html | 5 ++++- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index aa22132..ce1c867 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -11,6 +11,7 @@ import mops.gruppen2.security.Account; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -84,6 +85,8 @@ public class GroupService { List visibleGroups = projectEventList(groupEvents); + sortByGroupType(visibleGroups); + return visibleGroups.parallelStream() .filter(group -> group.getType() != null) .filter(group -> !eventService.userInGroup(group.getId(), userId)) @@ -132,4 +135,20 @@ public class GroupService { group.getDescription().toLowerCase().contains(search.toLowerCase())) .collect(Collectors.toList()); } + + public void sortByGroupType(List groups) { + groups.sort(new Comparator() { + @Override + public int compare(Group g1, Group g2) { + if (g1.getType() == GroupType.LECTURE) { + return -1; + } + if (g2.getType() == GroupType.LECTURE) { + return 0; + } + + return 1; + } + }); + } } diff --git a/src/main/java/mops/gruppen2/service/UserService.java b/src/main/java/mops/gruppen2/service/UserService.java index d4db839..39fecff 100644 --- a/src/main/java/mops/gruppen2/service/UserService.java +++ b/src/main/java/mops/gruppen2/service/UserService.java @@ -35,6 +35,9 @@ public class UserService { newGroups.add(group); } } + + groupService.sortByGroupType(newGroups); + return newGroups; } diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index a464f26..06bd43b 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -10,7 +10,8 @@
-