blob: 7f560f719991046f282afc435921e61e8257d982 [file] [log] [blame]
Seamher01406122025-06-08 19:44:36 +08001package com.g9.g9backend.controller;
2
3import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
4import com.fasterxml.jackson.databind.ObjectMapper;
5import com.g9.g9backend.pojo.Reward;
6import com.g9.g9backend.service.RewardService;
7import org.junit.jupiter.api.BeforeEach;
8import org.junit.jupiter.api.Test;
9import org.mockito.InjectMocks;
10import org.mockito.Mock;
11import org.mockito.MockitoAnnotations;
12import org.springframework.http.MediaType;
13import org.springframework.test.web.servlet.MockMvc;
14import org.springframework.test.web.servlet.setup.MockMvcBuilders;
15
16import java.util.Collections;
17import java.util.Date;
18
19import static org.mockito.ArgumentMatchers.any;
20import static org.mockito.Mockito.when;
21import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
22import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
23
24public class RewardControllerTest {
25
26 private MockMvc mockMvc;
27
28 @InjectMocks
29 private RewardController rewardController;
30
31 @Mock
32 private RewardService rewardService;
33
34 private final ObjectMapper objectMapper = new ObjectMapper();
35
36 @BeforeEach
37 public void setUp() {
38 MockitoAnnotations.openMocks(this);
39 mockMvc = MockMvcBuilders.standaloneSetup(rewardController).build();
40 }
41
42 @Test
43 public void testPostReward() throws Exception {
44 Reward reward = new Reward();
45 reward.setRewardName("测试悬赏");
46
47 mockMvc.perform(post("/reward")
48 .contentType(MediaType.APPLICATION_JSON)
49 .content(objectMapper.writeValueAsString(reward)))
50 .andExpect(status().isOk());
51 }
52
53 @Test
54 public void testDeleteReward() throws Exception {
55 mockMvc.perform(delete("/reward")
56 .param("rewardId", "1"))
57 .andExpect(status().isNoContent());
58 }
59
60 @Test
61 public void testGetReward_sortByPrice() throws Exception {
62 Reward reward = new Reward();
63 reward.setRewardId(1);
64 reward.setRewardName("测试");
65 reward.setPrice(100);
66 reward.setCreateAt(new Date());
67
68 Page<Reward> page = new Page<>(1, 10);
69 page.setRecords(Collections.singletonList(reward));
70 page.setTotal(1);
71
72 when(rewardService.page(any(), any())).thenReturn(page);
73
74 mockMvc.perform(get("/reward")
75 .param("pageNumber", "1")
76 .param("rows", "10")
77 .param("searchValue", "")
78 .param("option", "赏金最高"))
79 .andExpect(status().isOk())
80 .andExpect(jsonPath("$.records[0].rewardId").value(1));
81 }
82
83 @Test
84 public void testGetRewardInfo() throws Exception {
85 Reward reward = new Reward();
86 reward.setRewardId(1);
87 reward.setRewardName("详情测试");
88
89 when(rewardService.getById(1)).thenReturn(reward);
90
91 mockMvc.perform(get("/reward/info")
92 .param("rewardId", "1"))
93 .andExpect(status().isOk())
94 .andExpect(jsonPath("$.rewardId").value(1));
95 }
96
97 @Test
98 public void testPutReward() throws Exception {
99 Reward oldReward = new Reward();
100 oldReward.setRewardId(1);
101
102 when(rewardService.getById(1)).thenReturn(oldReward);
103
104 Reward updateRequest = new Reward();
105 updateRequest.setRewardId(1);
106 updateRequest.setRewardName("更新名称");
107 updateRequest.setRewardDescription("更新描述");
108 updateRequest.setPrice(500);
109 updateRequest.setRewardPicture("pic.png");
110
111 mockMvc.perform(put("/reward/info")
112 .contentType(MediaType.APPLICATION_JSON)
113 .content(objectMapper.writeValueAsString(updateRequest)))
114 .andExpect(status().isOk());
115 }
116
117 @Test
118 public void testPutRewardCompletion() throws Exception {
119 Reward existing = new Reward();
120 existing.setRewardId(1);
121
122 when(rewardService.getById(1)).thenReturn(existing);
123
124 Reward completed = new Reward();
125 completed.setRewardId(1);
126 completed.setCompletedBy(2);
127 completed.setCompletedAt(new Date());
128 completed.setResourceId(3);
129
130 mockMvc.perform(post("/reward/completion")
131 .contentType(MediaType.APPLICATION_JSON)
132 .content(objectMapper.writeValueAsString(completed)))
133 .andExpect(status().isOk());
134 }
135}