package cn.iocoder.yudao.module.mes.service.pro.task.schedule;
|
|
import org.junit.jupiter.api.Test;
|
import java.math.BigDecimal;
|
import java.util.Map;
|
import static org.junit.jupiter.api.Assertions.*;
|
|
class MesScheduleMaterialCheckTest {
|
@Test void oneBatchCannotUseSameStockTwice() {
|
var stock = Map.of(1L, new BigDecimal("10"));
|
var first = MesScheduleMaterialCheck.allocate(stock, Map.of(1L, new BigDecimal("6")));
|
assertEquals(0, first.get(1L).compareTo(new BigDecimal("4")));
|
assertThrows(IllegalArgumentException.class, () -> MesScheduleMaterialCheck.allocate(first, Map.of(1L, new BigDecimal("5"))));
|
assertEquals(0, stock.get(1L).compareTo(new BigDecimal("10")));
|
}
|
@Test void shortageOrInvalidRequirementIsRejected() {
|
assertThrows(IllegalArgumentException.class, () -> MesScheduleMaterialCheck.allocate(Map.of(), Map.of(2L, BigDecimal.ONE)));
|
assertThrows(IllegalArgumentException.class, () -> MesScheduleMaterialCheck.allocate(Map.of(2L, BigDecimal.TEN), Map.of(2L, BigDecimal.ZERO)));
|
}
|
@Test void sufficientStockCanBeAllocated() {
|
assertEquals(0, MesScheduleMaterialCheck.allocate(Map.of(2L, BigDecimal.TEN), Map.of(2L, BigDecimal.TEN)).get(2L).signum());
|
}
|
}
|