优化
This commit is contained in:
@@ -69,7 +69,8 @@ class BusinessFeeSourceEventServiceTest {
|
||||
"OVERSEAS_PROCUREMENT", "801", "PO-US-001", null, null, null, null, null,
|
||||
null, "91", "PROCUREMENT_SERVICE", "采购服务费", "RECEIVABLE", null, null,
|
||||
null, null, null, null, null, List.of(), LocalDate.of(2026, 9, 2), "CNY",
|
||||
new BigDecimal("120.00"), "APPROVED", "PUBLISHED", "ACTIVE", null);
|
||||
new BigDecimal("120.00"), "CNY", new BigDecimal("120.00"), BigDecimal.ONE,
|
||||
"2026-09", null, null, null, null, null, "APPROVED", "PUBLISHED", "ACTIVE", null);
|
||||
String sourceHash = EventPayloadHash.sha256(
|
||||
EventPayloadCanonicalizer.canonicalize(json.valueToTree(unsigned)));
|
||||
BusinessFeeSourceChangedV1 payload = new BusinessFeeSourceChangedV1("PUBLISHED", "LASTLEG",
|
||||
@@ -77,7 +78,8 @@ class BusinessFeeSourceEventServiceTest {
|
||||
"OVERSEAS_PROCUREMENT", "801", "PO-US-001", null, null, null, null, null,
|
||||
null, "91", "PROCUREMENT_SERVICE", "采购服务费", "RECEIVABLE", null, null,
|
||||
null, null, null, null, null, List.of(), LocalDate.of(2026, 9, 2), "CNY",
|
||||
new BigDecimal("120.00"), "APPROVED", "PUBLISHED", "ACTIVE", sourceHash);
|
||||
new BigDecimal("120.00"), "CNY", new BigDecimal("120.00"), BigDecimal.ONE,
|
||||
"2026-09", null, null, null, null, null, "APPROVED", "PUBLISHED", "ACTIVE", sourceHash);
|
||||
JsonNode node = json.valueToTree(payload);
|
||||
String payloadHash = EventPayloadHash.sha256(EventPayloadCanonicalizer.canonicalize(node));
|
||||
return new EventEnvelope("123e4567-e89b-12d3-a456-426614174701",
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.baiyue.finance;
|
||||
|
||||
import com.baiyue.common.core.exception.BizException;
|
||||
import com.baiyue.finance.client.FinanceFileClient;
|
||||
import com.baiyue.common.core.api.ApiResponse;
|
||||
import com.baiyue.finance.controller.PlatformFinanceVoucherController;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
class PlatformFinanceVoucherControllerTest {
|
||||
private final FinanceFileClient files = mock(FinanceFileClient.class);
|
||||
private final PlatformFinanceVoucherController controller = new PlatformFinanceVoucherController(files, "test-token");
|
||||
|
||||
private FinanceFileClient.Metadata file(long customerId, String type, String businessId) {
|
||||
return new FinanceFileClient.Metadata(91L, customerId, type, businessId, "付款.png", "sha", "image/png", 3L);
|
||||
}
|
||||
|
||||
@Test void returnsFilenameAndDownloadsWithinCustomerScope() {
|
||||
when(files.metadata("test-token", 11, 11, 91)).thenReturn(ApiResponse.success(file(11, "FINANCE_VOUCHER", "11"), "test", "test"));
|
||||
when(files.download("test-token", 11, 11, 91)).thenReturn(ResponseEntity.ok(new byte[]{1, 2, 3}));
|
||||
assertThat(controller.metadata(91, 11).data().fileName()).isEqualTo("付款.png");
|
||||
var content = controller.content(91, 11);
|
||||
assertThat(content.getBody()).containsExactly(1, 2, 3);
|
||||
assertThat(content.getHeaders().getCacheControl()).isEqualTo("no-store");
|
||||
assertThat(content.getHeaders().getFirst("Content-Disposition")).startsWith("attachment;");
|
||||
}
|
||||
|
||||
@Test void rejectsWrongCustomerBusinessTypeAndBusinessIdBeforeDownload() {
|
||||
for (var invalid : new FinanceFileClient.Metadata[]{file(12, "FINANCE_VOUCHER", "11"), file(11, "OTHER", "11"), file(11, "FINANCE_VOUCHER", "12")}) {
|
||||
when(files.metadata("test-token", 11, 11, 91)).thenReturn(ApiResponse.success(invalid, "test", "test"));
|
||||
assertThatThrownBy(() -> controller.content(91, 11)).isInstanceOf(BizException.class);
|
||||
}
|
||||
verify(files, never()).download(anyString(), anyLong(), anyLong(), anyLong());
|
||||
}
|
||||
|
||||
@Test void rejectsMissingMetadataAndFailedContent() {
|
||||
assertThatThrownBy(() -> controller.content(91, 11)).isInstanceOf(BizException.class);
|
||||
when(files.metadata("test-token", 11, 11, 91)).thenReturn(ApiResponse.success(file(11, "FINANCE_VOUCHER", "11"), "test", "test"));
|
||||
when(files.download("test-token", 11, 11, 91)).thenReturn(ResponseEntity.notFound().build());
|
||||
assertThatThrownBy(() -> controller.content(91, 11)).isInstanceOf(BizException.class);
|
||||
}
|
||||
|
||||
@Test void requiresPlatformListPermission() {
|
||||
assertThat(PlatformFinanceVoucherController.class.getAnnotation(PreAuthorize.class).value())
|
||||
.isEqualTo("hasAuthority('platform:finance:customer-arap:list')");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user