优化
This commit is contained in:
+13
@@ -30,6 +30,19 @@ class OpenApiInboundMeasurementControllerContractTest {
|
||||
assertThat(method.getParameters()[4].getAnnotation(RequestHeader.class).required()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("墨家JSON入口只强制固定AppKey且保留原始JSON")
|
||||
void shouldExposeMojiaJsonCompatibilityEntry() throws Exception {
|
||||
Method method = OpenApiInboundMeasurementController.class.getDeclaredMethod("receiveMojia",
|
||||
String.class, String.class, String.class, String.class, String.class);
|
||||
assertThat(method.getParameters()[0].getAnnotation(RequestHeader.class).required()).isTrue();
|
||||
assertThat(method.getParameters()[1].getAnnotation(RequestHeader.class).required()).isFalse();
|
||||
assertThat(method.getParameters()[2].getAnnotation(RequestHeader.class).required()).isFalse();
|
||||
assertThat(method.getParameters()[3].getAnnotation(RequestHeader.class).required()).isFalse();
|
||||
assertThat(method.getAnnotation(org.springframework.web.bind.annotation.PostMapping.class).consumes())
|
||||
.containsExactly("application/json");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("静态OpenAPI声明回调、状态查询、签名和三层幂等")
|
||||
void shouldDocumentMeasurementOpenApiContract() throws Exception {
|
||||
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
package com.baiyue.firstleg.service;
|
||||
|
||||
import com.baiyue.firstleg.dto.CartonMeasurementCommand;
|
||||
import com.baiyue.firstleg.dto.CartonMeasurementResult;
|
||||
import com.baiyue.firstleg.security.AuthenticatedMeasurementApp;
|
||||
import com.baiyue.firstleg.security.MeasurementRequestAuthenticator;
|
||||
import com.baiyue.firstleg.security.MeasurementRequestHeaders;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import jakarta.validation.Validation;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
class MojiaMeasurementOpenApiServiceTest {
|
||||
@Test
|
||||
void fixedAppKeyJsonIsConvertedToTheExistingCartonMeasurementFlow() throws Exception {
|
||||
MeasurementRequestAuthenticator authenticator = mock(MeasurementRequestAuthenticator.class);
|
||||
CartonMeasurementService cartons = mock(CartonMeasurementService.class);
|
||||
var service = new MojiaMeasurementOpenApiService(authenticator, cartons,
|
||||
new ObjectMapper().findAndRegisterModules(), Validation.buildDefaultValidatorFactory().getValidator());
|
||||
MeasurementRequestHeaders headers = new MeasurementRequestHeaders("mojia", null, null, null, null);
|
||||
when(authenticator.authenticate("POST", MojiaMeasurementOpenApiService.CALLBACK_PATH,
|
||||
headers, json(), false)).thenReturn(new AuthenticatedMeasurementApp("mojia", 10001L, 90001L, Map.of()));
|
||||
when(cartons.upsert(eq(10001L), eq(90001L), any())).thenReturn(new CartonMeasurementResult(
|
||||
1L, 1, 2L, "RK-001#4-1", 1, new BigDecimal("60.1"), new BigDecimal("40.2"),
|
||||
new BigDecimal("30.3"), new BigDecimal("12.5"), 3L, "MJ-01", LocalDateTime.now(), true));
|
||||
|
||||
CartonMeasurementResult result = service.receive(headers, json());
|
||||
|
||||
assertThat(result.boxCode()).isEqualTo("RK-001#4-1");
|
||||
ArgumentCaptor<CartonMeasurementCommand> command = ArgumentCaptor.forClass(CartonMeasurementCommand.class);
|
||||
verify(cartons).upsert(eq(10001L), eq(90001L), command.capture());
|
||||
assertThat(command.getValue().boxCode()).isEqualTo("RK-001#4-1");
|
||||
assertThat(command.getValue().lengthCm()).isEqualByComparingTo("60.1");
|
||||
assertThat(command.getValue().image().getContentType()).isEqualTo("image/jpeg");
|
||||
assertThat(command.getValue().image().getBytes()).containsExactly(0xff, 0xd8, 0xff, 0xd9);
|
||||
}
|
||||
|
||||
private String json() {
|
||||
return """
|
||||
{"boxCode":"RK-001#4-1","length":60.1,"width":40.2,"height":30.3,
|
||||
"weight":12.5,"machineNo":"MJ-01","picture":"data:image/jpeg;base64,/9j/2Q=="}
|
||||
""";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user