test(aihr): verify project scoped sop query

This commit is contained in:
2026-07-15 02:21:20 +08:00
parent 799d91a32d
commit e7611f701d
@@ -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<String> sqlCaptor = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<Object[]> 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 {