package com.ruoyi.account.controller; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.ruoyi.account.api.model.TAppUserTag; import com.ruoyi.account.service.TAppUserTagService; import com.ruoyi.common.core.domain.R; import org.junit.jupiter.api.Test; import org.springframework.test.util.ReflectionTestUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyCollection; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; class TAppUserTagControllerTest { @Test void listByUserIdsReturnsEmptyWithoutTouchingServiceForNullOrEmptyInput() { TAppUserTagService service = mock(TAppUserTagService.class); TAppUserTagController controller = new TAppUserTagController(); ReflectionTestUtils.setField(controller, "appUserTagService", service); R> nullResult = controller.listByUserIds(null); R> emptyResult = controller.listByUserIds(Collections.emptyList()); assertTrue(nullResult.getData().isEmpty()); assertTrue(emptyResult.getData().isEmpty()); verifyNoInteractions(service); } @Test void listByUserIdsChunksLargeInputByFiveHundredAndMergesResults() { TAppUserTagService service = mock(TAppUserTagService.class); TAppUserTagController controller = new TAppUserTagController(); ReflectionTestUtils.setField(controller, "appUserTagService", service); LambdaQueryChainWrapper chain = mock(LambdaQueryChainWrapper.class); when(service.lambdaQuery()).thenReturn(chain); when(chain.in(any(), anyCollection())).thenReturn(chain); List userIds = new ArrayList<>(); for (int i = 0; i < 1001; i++) { userIds.add((long) i); } TAppUserTag first = new TAppUserTag(); first.setAppUserId(0L); TAppUserTag second = new TAppUserTag(); second.setAppUserId(500L); TAppUserTag third = new TAppUserTag(); third.setAppUserId(1000L); when(chain.list()).thenReturn( Collections.singletonList(first), Collections.singletonList(second), Collections.singletonList(third)); List result = controller.listByUserIds(userIds).getData(); assertEquals(3, result.size()); verify(service, times(3)).lambdaQuery(); } }