fix: stabilize native chat selection chrome
This commit is contained in:
@@ -7,6 +7,7 @@ import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -82,4 +83,63 @@ public class ProjectChatUiStateTest {
|
||||
public void bundleForwardMessageUsesBundleModeLabel() {
|
||||
assertEquals("聊天记录", ProjectChatUiState.labelForForwardKind("forward_bundle"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void chromeStateUsesMultiSelectHeaderAndActionsWhenSelecting() {
|
||||
ProjectChatUiState.SelectionState state = ProjectChatUiState.toggleSelection(null, "m1");
|
||||
state = ProjectChatUiState.toggleSelection(state, "m2");
|
||||
|
||||
ProjectChatUiState.ChromeState chromeState =
|
||||
ProjectChatUiState.resolveChromeState(state, true, "北区试产线回归", "归档确认");
|
||||
|
||||
assertTrue(chromeState.multiSelecting);
|
||||
assertFalse(chromeState.showComposer);
|
||||
assertTrue(chromeState.showMultiSelectBar);
|
||||
assertFalse(chromeState.showRefresh);
|
||||
assertFalse(chromeState.showHeaderAction);
|
||||
assertTrue(chromeState.forwardEnabled);
|
||||
assertEquals("取消", chromeState.backLabel);
|
||||
assertEquals("已选 2 条", chromeState.title);
|
||||
assertEquals("选择要转发的消息", chromeState.subtitle);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void chromeStateUsesConversationHeaderWhenNotSelecting() {
|
||||
ProjectChatUiState.ChromeState chromeState =
|
||||
ProjectChatUiState.resolveChromeState(ProjectChatUiState.emptySelection(), true, "北区试产线回归", "归档确认");
|
||||
|
||||
assertFalse(chromeState.multiSelecting);
|
||||
assertTrue(chromeState.showComposer);
|
||||
assertFalse(chromeState.showMultiSelectBar);
|
||||
assertTrue(chromeState.showRefresh);
|
||||
assertTrue(chromeState.showHeaderAction);
|
||||
assertFalse(chromeState.forwardEnabled);
|
||||
assertEquals("返回", chromeState.backLabel);
|
||||
assertEquals("北区试产线回归", chromeState.title);
|
||||
assertEquals("归档确认", chromeState.subtitle);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void reconcileSelectionDropsMessagesMissingFromRenderSet() {
|
||||
ProjectChatUiState.SelectionState state = ProjectChatUiState.toggleSelection(null, "m1");
|
||||
state = ProjectChatUiState.toggleSelection(state, "m2");
|
||||
|
||||
ProjectChatUiState.SelectionState reconciled =
|
||||
ProjectChatUiState.reconcileSelection(state, List.of("m2", "m3"));
|
||||
|
||||
assertTrue(reconciled.multiSelecting);
|
||||
assertEquals(List.of("m2"), new ArrayList<>(reconciled.selectedMessageIds));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void summarizeForwardBundleTruncatesLongLastMessage() {
|
||||
String summary = ProjectChatUiState.summarizeForwardBundle(
|
||||
"这是一条很长很长很长的转发消息摘要,用来验证截断逻辑是否生效并避免卡片过高",
|
||||
3
|
||||
);
|
||||
|
||||
assertTrue(summary.startsWith("3 条消息 · 最后一条:"));
|
||||
assertTrue(summary.endsWith("…"));
|
||||
assertTrue(summary.contains("这是一条很长很长很长的转发消息摘要"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user