47 lines
2.2 KiB
Java
47 lines
2.2 KiB
Java
package com.baiyue.lastleg.service;
|
|
|
|
import com.baiyue.lastleg.dto.PendingContainerSummary;
|
|
import com.baiyue.lastleg.mapper.LastlegOrderMapper;
|
|
import org.apache.ibatis.annotations.Select;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
|
|
class PendingContainerSummaryContractTest {
|
|
@Test
|
|
void responseFieldsAndServerAggregateSqlStayFrozen() throws Exception {
|
|
assertEquals(List.of("sourceContainerBookingId", "containerNo", "orderCount", "inboundCodeCount",
|
|
"customerCount", "totalPackageCount", "totalPalletCount", "totalVolumeCbm", "eligible",
|
|
"ineligibleReason"),
|
|
Arrays.stream(PendingContainerSummary.class.getRecordComponents()).map(value -> value.getName()).toList());
|
|
|
|
Select rows = LastlegOrderMapper.class.getMethod("pagePendingContainers",
|
|
com.baiyue.lastleg.dto.LastlegOrderRequests.PendingContainerQuery.class, long.class, long.class)
|
|
.getAnnotation(Select.class);
|
|
String sql = String.join("", rows.value()).toLowerCase();
|
|
assertTrue(sql.contains("group by o.source_container_booking_id"));
|
|
assertTrue(sql.contains("pending_assignment"));
|
|
assertTrue(sql.contains("destination_assigned"));
|
|
assertTrue(sql.contains("limit #{limit} offset #{offset}"));
|
|
}
|
|
|
|
@Test
|
|
void openApiAndSchemaExposeStableContainerIdentity() throws Exception {
|
|
String openApi = Files.readString(Path.of("src/main/resources/openapi/overseas-business-v1.yaml"),
|
|
StandardCharsets.UTF_8);
|
|
String schema = Files.readString(Path.of("src/main/resources/db/lastleg.sql"), StandardCharsets.UTF_8);
|
|
|
|
assertTrue(openApi.contains("/api/platform/v1/last-leg/orders/container-summaries:"));
|
|
assertTrue(openApi.contains("PendingContainerSummary:"));
|
|
assertTrue(openApi.contains("sourceContainerBookingId:"));
|
|
assertTrue(schema.contains("idx_ll_order_pending_container(source_container_booking_id,current_status,created_at)"));
|
|
}
|
|
}
|