优化
This commit is contained in:
+33
@@ -0,0 +1,33 @@
|
||||
package com.baiyue.firstleg.dashboard;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class DashboardMetricsContractTest {
|
||||
@Test void exposesThePlatformDashboardEndpointWithBothReadPermissions() throws Exception {
|
||||
assertThat(PlatformDashboardMetricsController.class.getAnnotation(RequestMapping.class).value())
|
||||
.containsExactly("/api/platform/v1/first-leg/dashboard");
|
||||
var method = PlatformDashboardMetricsController.class.getDeclaredMethod(
|
||||
"metrics", com.baiyue.common.security.AuthenticatedUser.class);
|
||||
assertThat(method.getAnnotation(GetMapping.class).value()).containsExactly("/operational-metrics");
|
||||
assertThat(method.getAnnotation(PreAuthorize.class).value())
|
||||
.contains("platform:firstleg:container:list", "platform:firstleg:customs:list");
|
||||
}
|
||||
|
||||
@Test void queryCountsPhysicalTransitContainersAndDistinctPendingOrders() {
|
||||
var sql = Arrays.stream(DashboardMetricsMapper.class.getDeclaredMethods())
|
||||
.filter(method -> method.getName().equals("read"))
|
||||
.findFirst().orElseThrow().getAnnotation(org.apache.ibatis.annotations.Select.class).value();
|
||||
var statement = String.join("\n", sql);
|
||||
assertThat(statement).contains("actual_sailing_at IS NOT NULL", "actual_warehouse_arrival_at IS NULL",
|
||||
"booking.record_status = 'ACTIVE'", "ocean.status <> 'CANCELLED'",
|
||||
"COUNT(DISTINCT inbound.order_id)", "customs_container.status <> 'COMPLETED'",
|
||||
"item.deleted = 0", "inbound.deleted = 0", "LIKE '20%'", "LIKE '40%'", "LIKE '45%'");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.baiyue.firstleg.dashboard;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class DashboardMetricsServiceTest {
|
||||
@Mock DashboardMetricsMapper mapper;
|
||||
@InjectMocks DashboardMetricsService service;
|
||||
|
||||
@Test void preservesOperationalCountsAndDecimalTeu() {
|
||||
var asOf = LocalDateTime.of(2026, 9, 11, 12, 0);
|
||||
when(mapper.read()).thenReturn(new DashboardMetricsMapper.MetricsProjection(
|
||||
3L, new BigDecimal("4.25"), 1L, 7L, asOf));
|
||||
|
||||
var result = service.read();
|
||||
|
||||
assertThat(result.inTransitContainerCount()).isEqualTo(3);
|
||||
assertThat(result.inTransitTeu()).isEqualByComparingTo("4.25");
|
||||
assertThat(result.unknownContainerTypeCount()).isEqualTo(1);
|
||||
assertThat(result.pendingCustomsOrderCount()).isEqualTo(7);
|
||||
assertThat(result.asOf()).isEqualTo(asOf);
|
||||
}
|
||||
|
||||
@Test void returnsZerosWhenTheDatabaseProjectionIsAbsent() {
|
||||
when(mapper.read()).thenReturn(null);
|
||||
|
||||
var result = service.read();
|
||||
|
||||
assertThat(result.inTransitContainerCount()).isZero();
|
||||
assertThat(result.inTransitTeu()).isEqualByComparingTo("0");
|
||||
assertThat(result.pendingCustomsOrderCount()).isZero();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user