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)")); } }