1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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());
    }
}