feat(lastleg): manage three delivery document categories
This commit is contained in:
+51
@@ -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\"}}";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user