feat(lastleg): manage three delivery document categories

This commit is contained in:
2026-09-09 11:22:47 +08:00
parent f37e9ce555
commit 465d9dfc10
26 changed files with 967 additions and 4 deletions
@@ -0,0 +1,51 @@
package com.baiyue.lastleg.delivery.gateway;
import com.baiyue.lastleg.delivery.model.DeliveryDocumentCategory;
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.springframework.http.MediaType;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.test.web.client.MockRestServiceServer;
import org.springframework.web.client.RestClient;
import static org.assertj.core.api.Assertions.*;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.*;
import static org.springframework.test.web.client.response.MockRestResponseCreators.*;
class HttpDeliveryDocumentFileGatewayTest {
HttpDeliveryDocumentFileGateway gateway;
MockRestServiceServer server;
@BeforeEach void setUp() {
var builder=RestClient.builder().baseUrl("http://file.test");
server=MockRestServiceServer.bindTo(builder).build();
gateway=new HttpDeliveryDocumentFileGateway();
ReflectionTestUtils.setField(gateway,"client",builder.build());
ReflectionTestUtils.setField(gateway,"internalToken","test-service-token");
}
@Test void validatesExactOwnershipAndUsesFileCreationTime() {
expect(metadata("100","10","DELIVERY_BOL","11"));
var file=gateway.metadata("100",10,DeliveryDocumentCategory.BOL,11);
assertThat(file.fileId()).isEqualTo(11);
assertThat(file.uploadedAt().toString()).isEqualTo("2026-09-09T08:00");
server.verify();
}
@ParameterizedTest
@ValueSource(strings={"customer","delivery","category","file"})
void rejectsCrossCustomerCrossDeliveryWrongCategoryAndWrongFile(String mismatch) {
expect(metadata(mismatch.equals("customer")?"200":"100",mismatch.equals("delivery")?"20":"10",
mismatch.equals("category")?"DELIVERY_RECEIPT":"DELIVERY_BOL",mismatch.equals("file")?"12":"11"));
assertThatThrownBy(()->gateway.metadata("100",10,DeliveryDocumentCategory.BOL,11))
.hasMessageContaining("不属于");
server.verify();
}
private void expect(String json) {
server.expect(requestTo("http://file.test/internal/file/v1/business-files/100/DELIVERY_BOL/10/11"))
.andExpect(header("X-Internal-Service-Token","test-service-token"))
.andRespond(withSuccess(json,MediaType.APPLICATION_JSON));
}
private String metadata(String customer,String delivery,String type,String file) {
return "{\"code\":\"200\",\"data\":{\"fileId\":"+file+",\"tenantId\":"+customer+
",\"businessType\":\""+type+"\",\"businessId\":\""+delivery+"\",\"fileName\":\"test.pdf\","+
"\"contentType\":\"application/pdf\",\"sizeBytes\":10,\"createdAt\":\"2026-09-09T08:00:00\"}}";
}
}