RiderIncomeControllerTest.java 4.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package com.ruoyi.app.pay;
  2. import com.ruoyi.app.pay.dto.RiderIncomePage;
  3. import com.ruoyi.common.annotation.Anonymous;
  4. import com.ruoyi.common.utils.MessageUtils;
  5. import com.ruoyi.system.domain.vo.RiderIncomeItem;
  6. import com.ruoyi.system.domain.vo.RiderIncomeSummary;
  7. import com.ruoyi.system.utils.Auth;
  8. import com.ruoyi.system.utils.AuthContext;
  9. import org.junit.jupiter.api.AfterEach;
  10. import org.junit.jupiter.api.BeforeEach;
  11. import org.junit.jupiter.api.Test;
  12. import org.mockito.MockedStatic;
  13. import org.springframework.test.web.servlet.MockMvc;
  14. import org.springframework.test.web.servlet.setup.MockMvcBuilders;
  15. import java.math.BigDecimal;
  16. import java.util.List;
  17. import static org.junit.jupiter.api.Assertions.*;
  18. import static org.mockito.ArgumentMatchers.*;
  19. import static org.mockito.Mockito.*;
  20. import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
  21. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
  22. class RiderIncomeControllerTest {
  23. private final RiderIncomeService service = mock(RiderIncomeService.class);
  24. private MockMvc mvc;
  25. private MockedStatic<MessageUtils> messages;
  26. @BeforeEach void setUp() {
  27. messages = mockStatic(MessageUtils.class);
  28. messages.when(() -> MessageUtils.message(anyString())).thenReturn("ok");
  29. mvc = MockMvcBuilders.standaloneSetup(new RiderIncomeController(service)).build();
  30. }
  31. @AfterEach void tearDown() { messages.close(); }
  32. @Test
  33. void listDefaultsAndAuthenticatedIdentityAreExplicit() throws Exception {
  34. var summary = new RiderIncomeSummary(); summary.setTotalIncome(BigDecimal.ZERO);
  35. when(service.list(7L, null, null, "ALL", 1, 20)).thenReturn(
  36. new RiderIncomePage(null, null, summary, 0, 1, 20, List.of()));
  37. mvc.perform(get("/Billing/billing/riderIncome").header("token", "valid")
  38. .requestAttr(AuthContext.USER_ID_ATTRIBUTE, 7L).param("riderId", "999"))
  39. .andExpect(status().isOk()).andExpect(jsonPath("$.code").value(200))
  40. .andExpect(jsonPath("$.data.summary.totalIncome").value(0))
  41. .andExpect(jsonPath("$.data.periodOptions").doesNotExist())
  42. .andExpect(jsonPath("$.data.list").isEmpty());
  43. verify(service).list(7L, null, null, "ALL", 1, 20);
  44. }
  45. @Test
  46. void listBindsExplicitFiltersAndDetailUsesBillId() throws Exception {
  47. mvc.perform(get("/Billing/billing/riderIncome").header("token", "valid")
  48. .requestAttr(AuthContext.USER_ID_ATTRIBUTE, 7L)
  49. .param("startTime", "2026-11-01 00:00:00").param("endTime", "2026-11-30 23:59:59")
  50. .param("orderSource", "FLASH").param("pageNum", "2").param("pageSize", "10"))
  51. .andExpect(status().isOk());
  52. verify(service).list(7L, "2026-11-01 00:00:00", "2026-11-30 23:59:59", "FLASH", 2, 10);
  53. var item = new RiderIncomeItem(); item.setBillId(90L); item.setIncomeAmount(new BigDecimal("120.00"));
  54. item.setOrderNo("FD202611050001"); item.setOrderSource("FLASH");
  55. when(service.detail(7L, 90L)).thenReturn(item);
  56. mvc.perform(get("/Billing/billing/riderIncome/90").header("token", "valid")
  57. .requestAttr(AuthContext.USER_ID_ATTRIBUTE, 7L))
  58. .andExpect(status().isOk()).andExpect(jsonPath("$.data.billId").value(90))
  59. .andExpect(jsonPath("$.data.incomeAmount").value(120))
  60. .andExpect(jsonPath("$.data.orderNo").value("FD202611050001"))
  61. .andExpect(jsonPath("$.data.orderSource").value("FLASH"))
  62. .andExpect(jsonPath("$.data.orderId").doesNotExist())
  63. .andExpect(jsonPath("$.data.tipAmount").doesNotExist())
  64. .andExpect(jsonPath("$.data.walletBalance").doesNotExist());
  65. }
  66. @Test
  67. void tokenIsRequiredAndBothEndpointsUseAuthAspect() throws Exception {
  68. mvc.perform(get("/Billing/billing/riderIncome")).andExpect(status().isBadRequest());
  69. mvc.perform(get("/Billing/billing/riderIncome/1")).andExpect(status().isBadRequest());
  70. verifyNoInteractions(service);
  71. assertTrue(RiderIncomeController.class.isAnnotationPresent(Anonymous.class));
  72. assertTrue(RiderIncomeController.class.getMethod("list", String.class, String.class, String.class,
  73. String.class, Integer.class, Integer.class).isAnnotationPresent(Auth.class));
  74. assertTrue(RiderIncomeController.class.getMethod("detail", String.class, Long.class).isAnnotationPresent(Auth.class));
  75. }
  76. }