From 561ccebb07a1d342f52f89daeb888d944cfeefb2 Mon Sep 17 00:00:00 2001 From: ScarletRedMan Date: Thu, 29 Feb 2024 16:29:13 +0700 Subject: [PATCH] Added room service tests and fixed bug --- .../repository/impl/RoomRepositoryImpl.java | 5 + .../picker/service/RoomServiceTest.java | 105 ++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 app/src/test/java/ru/dragonestia/picker/service/RoomServiceTest.java diff --git a/app/src/main/java/ru/dragonestia/picker/repository/impl/RoomRepositoryImpl.java b/app/src/main/java/ru/dragonestia/picker/repository/impl/RoomRepositoryImpl.java index c033da9..569ea46 100644 --- a/app/src/main/java/ru/dragonestia/picker/repository/impl/RoomRepositoryImpl.java +++ b/app/src/main/java/ru/dragonestia/picker/repository/impl/RoomRepositoryImpl.java @@ -2,6 +2,7 @@ package ru.dragonestia.picker.repository.impl; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; +import ru.dragonestia.picker.api.exception.NodeNotFoundException; import ru.dragonestia.picker.api.exception.RoomAlreadyExistException; import ru.dragonestia.picker.model.Room; import ru.dragonestia.picker.model.Node; @@ -77,6 +78,10 @@ public class RoomRepositoryImpl implements RoomRepository { @Override public List all(Node node) { synchronized (node2roomsMap) { + if (!node2roomsMap.containsKey(node)) { + throw new NodeNotFoundException("Node '%s' does not exists".formatted(node.id())); + } + return node2roomsMap.get(node).values().stream().map(RoomContainer::room).toList(); } } diff --git a/app/src/test/java/ru/dragonestia/picker/service/RoomServiceTest.java b/app/src/test/java/ru/dragonestia/picker/service/RoomServiceTest.java new file mode 100644 index 0000000..b444ed5 --- /dev/null +++ b/app/src/test/java/ru/dragonestia/picker/service/RoomServiceTest.java @@ -0,0 +1,105 @@ +package ru.dragonestia.picker.service; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import ru.dragonestia.picker.api.exception.NodeAlreadyExistException; +import ru.dragonestia.picker.api.exception.NodeNotFoundException; +import ru.dragonestia.picker.api.exception.NotPersistedNodeException; +import ru.dragonestia.picker.api.exception.RoomAlreadyExistException; +import ru.dragonestia.picker.api.repository.response.type.type.PickingMode; +import ru.dragonestia.picker.model.Node; +import ru.dragonestia.picker.model.Room; +import ru.dragonestia.picker.model.User; +import ru.dragonestia.picker.model.type.SlotLimit; + +import java.util.List; + +@SpringBootTest +public class RoomServiceTest { + + @Autowired + private NodeService nodeService; + + @Autowired + private RoomService roomService; + + private Node node; + + @BeforeEach + void init() { + node = new Node("test-rooms", PickingMode.SEQUENTIAL_FILLING, false); + + try { + nodeService.create(node); + } catch (NodeAlreadyExistException ignore) {} + } + + @Test + void test_createAndRemove() { + var room = Room.create("test-room", node, SlotLimit.unlimited(), "", false); + roomService.create(room); + + Assertions.assertTrue(roomService.find(node, room.getId()).isPresent()); + Assertions.assertThrows(RoomAlreadyExistException.class, () -> roomService.create(room)); + + roomService.remove(room); + + Assertions.assertFalse(roomService.find(node, room.getId()).isPresent()); + } + + @Test + void test_allRooms() { + var rooms = List.of( + Room.create("test-room1", node, SlotLimit.of(1), "", false), + Room.create("test-room2", node, SlotLimit.of(2), "", false), + Room.create("test-room3", node, SlotLimit.of(3), "", false), + Room.create("test-room4", node, SlotLimit.unlimited(), "", false) + ); + + rooms.forEach(room -> roomService.create(room)); + + var list = roomService.all(node); + + Assertions.assertEquals(rooms.size(), list.size()); + Assertions.assertTrue(rooms.containsAll(list)); + } + + @Test + void test_exceptNotPersistedNode() { + Assertions.assertThrows(NotPersistedNodeException.class, () -> roomService.create(Room.create("1", node, SlotLimit.unlimited(), "", true))); + } + + @Test + void test_pickRoom() { + var rooms = List.of( + Room.create("test-room1", node, SlotLimit.of(1), "", false), + Room.create("test-room2", node, SlotLimit.of(2), "", false), + Room.create("test-room3", node, SlotLimit.of(3), "", false), + Room.create("test-room4", node, SlotLimit.unlimited(), "", false) + ); + + rooms.forEach(room -> roomService.create(room)); + + var users = List.of( + new User("1"), + new User("2"), + new User("3"), + new User("4"), + new User("5"), + new User("6") + ); + + + Assertions.assertEquals("test-room4", roomService.pickAvailable(node, users).getId()); + } + + @Test + void test_removeNode() { + nodeService.remove(node); + + Assertions.assertThrows(NodeNotFoundException.class, () -> roomService.all(node)); + } +}