package jnpf.dmsMapper;
|
|
import jnpf.dmsEntity.permission.entity.DmsAccessExclusionEntity;
|
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.Date;
|
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.assertFalse;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
class DmsAccessExclusionMapperSqlTest {
|
private Configuration configuration;
|
|
@BeforeEach
|
void setUp() {
|
configuration = new Configuration();
|
configuration.getTypeHandlerRegistry().register(UUID.class, DmsUuidTypeHandler.class);
|
configuration.addMapper(DmsAccessExclusionMapper.class);
|
}
|
|
@Test
|
void rendersWholeCreateBatchAsOneInsertStatement() {
|
Map<String, Object> parameters = new HashMap<>();
|
parameters.put("items", Arrays.asList(entity(UUID.randomUUID()), entity(UUID.randomUUID())));
|
|
String sql = sql("insertBatch", parameters);
|
|
assertTrue(sql.startsWith("INSERT INTO public.dms_access_exclusions"));
|
assertEquals(2, occurrences(sql, "uuidv7()"));
|
assertFalse(sql.contains("SELECT *"));
|
}
|
|
@Test
|
void rendersWholeRevocationBatchAsOneUpdateStatement() {
|
Map<String, Object> parameters = new HashMap<>();
|
parameters.put("tenantId", "tenant-1");
|
parameters.put("ids", Arrays.asList(UUID.randomUUID(), UUID.randomUUID()));
|
parameters.put("actorType", "USER");
|
parameters.put("actorId", "admin-1");
|
parameters.put("reason", "revoke");
|
|
String sql = sql("revokeBatch", parameters);
|
|
assertTrue(sql.startsWith("UPDATE public.dms_access_exclusions"));
|
assertTrue(sql.contains("id IN ( ? , ? )"));
|
assertEquals(1, occurrences(sql, "UPDATE public.dms_access_exclusions"));
|
}
|
|
private String sql(String method, Map<String, Object> parameters) {
|
MappedStatement statement = configuration.getMappedStatement(
|
DmsAccessExclusionMapper.class.getName() + "." + method);
|
BoundSql boundSql = statement.getBoundSql(parameters);
|
return boundSql.getSql().replaceAll("\\s+", " ").trim();
|
}
|
|
private DmsAccessExclusionEntity entity(UUID resourceId) {
|
DmsAccessExclusionEntity result = new DmsAccessExclusionEntity();
|
result.setTenantId("tenant-1");
|
result.setResourceType("DOCUMENT");
|
result.setResourceId(resourceId);
|
result.setUserId("user-1");
|
result.setActionCode("READ");
|
result.setSourceType("MANUAL");
|
result.setSourceId("source-1");
|
result.setValidFrom(new Date());
|
result.setExcludedByType("USER");
|
result.setExcludedById("admin-1");
|
return result;
|
}
|
|
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;
|
}
|
}
|