|
@@ -20,6 +20,7 @@ import java.util.ArrayList;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
|
|
|
+import static org.junit.jupiter.api.Assertions.assertNull;
|
|
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
|
import static org.mockito.ArgumentMatchers.any;
|
|
import static org.mockito.ArgumentMatchers.any;
|
|
@@ -164,20 +165,50 @@ class PosStoreControllerSelfDeliveryTest {
|
|
|
|
|
|
|
|
@Test
|
|
@Test
|
|
|
void myNightMarketSelfDeliveryRejectsUserWithoutNightMarketStore() {
|
|
void myNightMarketSelfDeliveryRejectsUserWithoutNightMarketStore() {
|
|
|
- // 普通商家反查不到夜市主门店行,读写一律拒绝
|
|
|
|
|
|
|
+ // 非夜市主(user_type!=3,含账号不存在)在类型门槛即拒绝,不触发反查/补建
|
|
|
login(101L, "1");
|
|
login(101L, "1");
|
|
|
- when(selfDelivery.resolveNightMarketStoreByOwner(101L)).thenReturn(null);
|
|
|
|
|
assertThrows(ServiceException.class, () -> controller.getMyNightMarketSelfDelivery("t"));
|
|
assertThrows(ServiceException.class, () -> controller.getMyNightMarketSelfDelivery("t"));
|
|
|
assertThrows(ServiceException.class,
|
|
assertThrows(ServiceException.class,
|
|
|
() -> controller.saveMyNightMarketSelfDelivery("t", config(1)));
|
|
() -> controller.saveMyNightMarketSelfDelivery("t", config(1)));
|
|
|
|
|
+ verify(selfDelivery, never()).resolveOrCreateNightMarketStoreByOwner(any());
|
|
|
verify(selfDelivery, never()).saveConfig(any());
|
|
verify(selfDelivery, never()).saveConfig(any());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void myNightMarketSelfDeliveryReturnsDefaultsWhenAnchorMissing() {
|
|
|
|
|
+ // 2026-10-08:夜市主未建锚点行也能打开配置页,返回默认未启用(首次保存时补建锚点行)
|
|
|
|
|
+ login(77L, "3");
|
|
|
|
|
+ when(selfDelivery.resolveNightMarketStoreByOwner(77L)).thenReturn(null);
|
|
|
|
|
+
|
|
|
|
|
+ var result = controller.getMyNightMarketSelfDelivery("t");
|
|
|
|
|
+ Map<String, Object> data = (Map<String, Object>) result.get("data");
|
|
|
|
|
+ assertEquals(Boolean.FALSE, data.get("enabled"));
|
|
|
|
|
+ assertNull(data.get("mode"));
|
|
|
|
|
+ assertTrue(((java.util.List<?>) data.get("hours")).isEmpty());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void saveMyNightMarketSelfDeliveryCreatesAnchorForNightMarketOwner() {
|
|
|
|
|
+ // 夜市主无锚点行时保存自动补建;后续新增摊位经 night_market_id 解析到该行
|
|
|
|
|
+ login(77L, "3");
|
|
|
|
|
+ when(selfDelivery.resolveOrCreateNightMarketStoreByOwner(any())).thenReturn(store(1, 0, 1, 77L));
|
|
|
|
|
+
|
|
|
|
|
+ controller.saveMyNightMarketSelfDelivery("t", config(999));
|
|
|
|
|
+
|
|
|
|
|
+ org.mockito.ArgumentCaptor<InfoUser> ownerCaptor = org.mockito.ArgumentCaptor.forClass(InfoUser.class);
|
|
|
|
|
+ verify(selfDelivery).resolveOrCreateNightMarketStoreByOwner(ownerCaptor.capture());
|
|
|
|
|
+ assertEquals(Long.valueOf(77L), ownerCaptor.getValue().getUserId());
|
|
|
|
|
+ org.mockito.ArgumentCaptor<SelfDeliveryConfigInput> captor =
|
|
|
|
|
+ org.mockito.ArgumentCaptor.forClass(SelfDeliveryConfigInput.class);
|
|
|
|
|
+ verify(selfDelivery).saveConfig(captor.capture());
|
|
|
|
|
+ assertEquals(Integer.valueOf(1), captor.getValue().getMdId());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Test
|
|
@Test
|
|
|
void saveMyNightMarketSelfDeliveryOverridesClientMdId() {
|
|
void saveMyNightMarketSelfDeliveryOverridesClientMdId() {
|
|
|
// 配置主体由后端反查决定,前端传入的 mdId 被覆盖,防止越权写其他门店
|
|
// 配置主体由后端反查决定,前端传入的 mdId 被覆盖,防止越权写其他门店
|
|
|
login(77L, "3");
|
|
login(77L, "3");
|
|
|
- when(selfDelivery.resolveNightMarketStoreByOwner(77L)).thenReturn(store(1, 0, 1, 77L));
|
|
|
|
|
|
|
+ when(selfDelivery.resolveOrCreateNightMarketStoreByOwner(any())).thenReturn(store(1, 0, 1, 77L));
|
|
|
|
|
|
|
|
controller.saveMyNightMarketSelfDelivery("t", config(999));
|
|
controller.saveMyNightMarketSelfDelivery("t", config(999));
|
|
|
|
|
|