|
|
@@ -342,8 +342,6 @@ class LeshouyingOrderControllerTest {
|
|
|
*/
|
|
|
@Test
|
|
|
void page_不传租户_不加租户谓词_由拦截器兜底() {
|
|
|
- // 2026-10-05 起 /page 还要求可识别的主体(创建人闸);无主体的用例在下方归属组
|
|
|
- login(3L, false);
|
|
|
when(orderMapper.selectPage(any(), any())).thenReturn(new Page<>(1, 20));
|
|
|
|
|
|
controller.page(1, 20, null, null, null, null);
|
|
|
@@ -392,76 +390,6 @@ class LeshouyingOrderControllerTest {
|
|
|
verify(orderMapper, never()).selectPage(any(), any());
|
|
|
}
|
|
|
|
|
|
- // ───────────────── 订单归属:非超管只看本人创建的(2026-10-05) ─────────────────
|
|
|
- //
|
|
|
- // 用户报「这些订单有很多都不是用户 q 的」—— pay_lsy_order 此前**没有任何创建人列**
|
|
|
- // (user_id 是上游付款人,不是建单人)。裁定(用户拍板):列表只显示本人(登录账号)建的。
|
|
|
- // created_id 由收银台那条腿写入(见 LeshouyingCashierControllerTest),
|
|
|
- // 开放 API / 免登录收银台两条腿与全部历史行恒 NULL ⇒ 只对超管可见。
|
|
|
-
|
|
|
- @Test
|
|
|
- void page_非超管_只查本人创建的订单() {
|
|
|
- login(3L, false); // 普通账号(login 统一设 userId=1);租户谓词由拦截器追加,不在这里
|
|
|
- when(orderMapper.selectPage(any(), any())).thenReturn(new Page<>(1, 20));
|
|
|
-
|
|
|
- controller.page(1, 20, null, null, null, null);
|
|
|
-
|
|
|
- AbstractWrapper<?, ?, ?> w = capturedPageQuery();
|
|
|
- assertTrue(w.getSqlSegment().contains("created_id"),
|
|
|
- "非超管的列表必须带创建人谓词;实测: " + w.getSqlSegment());
|
|
|
- assertEquals(List.of(1L), boundValues(w),
|
|
|
- "绑的必须是**当前登录账号**(login() 设的 userId=1),多一个少一个都不对");
|
|
|
- }
|
|
|
-
|
|
|
- /** 负对照:同一个量具读同一类 wrapper —— 超管这一个开关关掉创建人谓词。 */
|
|
|
- @Test
|
|
|
- void page_超管_不加创建人谓词() {
|
|
|
- login(null, true);
|
|
|
- when(orderMapper.selectPage(any(), any())).thenReturn(new Page<>(1, 20));
|
|
|
-
|
|
|
- controller.page(1, 20, null, null, null, null);
|
|
|
-
|
|
|
- AbstractWrapper<?, ?, ?> w = capturedPageQuery();
|
|
|
- assertFalse(w.getSqlSegment().contains("created_id"),
|
|
|
- "超管豁免(锁到「本人建」会让跨租户运维连自己没建过的单都看不到);"
|
|
|
- + "实测: " + w.getSqlSegment());
|
|
|
- assertTrue(boundValues(w).isEmpty(),
|
|
|
- "超管 + 不传租户 ⇒ 一个谓词都不加;实测绑定值: " + boundValues(w));
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- void page_无登录主体_403_而不是一份空列表() {
|
|
|
- SecurityContextHolder.clearContext();
|
|
|
-
|
|
|
- BusinessException e = assertThrows(BusinessException.class,
|
|
|
- () -> controller.page(1, 20, null, null, null, null));
|
|
|
-
|
|
|
- assertEquals(403, e.getCode(),
|
|
|
- "取不到主体 ⇒「本人」无从谈起,必须显式拒绝(本处没有拦截器兜底:data_scope 未接入);"
|
|
|
- + "给一份空列表则是「看起来正常的空」");
|
|
|
- verify(orderMapper, never()).selectPage(any(), any());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- void page_主体没有账号标识_403() {
|
|
|
- // 有主体、没 userId(如免登录收银台的合成登录态)—— 同样无法确定「本人」是谁
|
|
|
- LoginUser u = new LoginUser();
|
|
|
- u.setUserId(null);
|
|
|
- u.setUsername("synthetic");
|
|
|
- u.setStatus("0");
|
|
|
- u.setTenantId(3L);
|
|
|
- u.setIsSuperuser(false);
|
|
|
- u.setAuthorities(List.of());
|
|
|
- SecurityContextHolder.getContext().setAuthentication(
|
|
|
- new UsernamePasswordAuthenticationToken(u, null, List.of()));
|
|
|
-
|
|
|
- BusinessException e = assertThrows(BusinessException.class,
|
|
|
- () -> controller.page(1, 20, null, null, null, null));
|
|
|
-
|
|
|
- assertEquals(403, e.getCode());
|
|
|
- verify(orderMapper, never()).selectPage(any(), any());
|
|
|
- }
|
|
|
-
|
|
|
// ─────────────── 退款在途标记:列表/详情出口处补的那个派生量 ───────────────
|
|
|
//
|
|
|
// 用户 2026-09-30 报的:「我点击退款后,lsy 回调送达前,页面上还有退款按钮,难道还能重复点吗?」
|
|
|
@@ -499,7 +427,6 @@ class LeshouyingOrderControllerTest {
|
|
|
@Test
|
|
|
void page_只有退款在途的那一行才标记为退款中() {
|
|
|
Page<LsyOrderEntity> p = pageOfTwoOrders();
|
|
|
- login(3L, false); // /page 要求可识别的主体(创建人闸)
|
|
|
|
|
|
controller.page(1, 20, null, null, null, null);
|
|
|
|
|
|
@@ -512,7 +439,6 @@ class LeshouyingOrderControllerTest {
|
|
|
@Test
|
|
|
void 退款在途的判据_与后端闸门同一集合() {
|
|
|
pageOfTwoOrders();
|
|
|
- login(3L, false); // /page 要求可识别的主体(创建人闸)
|
|
|
|
|
|
controller.page(1, 20, null, null, null, null);
|
|
|
|
|
|
@@ -548,7 +474,6 @@ class LeshouyingOrderControllerTest {
|
|
|
|
|
|
@Test
|
|
|
void page_空页_一次退款表都不查() {
|
|
|
- login(3L, false); // /page 要求可识别的主体(创建人闸)
|
|
|
when(orderMapper.selectPage(any(), any())).thenReturn(new Page<>(1, 20));
|
|
|
|
|
|
controller.page(1, 20, null, null, null, null);
|