blob: 7f560f719991046f282afc435921e61e8257d982 [file] [log] [blame]
package com.g9.g9backend.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.g9.g9backend.pojo.Reward;
import com.g9.g9backend.service.RewardService;
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.util.Collections;
import java.util.Date;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
public class RewardControllerTest {
private MockMvc mockMvc;
@InjectMocks
private RewardController rewardController;
@Mock
private RewardService rewardService;
private final ObjectMapper objectMapper = new ObjectMapper();
@BeforeEach
public void setUp() {
MockitoAnnotations.openMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(rewardController).build();
}
@Test
public void testPostReward() throws Exception {
Reward reward = new Reward();
reward.setRewardName("测试悬赏");
mockMvc.perform(post("/reward")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(reward)))
.andExpect(status().isOk());
}
@Test
public void testDeleteReward() throws Exception {
mockMvc.perform(delete("/reward")
.param("rewardId", "1"))
.andExpect(status().isNoContent());
}
@Test
public void testGetReward_sortByPrice() throws Exception {
Reward reward = new Reward();
reward.setRewardId(1);
reward.setRewardName("测试");
reward.setPrice(100);
reward.setCreateAt(new Date());
Page<Reward> page = new Page<>(1, 10);
page.setRecords(Collections.singletonList(reward));
page.setTotal(1);
when(rewardService.page(any(), any())).thenReturn(page);
mockMvc.perform(get("/reward")
.param("pageNumber", "1")
.param("rows", "10")
.param("searchValue", "")
.param("option", "赏金最高"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.records[0].rewardId").value(1));
}
@Test
public void testGetRewardInfo() throws Exception {
Reward reward = new Reward();
reward.setRewardId(1);
reward.setRewardName("详情测试");
when(rewardService.getById(1)).thenReturn(reward);
mockMvc.perform(get("/reward/info")
.param("rewardId", "1"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.rewardId").value(1));
}
@Test
public void testPutReward() throws Exception {
Reward oldReward = new Reward();
oldReward.setRewardId(1);
when(rewardService.getById(1)).thenReturn(oldReward);
Reward updateRequest = new Reward();
updateRequest.setRewardId(1);
updateRequest.setRewardName("更新名称");
updateRequest.setRewardDescription("更新描述");
updateRequest.setPrice(500);
updateRequest.setRewardPicture("pic.png");
mockMvc.perform(put("/reward/info")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(updateRequest)))
.andExpect(status().isOk());
}
@Test
public void testPutRewardCompletion() throws Exception {
Reward existing = new Reward();
existing.setRewardId(1);
when(rewardService.getById(1)).thenReturn(existing);
Reward completed = new Reward();
completed.setRewardId(1);
completed.setCompletedBy(2);
completed.setCompletedAt(new Date());
completed.setResourceId(3);
mockMvc.perform(post("/reward/completion")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(completed)))
.andExpect(status().isOk());
}
}