diff --git a/app/src/test/java/ru/dragonestia/picker/picker/RoundRobinTests.java b/app/src/test/java/ru/dragonestia/picker/picker/RoundRobinTests.java new file mode 100644 index 0000000..cc44a2d --- /dev/null +++ b/app/src/test/java/ru/dragonestia/picker/picker/RoundRobinTests.java @@ -0,0 +1,59 @@ +package ru.dragonestia.picker.picker; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import ru.dragonestia.picker.config.FillingNodesConfig; +import ru.dragonestia.picker.model.Node; +import ru.dragonestia.picker.repository.RoomRepository; +import ru.dragonestia.picker.repository.UserRepository; +import ru.dragonestia.picker.util.UserFiller; + +@SpringBootTest +@Import({FillingNodesConfig.class, UserFiller.class}) +public class RoundRobinTests { + + @Autowired + private RoomRepository roomRepository; + + @Autowired + private UserRepository userRepository; + + @Autowired + private UserFiller userFiller; + + @Qualifier("roundNode") + @Autowired + private Node node; + + @Test + void testPickingRoundRobin() { + { // first iteration. Take 2 users. need take 'room-2-0' + var roomOpt = roomRepository.pickFree(node, userFiller.createRandomUsers(2)); + Assertions.assertTrue(roomOpt.isPresent()); + + var room = roomOpt.get(); + var slots = room.getSlots(); + var users = userRepository.usersOf(room); + Assertions.assertTrue(slots.isUnlimited() || slots.getSlots() >= users.size()); // check slots limitation + System.out.printf("%s/%s%n", users.size(), slots.getSlots()); + + Assertions.assertEquals("room-2-0", room.getId()); + } + + { // second iteration. Take 2 users. need take 'room-2-1' + var roomOpt = roomRepository.pickFree(node, userFiller.createRandomUsers(2)); + Assertions.assertTrue(roomOpt.isPresent()); + + var room = roomOpt.get(); + var slots = room.getSlots(); + var users = userRepository.usersOf(room); + Assertions.assertTrue(slots.isUnlimited() || slots.getSlots() >= users.size()); // check slots limitation + + Assertions.assertEquals("room-2-1", room.getId()); + } + } +} diff --git a/app/src/test/java/ru/dragonestia/picker/util/UserFiller.java b/app/src/test/java/ru/dragonestia/picker/util/UserFiller.java new file mode 100644 index 0000000..4f18c90 --- /dev/null +++ b/app/src/test/java/ru/dragonestia/picker/util/UserFiller.java @@ -0,0 +1,20 @@ +package ru.dragonestia.picker.util; + +import org.springframework.boot.test.context.TestComponent; +import ru.dragonestia.picker.model.User; + +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; + +@TestComponent +public class UserFiller { + + public List createRandomUsers(int amount) { + var list = new LinkedList(); + for (int i = 0; i < amount; i++) { + list.add(new User(UUID.randomUUID().toString())); + } + return list; + } +}