blob: c3d77b9704af417a47ced33c3323642f4825fffb [file] [log] [blame]
223011381c359102025-06-03 15:19:59 +08001package com.example.myproject.controller;
2
3import com.example.myproject.controller.LevelController;
4import com.example.myproject.service.LevelService;
5import org.junit.jupiter.api.BeforeEach;
6import org.junit.jupiter.api.Test;
7import org.mockito.InjectMocks;
8import org.mockito.Mock;
9import org.mockito.MockitoAnnotations;
10import org.springframework.http.ResponseEntity;
11
12import java.util.HashMap;
13import java.util.Map;
14
15import static org.mockito.Mockito.*;
16import static org.junit.jupiter.api.Assertions.*;
17
18class LevelControllerTest {
19
20 @InjectMocks
21 private LevelController levelController;
22
23 @Mock
24 private LevelService levelService;
25
26 @BeforeEach
27 void setup() {
28 MockitoAnnotations.openMocks(this);
29 }
30
31 // 测试获取用户经验接口
32 @Test
33 void testGetExperience() {
34 Long userId = 1L;
35 Map<String, Object> mockResponse = new HashMap<>();
36 mockResponse.put("current_experience", 1500);
37 mockResponse.put("level", "Intermediate");
38 mockResponse.put("next_level_experience", 2000);
39
40 // 模拟 levelService.getUserExperience 返回
41 when(levelService.getUserExperience(userId)).thenReturn(mockResponse);
42
43 // 调用控制器方法
44 Map<String, Object> response = levelController.getExperience(userId);
45
46 // 验证返回的结果
47 assertEquals(1500, response.get("current_experience"));
48 assertEquals("Intermediate", response.get("level"));
49 assertEquals(2000, response.get("next_level_experience"));
50 }
51
52 // 测试更新用户经验接口
53 @Test
54 void testUpdateExperience() {
55 Long userId = 1L;
56 Integer experience = 500;
57 String source = "Quest";
58 Map<String, Object> mockResponse = new HashMap<>();
59 mockResponse.put("status", "success");
60 mockResponse.put("message", "经验更新成功");
61 mockResponse.put("current_experience", 2000);
62
63 Map<String, Object> params = new HashMap<>();
64 params.put("user_id", userId);
65 params.put("experience", experience);
66 params.put("source", source);
67
68 // 模拟 levelService.updateExperience 返回
69 when(levelService.updateExperience(userId, experience, source)).thenReturn(mockResponse);
70
71 // 调用控制器方法
72 Map<String, Object> response = levelController.updateExperience(params);
73
74 // 验证返回的结果
75 assertEquals("success", response.get("status"));
76 assertEquals("经验更新成功", response.get("message"));
77 assertEquals(2000, response.get("current_experience"));
78 }
79
80 // 测试检查用户升级条件接口
81 @Test
82 void testCheckUpgrade() {
83 Long userId = 1L;
84 Map<String, Object> mockResponse = new HashMap<>();
85 mockResponse.put("can_upgrade", true);
86 mockResponse.put("next_level_experience", 2000);
87 mockResponse.put("current_experience", 1500);
88
89 // 模拟 levelService.checkUpgrade 返回
90 when(levelService.checkUpgrade(userId)).thenReturn(mockResponse);
91
92 // 调用控制器方法
93 Map<String, Object> response = levelController.checkUpgrade(userId);
94
95 // 验证返回的结果
96 assertTrue((Boolean) response.get("can_upgrade"));
97 assertEquals(2000, response.get("next_level_experience"));
98 assertEquals(1500, response.get("current_experience"));
99 }
100
101 // 测试升级用户等级接口
102 @Test
103 void testUpgradeUserLevel() {
104 Long userId = 1L;
105 Boolean canUpgrade = true;
106 Map<String, Object> mockResponse = new HashMap<>();
107 mockResponse.put("status", "success");
108 mockResponse.put("message", "升级成功");
109 mockResponse.put("new_level", "Advanced");
110
111 Map<String, Object> request = new HashMap<>();
112 request.put("user_id", userId);
113 request.put("can_upgrade", canUpgrade);
114
115 // 模拟 levelService.upgradeUserLevel 返回
116 when(levelService.upgradeUserLevel(userId, canUpgrade)).thenReturn(mockResponse);
117
118 // 调用控制器方法
119 Map<String, Object> response = levelController.upgradeUserLevel(request);
120
121 // 验证返回的结果
122 assertEquals("success", response.get("status"));
123 assertEquals("升级成功", response.get("message"));
124 assertEquals("Advanced", response.get("new_level"));
125 }
126}