提交
This commit is contained in:
+41
@@ -0,0 +1,41 @@
|
||||
package com.baiyue.lastleg.service;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import java.time.Instant;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
class CompactBusinessNumberServiceTest {
|
||||
@Test void usesCustomerInitialsAndShanghaiSecondsWithoutSequenceSuffix() {
|
||||
JdbcTemplate jdbc = mock(JdbcTemplate.class);
|
||||
var customers = mock(ReturnOrderReferenceResolver.class);
|
||||
when(customers.customerName("42")).thenReturn("柏悦物流");
|
||||
when(jdbc.queryForObject("SELECT LAST_INSERT_ID()", Long.class))
|
||||
.thenAnswer(call -> Instant.now().getEpochSecond());
|
||||
String number = new CompactBusinessNumberService(jdbc, customers).next("TB", "42");
|
||||
assertTrue(number.matches("TB-BYWL-[0-9]{12}"), number);
|
||||
assertEquals("AB", CompactBusinessNumberService.initials("Alpha Beta"));
|
||||
}
|
||||
|
||||
@Test void usesDatabaseLogicalSecondAcrossInstancesAndClockRollback() {
|
||||
JdbcTemplate jdbc = mock(JdbcTemplate.class);
|
||||
var first = new CompactBusinessNumberService(jdbc, null);
|
||||
var second = new CompactBusinessNumberService(jdbc, null);
|
||||
Instant now = Instant.parse("2026-10-16T02:30:00Z");
|
||||
when(jdbc.queryForObject("SELECT LAST_INSERT_ID()", Long.class))
|
||||
.thenReturn(now.getEpochSecond(), now.getEpochSecond() + 1, now.getEpochSecond() + 2);
|
||||
assertEquals("ZY-ABC-261016103000", first.allocate("ZY", "ABC", now));
|
||||
assertEquals("ZY-ABC-261016103001", second.allocate("ZY", "ABC", now));
|
||||
assertEquals("ZY-ABC-261016103002", first.allocate("ZY", "ABC", now.minusSeconds(60)));
|
||||
}
|
||||
|
||||
@Test void physicalLabelKeepsEveryIdBitAndIsCompact() {
|
||||
long id = 2087379674555461633L;
|
||||
String mark = LastlegOrderNoGenerator.compactCartonMark(id);
|
||||
assertTrue(mark.length() <= 16);
|
||||
assertEquals(id, Long.parseLong(mark.substring(3), 36));
|
||||
assertNotEquals(mark, LastlegOrderNoGenerator.compactCartonMark(id + 1_000_000));
|
||||
assertEquals(mark, new LastlegOrderNoGenerator().next("RETURN_CARTON", "92", id));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user