blob: 81bbe7e02dbb9b803e7d39fd74a31a8e2bcc8ff9 [file] [log] [blame]
package com.pt5.pthouduan.ControllerTest;
import com.pt5.pthouduan.controller.TrafficController;
import com.pt5.pthouduan.entity.UserTrafficStat;
import com.pt5.pthouduan.mapper.UserTrafficMapper;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import java.time.LocalDate;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
class TrafficControllerTest {
private MockMvc mockMvc;
@Mock
private UserTrafficMapper userTrafficMapper; // 模拟 Mapper
@InjectMocks
private TrafficController trafficController; // 注入 Controller
@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this); // 初始化 Mock
mockMvc = MockMvcBuilders.standaloneSetup(trafficController).build(); // 构建 MockMvc
}
@Test
void getUserTrafficStats_shouldReturnStats_whenPasskeyAndDatesAreValid() throws Exception {
// 准备测试数据
String passkey = "test-passkey";
LocalDate startDate = LocalDate.of(2023, 1, 1);
LocalDate endDate = LocalDate.of(2023, 1, 31);
UserTrafficStat mockStats = new UserTrafficStat();
mockStats.setTotalUploaded(1024L);
mockStats.setTotalDownloaded(2048L);
// 模拟 Mapper 行为
when(userTrafficMapper.getUserTrafficStats(anyString(), any(LocalDate.class), any(LocalDate.class)))
.thenReturn(mockStats);
// 发起 GET 请求并验证响应
mockMvc.perform(get("/api/traffic/user-stats")
.param("passkey", passkey)
.param("startDate", startDate.toString())
.param("endDate", endDate.toString())
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk()); // 预期 HTTP 200
}
@Test
void getUserTrafficStats_shouldReturn400_whenPasskeyIsMissing() throws Exception {
// 不传 passkey,预期返回 400 Bad Request
mockMvc.perform(get("/api/traffic/user-stats")
.param("startDate", "2023-01-01")
.param("endDate", "2023-01-31")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isBadRequest());
}
@Test
void getUserTrafficStats_shouldReturn400_whenDatesAreInvalid() throws Exception {
// 传入无效日期格式,预期返回 400 Bad Request
mockMvc.perform(get("/api/traffic/user-stats")
.param("passkey", "test-passkey")
.param("startDate", "2023-01-01-invalid")
.param("endDate", "2023-01-31")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isBadRequest());
}
}