diff --git a/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrSopSeedServiceTest.java b/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrSopSeedServiceTest.java index a5773ecd..f041dddc 100644 --- a/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrSopSeedServiceTest.java +++ b/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrSopSeedServiceTest.java @@ -4,10 +4,14 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.dromara.aihr.domain.AihrSopDto; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; import java.lang.reflect.Method; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.Set; @@ -15,8 +19,11 @@ import java.util.Set; 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.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static org.mockito.Mockito.verify; public class AihrSopSeedServiceTest { @@ -275,6 +282,26 @@ public class AihrSopSeedServiceTest { assertTrue(code.contains("OrgPersonRow::projectCode")); } + @Test + @Tag("dev") + @SuppressWarnings({"rawtypes", "unchecked"}) + public void formalPositionSopQueryBindsProjectScopeAsParameters() throws Exception { + JdbcTemplate jdbcTemplate = mock(JdbcTemplate.class); + when(jdbcTemplate.query(anyString(), any(RowMapper.class), any(Object[].class))).thenReturn(List.of()); + AihrSopSeedService service = new AihrSopSeedService(new ObjectMapper(), jdbcTemplate, null, "", null, null, null); + Method method = AihrSopSeedService.class.getDeclaredMethod("formalPositionSopTopics", String.class, String.class, Set.class); + method.setAccessible(true); + + method.invoke(service, "生活顾问", "住宅", Set.of("project-a", "project-b")); + + ArgumentCaptor sqlCaptor = ArgumentCaptor.forClass(String.class); + ArgumentCaptor argsCaptor = ArgumentCaptor.forClass(Object[].class); + verify(jdbcTemplate).query(sqlCaptor.capture(), any(RowMapper.class), argsCaptor.capture()); + assertTrue(sqlCaptor.getValue().contains("FIND_IN_SET(?, REPLACE(a.org_scope, ' ', '')) > 0")); + assertEquals(Set.of("project-a", "project-b"), Set.copyOf(Arrays.asList(argsCaptor.getValue()).subList(3, 5))); + assertFalse(sqlCaptor.getValue().contains("project-a")); + } + @Test @Tag("dev") public void answerFeedbackReviewUsesAuthenticatedOperatorForAuditTrail() throws Exception {