package jnpf.dmsPermission;
|
|
import org.junit.jupiter.api.Test;
|
|
import java.util.UUID;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
class DmsFileCenterCursorCodecTest {
|
private final DmsPermissionProperties properties = properties();
|
private final DmsFileCenterCursorCodec codec = new DmsFileCenterCursorCodec(properties);
|
private final UUID parentId = UUID.fromString("018f0000-0000-7000-8000-000000000101");
|
private final UUID documentId = UUID.fromString("018f0000-0000-7000-8000-000000000102");
|
private final UUID id = UUID.fromString("018f0000-0000-7000-8000-000000000103");
|
|
@Test
|
void roundTripsBoundCursor() {
|
String fingerprint = codec.fingerprint("质量");
|
String value = codec.encode("HISTORICAL_FOLDER", "tenant-1", "user-1", parentId,
|
fingerprint, new DmsFileCenterCursorCodec.Cursor("文件A", documentId, 9L, id));
|
|
DmsFileCenterCursorCodec.Cursor decoded = codec.decode(value, "HISTORICAL_FOLDER",
|
"tenant-1", "user-1", parentId, fingerprint);
|
|
assertEquals("文件A", decoded.getName());
|
assertEquals(documentId, decoded.getDocumentId());
|
assertEquals(9L, decoded.getVersionNo());
|
assertEquals(id, decoded.getId());
|
}
|
|
@Test
|
void rejectsTamperingAndCrossUserReplay() {
|
String fingerprint = codec.fingerprint(null);
|
String value = codec.encode("FOLDER", "tenant-1", "user-1", parentId, fingerprint,
|
new DmsFileCenterCursorCodec.Cursor("A", null, null, id));
|
|
assertThrows(DmsPermissionException.class,
|
() -> codec.decode(value + "x", "FOLDER", "tenant-1", "user-1", parentId, fingerprint));
|
assertThrows(DmsPermissionException.class,
|
() -> codec.decode(value, "FOLDER", "tenant-1", "user-2", parentId, fingerprint));
|
}
|
|
private DmsPermissionProperties properties() {
|
DmsPermissionProperties value = new DmsPermissionProperties();
|
value.setCursorSigningSecret("0123456789abcdef0123456789abcdef");
|
return value;
|
}
|
}
|