|
|
@@ -1,5 +1,6 @@
|
|
|
package com.etotem.num.service;
|
|
|
|
|
|
+import com.etotem.num.common.BizException;
|
|
|
import com.etotem.num.common.BizException;
|
|
|
import com.etotem.num.entity.ChatMessage;
|
|
|
import com.etotem.num.entity.ChartRecord;
|
|
|
@@ -34,7 +35,7 @@ class ChatServiceTest {
|
|
|
private DifyService difyService;
|
|
|
|
|
|
@MockBean
|
|
|
- private UserService userService;
|
|
|
+ private QuotaService quotaService;
|
|
|
|
|
|
// ==================== sendMessage ====================
|
|
|
|
|
|
@@ -43,6 +44,7 @@ class ChatServiceTest {
|
|
|
ChartRecord record = new ChartRecord();
|
|
|
record.setId(10L);
|
|
|
record.setUserId(1L);
|
|
|
+ record.setName("测试用户");
|
|
|
record.setChartData("{\"numbers\": [1,2,3]}");
|
|
|
|
|
|
when(chartService.getById(10L)).thenReturn(record);
|
|
|
@@ -63,15 +65,20 @@ class ChatServiceTest {
|
|
|
"ai".equals(msg.getRole()) && "AI回复内容".equals(msg.getContent())
|
|
|
&& 10L == msg.getChartRecordId()));
|
|
|
|
|
|
- // Quota checked and consumed
|
|
|
- verify(userService).checkDailyQuota(1L, "chat");
|
|
|
- verify(userService).consumeQuota(1L, "chat");
|
|
|
+ // Quota checked and consumed via QuotaService
|
|
|
+ verify(quotaService).checkAndConsume(1L, "测试用户");
|
|
|
}
|
|
|
|
|
|
@Test
|
|
|
void testSendMessage_quotaExceeded() {
|
|
|
- doThrow(new BizException(1003, "超过每日AI解读次数"))
|
|
|
- .when(userService).checkDailyQuota(1L, "chat");
|
|
|
+ ChartRecord record = new ChartRecord();
|
|
|
+ record.setId(10L);
|
|
|
+ record.setUserId(1L);
|
|
|
+ record.setName("测试用户");
|
|
|
+
|
|
|
+ when(chartService.getById(10L)).thenReturn(record);
|
|
|
+ doThrow(new BizException(403, "已达咨询人数上限,最多可咨询3人"))
|
|
|
+ .when(quotaService).checkAndConsume(1L, "测试用户");
|
|
|
|
|
|
assertThrows(BizException.class, () -> chatService.sendMessage(1L, 10L, "test", null));
|
|
|
verify(chatMessageRepository, never()).save(any());
|
|
|
@@ -98,6 +105,7 @@ class ChatServiceTest {
|
|
|
ChartRecord record = new ChartRecord();
|
|
|
record.setId(10L);
|
|
|
record.setUserId(1L);
|
|
|
+ record.setName("测试用户");
|
|
|
record.setChartData("{}");
|
|
|
|
|
|
when(chartService.getById(10L)).thenReturn(record);
|
|
|
@@ -116,10 +124,11 @@ class ChatServiceTest {
|
|
|
}
|
|
|
|
|
|
@Test
|
|
|
- void testSendMessage_quotaConsumedAfterDifyCall() {
|
|
|
+ void testSendMessage_quotaCheckedBeforeDifyCall() {
|
|
|
ChartRecord record = new ChartRecord();
|
|
|
record.setId(10L);
|
|
|
record.setUserId(1L);
|
|
|
+ record.setName("测试用户");
|
|
|
record.setChartData("{}");
|
|
|
|
|
|
when(chartService.getById(10L)).thenReturn(record);
|
|
|
@@ -129,10 +138,10 @@ class ChatServiceTest {
|
|
|
|
|
|
chatService.sendMessage(1L, 10L, "hi", null);
|
|
|
|
|
|
- // Verify consumeQuota is called AFTER invokeChatflow
|
|
|
- InOrder inOrder = inOrder(userService, difyService);
|
|
|
+ // Verify checkAndConsume is called BEFORE invokeChatflow
|
|
|
+ InOrder inOrder = inOrder(quotaService, difyService);
|
|
|
+ inOrder.verify(quotaService).checkAndConsume(eq(1L), anyString());
|
|
|
inOrder.verify(difyService).invokeChatflow(anyString(), anyString(), anyString());
|
|
|
- inOrder.verify(userService).consumeQuota(1L, "chat");
|
|
|
}
|
|
|
|
|
|
// ==================== getHistory ====================
|