DNF90 服务端与启动器完整源码(含 GM 工具功能增强)
服务端(Go): - GM 塞背包/带属性装备发放:在线角色推送 op14 增量物品行,背包实时刷新,无需回角色选择界面 - GM 改金币/改等级:去掉在线拒绝,落库后推送 op14 钱包/op37 等级状态,在线实时刷新 - 等级端点统一切换到新版 GMSetCharacterLevel(自带在线刷新) - 无限/锁死疲劳模式 + 燃烧疲劳:每房间消耗 2 点、打怪与通关经验双倍 - 燃烧疲劳开关时给所有在线角色推送系统提示(op12 mode 0) - 深渊史诗掉率:GM 全局倍率 + 城镇增益药剂窗口倍率,真实接入掉落结算 启动器(Python/JS): - 标题栏自绘、窗口 1204x717、禁止拖拽改大小、仅最小化/关闭 - GM 工具:疲劳与燃烧、深渊史诗掉率、拍卖行上架(单一定价对齐) - 拍卖行上架前端对齐服务端单一价格语义,修复 400 报错
This commit is contained in:
commit
645b64fe21
4388 files changed
+1405457
No files matched your search
@@ -0,0 +1,63 @@
|
||||
import { beforeEach, expect, test, vi } from "vitest";
|
||||
import { createSSRApp } from "vue";
|
||||
import { renderToString } from "@vue/server-renderer";
|
||||
import UpdatePrompt from "../src/components/UpdatePrompt.vue";
|
||||
|
||||
const state = vi.hoisted(() => ({
|
||||
listeners: new Map<string, (event: any) => void>(),
|
||||
info: vi.fn(), emit: vi.fn().mockResolvedValue(undefined), error: vi.fn(),
|
||||
}));
|
||||
vi.mock("@wailsio/runtime", () => ({ Events: {
|
||||
On: (name: string, callback: (event: any) => void) => {
|
||||
state.listeners.set(name, callback);
|
||||
return () => state.listeners.delete(name);
|
||||
},
|
||||
Emit: state.emit,
|
||||
} }));
|
||||
vi.mock("naive-ui", () => ({
|
||||
useDialog: () => ({ info: state.info }),
|
||||
useMessage: () => ({ info: vi.fn(), error: state.error }),
|
||||
}));
|
||||
beforeEach(async () => {
|
||||
vi.clearAllMocks();
|
||||
state.listeners.clear();
|
||||
state.info.mockReturnValue({ destroy: vi.fn() });
|
||||
await renderToString(createSSRApp(UpdatePrompt));
|
||||
});
|
||||
function requestUpdate() {
|
||||
state.listeners.get("app:update-available")!({ data: {
|
||||
currentVersion: "1.2.3", version: "1.2.4", responseEvent: "app:update-response:1",
|
||||
} });
|
||||
return state.info.mock.calls.at(-1)![0];
|
||||
}
|
||||
|
||||
test("显示版本且等待明确点击下载,重复点击只提交一次", async () => {
|
||||
const prompt = requestUpdate();
|
||||
expect(prompt.content).toContain("1.2.3");
|
||||
expect(prompt.content).toContain("1.2.4");
|
||||
expect(prompt.positiveText).toBe("下载更新");
|
||||
expect(prompt.autoFocus).toBe(false);
|
||||
expect(state.emit).not.toHaveBeenCalled();
|
||||
requestUpdate();
|
||||
expect(state.info).toHaveBeenCalledTimes(1);
|
||||
await prompt.onPositiveClick();
|
||||
await prompt.onPositiveClick();
|
||||
expect(state.emit).toHaveBeenCalledExactlyOnceWith("app:update-response:1", { accepted: true });
|
||||
});
|
||||
for (const action of ["onNegativeClick", "onClose", "onEsc"]) {
|
||||
test(`${action} 取消下载并允许再次提示`, async () => {
|
||||
const prompt = requestUpdate();
|
||||
await prompt[action]();
|
||||
expect(state.emit).toHaveBeenCalledExactlyOnceWith("app:update-response:1", { accepted: false });
|
||||
requestUpdate();
|
||||
expect(state.info).toHaveBeenCalledTimes(2);
|
||||
});
|
||||
}
|
||||
test("确认发送失败时提示错误,允许重试", async () => {
|
||||
const prompt = requestUpdate();
|
||||
state.emit.mockRejectedValueOnce(new Error("断开连接"));
|
||||
await expect(prompt.onPositiveClick()).resolves.toBe(false);
|
||||
expect(state.error).toHaveBeenCalled();
|
||||
await prompt.onNegativeClick();
|
||||
expect(state.emit).toHaveBeenLastCalledWith("app:update-response:1", { accepted: false });
|
||||
});
|
||||
Reference in new issue
Block a user