This commit is contained in:
2026-08-26 14:08:41 +08:00
parent 4398e8b347
commit 7f05183904
12 changed files with 11 additions and 139 deletions
@@ -45,14 +45,6 @@ class InternalBusinessFileControllerTest {
verify(service).download(0L, "LOADING_CUSTOMS_DECLARATION", "51", 91L);
}
@Test void exactOwnershipCompensationDeleteRemainsBehindInternalToken() {
var response = controller.delete("internal-token", 7L, 0L,
"CONTAINER_DELIVERY_ORDER", "41", 91L);
assertThat(response.successful()).isTrue();
verify(service).delete(0L, "CONTAINER_DELIVERY_ORDER", "41", 91L, 7L);
}
@Test void rejectsInvalidTokenAndNegativeTenantBeforeServiceAccess() {
var file = new MockMultipartFile("file", "x.txt", "text/plain", "x".getBytes());
assertThatThrownBy(() -> controller.upload("wrong", 7L, 0L,
@@ -138,28 +138,4 @@ class InternalBusinessFileServiceTest {
verify(storage).read(value.getObjectKey());
}
@Test void compensationDeleteRequiresExactOwnershipAndLogicallyVoidsBeforeStorageCleanup() {
FileObjectEntity value = new FileObjectEntity();
value.setId(91L); value.setTenantId(0L); value.setBusinessType("CONTAINER_DELIVERY_ORDER");
value.setBusinessId("41"); value.setStatus("ACTIVE"); value.setDeleted(false); value.setVersion(0);
value.setObjectKey("business-files/0/41/do.pdf");
when(files.selectOne(any())).thenReturn(value);
when(files.voidOwned(0L, "CONTAINER_DELIVERY_ORDER", "41", 91L, 0, 7L)).thenReturn(1);
when(storage.delete(value.getObjectKey())).thenReturn(true);
service.delete(0L, "CONTAINER_DELIVERY_ORDER", "41", 91L, 7L);
verify(files).voidOwned(0L, "CONTAINER_DELIVERY_ORDER", "41", 91L, 0, 7L);
verify(storage).delete(value.getObjectKey());
}
@Test void compensationMapperUsesExactCompositeOwnershipAndOptimisticVersion() throws Exception {
String sql = String.join(" ", FileObjectMapper.class.getMethod("voidOwned", long.class,
String.class, String.class, long.class, int.class, long.class)
.getAnnotation(org.apache.ibatis.annotations.Update.class).value());
assertThat(sql)
.contains("id=#{fileId}", "tenant_id=#{tenantId}", "business_type=#{businessType}")
.contains("business_id=#{businessId}", "status='ACTIVE'", "deleted=0", "version=#{version}")
.contains("status='VOID'", "deleted=1", "version=version+1");
}
}