feat: add native forward target picker
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
package com.hyzq.boss;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ForwardTargetActivityTest {
|
||||
@Test
|
||||
public void filtersOutSourceConversationFromTargets() {
|
||||
JSONArray conversations = new StubJSONArray(
|
||||
new StubJSONObject().withString("projectId", "source").withString("projectTitle", "源会话"),
|
||||
new StubJSONObject().withString("projectId", "target").withString("projectTitle", "目标会话")
|
||||
);
|
||||
|
||||
List<JSONObject> result = ForwardTargetActivity.collectSelectableTargets(conversations, "source");
|
||||
|
||||
assertEquals(1, result.size());
|
||||
assertEquals("target", result.get(0).optString("projectId"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void singleModeRequiresOneMessageId() throws Exception {
|
||||
JSONObject payload = ForwardTargetActivity.buildForwardPayload("single", "m1", java.util.List.of());
|
||||
|
||||
assertEquals("single", payload.optString("mode"));
|
||||
assertEquals("m1", payload.optString("sourceMessageId"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void bundleModeUsesOrderedMessageIds() throws Exception {
|
||||
JSONObject payload = ForwardTargetActivity.buildForwardPayload("bundle", null, java.util.List.of("m1", "m2"));
|
||||
|
||||
assertEquals("bundle", payload.optString("mode"));
|
||||
assertEquals(2, payload.optJSONArray("sourceMessageIds").length());
|
||||
}
|
||||
|
||||
private static final class StubJSONObject extends JSONObject {
|
||||
private final java.util.Map<String, Object> values = new java.util.HashMap<>();
|
||||
|
||||
StubJSONObject withString(String key, String value) {
|
||||
values.put(key, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String optString(String key) {
|
||||
Object value = values.get(key);
|
||||
return value instanceof String ? (String) value : "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String optString(String key, String fallback) {
|
||||
Object value = values.get(key);
|
||||
return value instanceof String ? (String) value : fallback;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class StubJSONArray extends JSONArray {
|
||||
private final JSONObject[] values;
|
||||
|
||||
StubJSONArray(JSONObject... values) {
|
||||
this.values = values == null ? new JSONObject[0] : values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int length() {
|
||||
return values.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject optJSONObject(int index) {
|
||||
if (index < 0 || index >= values.length) {
|
||||
return null;
|
||||
}
|
||||
return values[index];
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user