fix(warehouse-overseas): enforce pallet location invariant

This commit is contained in:
2026-09-08 14:47:35 +08:00
parent 07688005a1
commit a0ad3382af
9 changed files with 276 additions and 25 deletions
@@ -15,7 +15,7 @@ class WarehousePalletTransitionMapperContractTest {
@Test
void annotationSqlUsesNativeComparisonOperatorsInsteadOfXmlEntities() throws Exception {
Method locationQuery = WarehousePalletTransitionMapper.class.getMethod(
"countActiveLocation", long.class, long.class);
"lockPublicLocation", long.class, long.class);
String selectSql = String.join(" ", locationQuery.getAnnotation(Select.class).value());
Method transition = Arrays.stream(WarehousePalletTransitionMapper.class.getMethods())
@@ -24,9 +24,20 @@ class WarehousePalletTransitionMapperContractTest {
.orElseThrow();
String updateSql = String.join(" ", transition.getAnnotation(Update.class).value());
assertTrue(selectSql.contains("status<>'INACTIVE'"));
assertTrue(selectSql.contains("FOR UPDATE"));
assertTrue(updateSql.contains("status<>'SCRAPPED'"));
assertFalse(selectSql.contains("&lt;") || selectSql.contains("&gt;"));
assertFalse(updateSql.contains("&lt;") || updateSql.contains("&gt;"));
}
@Test
void normalResourceReleaseKeepsPalletBoundToTheNowIdleLocation() throws Exception {
Method release = WarehouseResourceLockMapper.class.getMethod("releasePallet",
long.class, long.class, long.class, long.class);
String sql = String.join(" ", release.getAnnotation(Update.class).value());
assertTrue(sql.contains("SET status = 'IDLE'"));
assertFalse(sql.contains("location_id = NULL"));
assertTrue(sql.contains("location_id = #{locationId}"));
}
}