Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -173,18 +173,93 @@ describe("ProxyGroupAdvancedPanel interactions", () => {
expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ memberOrder: expect.any(Array) }));
expect(onChange).toHaveBeenCalledWith(
expect.objectContaining({
excludedMembers: expect.arrayContaining([expect.objectContaining({ kind: "direct" })]),
excludedMembers: expect.arrayContaining([expect.objectContaining({ name: "US Source" })]),
}),
);
expect(onChange).toHaveBeenCalledWith(
expect.objectContaining({
extraMembers: expect.arrayContaining([expect.objectContaining({ kind: "reject" })]),
}),
);
expect(mocks.stateSetters[0]).toHaveBeenCalledWith("direct:DIRECT");
expect(mocks.stateSetters[0]).toHaveBeenCalledWith("node:US Source");
expect(mocks.stateSetters[0]).toHaveBeenCalledWith(null);
});

it("clears enabled nodes from advanced member config", () => {
const onChange = vi.fn();
const tree = ProxyGroupAdvancedPanel({
target: { kind: "custom", id: "media", name: "Media" },
advanced: {
extraMembers: [
{ kind: "node", name: "Japan Source" },
{ kind: "node", name: "Extra Node" },
],
excludedMembers: [{ kind: "reject" }],
memberOrder: [
{ kind: "direct" },
{ kind: "node", name: "Extra Node" },
{ kind: "node", name: "Japan Source" },
],
},
onChange,
rulesCount: 0,
rulesContent: null,
});
const clearButton = flattenElements(tree).find(
(element) => element.type === "button" && element.props.title === "清空节点",
);

expect(clearButton?.props.disabled).toBe(false);
clearButton?.props.onClick();

expect(onChange).toHaveBeenCalledWith({
extraMembers: [{ kind: "node", name: "Extra Node" }],
excludedMembers: [
{ kind: "reject" },
{ kind: "node", name: "US Source" },
{ kind: "node", name: "Japan Source" },
],
memberOrder: [{ kind: "direct" }, { kind: "node", name: "Extra Node" }],
});
});

it("clears enabled rule groups from advanced member config", () => {
const onChange = vi.fn();
const tree = ProxyGroupAdvancedPanel({
target: { kind: "custom", id: "media", name: "Media" },
advanced: {
extraMembers: [
{ kind: "direct" },
{ kind: "node", name: "Extra Node" },
],
excludedMembers: [{ kind: "reject" }],
memberOrder: [
{ kind: "direct" },
{ kind: "node", name: "US Source" },
{ kind: "node", name: "Extra Node" },
],
},
onChange,
rulesCount: 0,
rulesContent: null,
});
const clearButton = flattenElements(tree).find(
(element) => element.type === "button" && element.props.title === "清空规则组",
);

expect(clearButton?.props.disabled).toBe(false);
clearButton?.props.onClick();

expect(onChange).toHaveBeenCalledWith({
extraMembers: [{ kind: "node", name: "Extra Node" }],
excludedMembers: [{ kind: "reject" }, { kind: "direct" }],
memberOrder: [
{ kind: "node", name: "US Source" },
{ kind: "node", name: "Extra Node" },
],
});
});

it("ignores member drops without a real move target", () => {
const onChange = vi.fn();
mocks.draggingKey = null;
Expand All @@ -203,7 +278,7 @@ describe("ProxyGroupAdvancedPanel interactions", () => {

vi.clearAllMocks();
mocks.stateSetters = [];
mocks.draggingKey = "direct:DIRECT";
mocks.draggingKey = "node:US Source";
tree = ProxyGroupAdvancedPanel({
target: { kind: "custom", id: "media", name: "Media" },
advanced: {},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,8 @@ describe("ProxyGroupAdvancedPanel", () => {
expect(html).not.toContain("剩余流量");
expect(html).toContain("US Source");
expect(html).toContain("DIRECT");
expect(html).toContain("已启用规则组");
expect(html).toContain("未启用规则组");
expect(html).toContain("rules-content");
expect(html).toContain("还没有分流规则");
expect(html).toContain("max-h-52 space-y-1.5 overflow-y-auto pr-1 custom-scrollbar");
Expand Down Expand Up @@ -159,7 +161,8 @@ describe("ProxyGroupAdvancedPanel", () => {
);

expect(html).toContain("暂无可匹配的导入源");
expect(html).toContain("暂无已启用的节点或代理组");
expect(html).toContain("暂无已启用的节点");
expect(html).toContain("暂无已启用的规则组");
expect(html).toContain("DIRECT");
expect(html).toContain("REJECT");
expect(html).toContain("existing-rules");
Expand Down Expand Up @@ -196,7 +199,7 @@ describe("ProxyGroupAdvancedPanel", () => {
expect(html).toContain("#1 订阅链接");
expect(html).toContain("#2 YAML 配置");
expect(html).toContain("#3 节点链接");
expect(html).toContain("暂无已启用的节点或代理组");
expect(html).toContain("暂无已启用的节点");
});

it("previews enabled members for a disabled built-in proxy group", () => {
Expand All @@ -220,7 +223,7 @@ describe("ProxyGroupAdvancedPanel", () => {
expect(html).toContain("US Source");
expect(html).toContain("Japan Source");
expect(html).toContain("max-h-52 overflow-y-auto pr-1 custom-scrollbar flex flex-wrap gap-1.5");
expect(html).not.toContain("暂无已启用的节点或代理组");
expect(html).not.toContain("暂无已启用的节点");
});

it("previews enabled members for a disabled custom proxy group", () => {
Expand All @@ -245,7 +248,7 @@ describe("ProxyGroupAdvancedPanel", () => {

expect(html).toContain("US Source");
expect(html).toContain("Japan Source");
expect(html).not.toContain("暂无已启用的节点或代理组");
expect(html).not.toContain("暂无已启用的节点");
});

it("normalizes advanced member helpers without rendering the panel", () => {
Expand Down
Loading