fix: tighten chat selection state invariants
This commit is contained in:
@@ -1,8 +1,12 @@
|
||||
package com.hyzq.boss;
|
||||
|
||||
import static org.junit.Assert.assertArrayEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -32,8 +36,7 @@ public class ProjectChatUiStateTest {
|
||||
|
||||
@Test
|
||||
public void deselectingLastMessageExitsMultiSelectMode() {
|
||||
ProjectChatUiState.SelectionState state =
|
||||
new ProjectChatUiState.SelectionState(true, java.util.Set.of("m1"));
|
||||
ProjectChatUiState.SelectionState state = ProjectChatUiState.toggleSelection(null, "m1");
|
||||
ProjectChatUiState.SelectionState next = ProjectChatUiState.toggleSelection(state, "m1");
|
||||
assertFalse(next.multiSelecting);
|
||||
assertTrue(next.selectedMessageIds.isEmpty());
|
||||
@@ -41,8 +44,32 @@ public class ProjectChatUiStateTest {
|
||||
|
||||
@Test
|
||||
public void bundleForwardRequiresAtLeastTwoMessages() {
|
||||
ProjectChatUiState.SelectionState state =
|
||||
new ProjectChatUiState.SelectionState(true, java.util.Set.of("m1"));
|
||||
ProjectChatUiState.SelectionState state = ProjectChatUiState.toggleSelection(null, "m1");
|
||||
assertFalse(ProjectChatUiState.canForwardSelection(state));
|
||||
|
||||
ProjectChatUiState.SelectionState next = ProjectChatUiState.toggleSelection(state, "m2");
|
||||
assertTrue(ProjectChatUiState.canForwardSelection(next));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void selectionPreservesInsertionOrder() {
|
||||
ProjectChatUiState.SelectionState state = ProjectChatUiState.toggleSelection(null, "m2");
|
||||
state = ProjectChatUiState.toggleSelection(state, "m1");
|
||||
state = ProjectChatUiState.toggleSelection(state, "m3");
|
||||
|
||||
assertArrayEquals(
|
||||
new String[] {"m2", "m1", "m3"},
|
||||
new ArrayList<>(state.selectedMessageIds).toArray(new String[0])
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void toggleSelectionRejectsBlankMessageIds() {
|
||||
try {
|
||||
ProjectChatUiState.toggleSelection(null, " ");
|
||||
fail("Expected IllegalArgumentException");
|
||||
} catch (IllegalArgumentException expected) {
|
||||
assertEquals("messageId must not be blank", expected.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user