Files
baiyue-firstleg/lastleg-service/src/test/java/com/baiyue/lastleg/appointmentplanning/AppointmentContainerMapperTest.java
T

40 lines
3.5 KiB
Java

package com.baiyue.lastleg.appointmentplanning;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.h2.jdbcx.JdbcDataSource;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.UUID;
import static org.junit.jupiter.api.Assertions.*;
class AppointmentContainerMapperTest {
@Test void groupsWholeContainersAcrossCustomersWithoutFbaOnlyFilterOrSearchTruncation() throws Exception {
var ds=new JdbcDataSource(); ds.setURL("jdbc:h2:mem:containers-"+UUID.randomUUID()+";MODE=MySQL;DB_CLOSE_DELAY=-1");
try(var c=ds.getConnection();var s=c.createStatement()) {
s.execute("CREATE TABLE ll_order(id BIGINT,source_container_booking_id VARCHAR(64),container_no VARCHAR(64),order_type VARCHAR(32),current_status VARCHAR(32),overseas_warehouse_id VARCHAR(64),customer_id VARCHAR(64),inbound_code VARCHAR(64),package_count INT,estimated_arrival_at TIMESTAMP,created_at TIMESTAMP)");
s.execute("CREATE TABLE ll_container_shipping_gate(container_booking_id VARCHAR(64),container_no VARCHAR(64),node_sequence INT,standard_node VARCHAR(64),aggregate_version BIGINT)");
s.execute("INSERT INTO ll_container_shipping_gate VALUES('C1','BOX-1',40,'DEPARTED',1),('C2','BOX-2',30,'READY',1),('C3','BOX-3',40,'DEPARTED',1)");
s.execute("INSERT INTO ll_order VALUES(1,'C1','BOX-1','FIRST_LEG','PENDING_ASSIGNMENT','100','A','IN-A',10,NULL,CURRENT_TIMESTAMP),(2,'C1','BOX-1','FIRST_LEG','INBOUND_PLANNED','100','B','IN-B',20,NULL,CURRENT_TIMESTAMP),(3,'C1','BOX-1','FIRST_LEG','PENDING_ASSIGNMENT','200','A','IN-C',NULL,NULL,CURRENT_TIMESTAMP),(4,'C1','BOX-1','FIRST_LEG','PENDING_ASSIGNMENT','999','C','OUT-US',4,NULL,CURRENT_TIMESTAMP),(5,'C2','BOX-2','FIRST_LEG','PENDING_ASSIGNMENT','100','A','UNSAILED',1,NULL,CURRENT_TIMESTAMP),(6,'C3','BOX-3','FIRST_LEG','PENDING_ASSIGNMENT','999','C','FOREIGN',1,NULL,CURRENT_TIMESTAMP)");
}
var config=new Configuration(new Environment("test",new JdbcTransactionFactory(),ds));
config.setMapUnderscoreToCamelCase(true);config.addMapper(AppointmentContainerMapper.class);
try(var session=new SqlSessionFactoryBuilder().build(config).openSession(true)) {
var mapper=session.getMapper(AppointmentContainerMapper.class);var origins=List.of("100","200");
assertEquals(1,mapper.count(origins,null,null));
var row=mapper.page(origins,"IN-A",null,20,0).get(0);
assertEquals("C1",row.getContainerBookingId());assertEquals("BOX-1",row.getContainerNo());
assertEquals(3,row.getOrderCount());assertEquals(2,row.getCustomerCount());assertNull(row.getPackages());
assertEquals(1,row.getUnknownPackageOrders());assertTrue(row.isIncompleteScope());
var groups=mapper.warehouses(origins,List.of("C1"));assertEquals(2,groups.size());
assertEquals(2,groups.get(0).orderCount());assertEquals(2,groups.get(0).customerCount());
assertTrue(mapper.page(origins,null,"C3",20,0).isEmpty());
try(var s=session.getConnection().createStatement()) {s.execute("UPDATE ll_order SET current_status='CANCELLED' WHERE id=4");s.execute("UPDATE ll_order SET package_count=5 WHERE id=3");}
session.clearCache();var updated=mapper.page(origins,null,"C1",20,0).get(0);
assertFalse(updated.isIncompleteScope());assertEquals(35,updated.getPackages());
}
}
}