Added room service tests and fixed bug

This commit is contained in:
Andrey Terentev 2024-02-29 16:29:13 +07:00 committed by Andrey Terentev
parent 18dab02371
commit 561ccebb07
2 changed files with 110 additions and 0 deletions

View File

@ -2,6 +2,7 @@ package ru.dragonestia.picker.repository.impl;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import ru.dragonestia.picker.api.exception.NodeNotFoundException;
import ru.dragonestia.picker.api.exception.RoomAlreadyExistException; import ru.dragonestia.picker.api.exception.RoomAlreadyExistException;
import ru.dragonestia.picker.model.Room; import ru.dragonestia.picker.model.Room;
import ru.dragonestia.picker.model.Node; import ru.dragonestia.picker.model.Node;
@ -77,6 +78,10 @@ public class RoomRepositoryImpl implements RoomRepository {
@Override @Override
public List<Room> all(Node node) { public List<Room> all(Node node) {
synchronized (node2roomsMap) { 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(); return node2roomsMap.get(node).values().stream().map(RoomContainer::room).toList();
} }
} }

View File

@ -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));
}
}