package jnpf.dmsMapper; import jnpf.dmsDatabase.DmsUuidTypeHandler; import org.apache.ibatis.mapping.BoundSql; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.session.Configuration; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; class DmsFilePermissionMapperSqlTest { private Configuration configuration; @BeforeEach void setUp() { configuration = new Configuration(); configuration.getTypeHandlerRegistry().register(UUID.class, DmsUuidTypeHandler.class); configuration.addMapper(DmsFilePermissionMapper.class); } @Test void rendersMixedActionsAndResourcesAsOneCandidateQuery() { Map parameters = new HashMap<>(); parameters.put("tenantId", "tenant-1"); parameters.put("actionCodes", Arrays.asList("READ", "UPDATE")); parameters.put("resourceIds", Arrays.asList(UUID.randomUUID(), UUID.randomUUID())); String sql = sql("selectCandidates", parameters); assertTrue(sql.startsWith("SELECT id, tenant_id")); assertTrue(sql.contains("action_code IN ( ? , ? )")); assertTrue(sql.contains("resource_id IN ( ? , ? )")); assertEquals(1, occurrences(sql, "FROM public.dms_file_permissions")); } private String sql(String method, Map parameters) { MappedStatement statement = configuration.getMappedStatement( DmsFilePermissionMapper.class.getName() + "." + method); BoundSql boundSql = statement.getBoundSql(parameters); return boundSql.getSql().replaceAll("\\s+", " ").trim(); } private int occurrences(String value, String token) { int result = 0; int offset = 0; while ((offset = value.indexOf(token, offset)) >= 0) { result++; offset += token.length(); } return result; } }