40 lines
3.5 KiB
Java
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());
|
|
}
|
|
}
|
|
}
|