feat: 自动更新
This commit is contained in:
@@ -8,6 +8,9 @@ import { ProfileSettingsPage } from "./ProfileSettingsPage";
|
||||
import { ServerDetailPage } from "./ServerDetailPage";
|
||||
import { ServersPage } from "./ServersPage";
|
||||
import { UsersPage } from "./UsersPage";
|
||||
import runtimeTaskProgressSource from "../components/RuntimeTaskProgress.tsx?raw";
|
||||
import serversPageSource from "./ServersPage.tsx?raw";
|
||||
import serverDetailPageSource from "./ServerDetailPage.tsx?raw";
|
||||
import type { PageComponentProps } from "../contracts/page";
|
||||
import { capabilitiesForRoles, type CurrentUserView } from "../contracts/workspace";
|
||||
import type { OperationTracker } from "../stores/operations";
|
||||
@@ -77,6 +80,25 @@ describe("first-party console pages", () => {
|
||||
expect(html).not.toContain("/Users/");
|
||||
});
|
||||
|
||||
it("renders server runtime actions as a compact popover trigger instead of an in-card details stack", () => {
|
||||
expect(serversPageSource).toContain('aria-haspopup="menu"');
|
||||
expect(serversPageSource).toContain("createPortal");
|
||||
expect(serversPageSource).toContain("runtime-action-popover");
|
||||
expect(serversPageSource).not.toContain("runtime-action-menu");
|
||||
expect(serversPageSource).not.toContain("<details");
|
||||
});
|
||||
|
||||
it("surfaces runtime actions through progress dialogs with build stages", () => {
|
||||
expect(serversPageSource).toContain("RuntimeTaskProgressDialog");
|
||||
expect(serverDetailPageSource).toContain("RuntimeTaskProgressDialog");
|
||||
expect(runtimeTaskProgressSource).toContain("runtimeBuildStages");
|
||||
expect(runtimeTaskProgressSource).toContain("拉取代码");
|
||||
expect(runtimeTaskProgressSource).toContain("安装环境");
|
||||
expect(runtimeTaskProgressSource).toContain("编译构建");
|
||||
expect(runtimeTaskProgressSource).toContain("打包成功");
|
||||
expect(runtimeTaskProgressSource).toContain("构建成功");
|
||||
});
|
||||
|
||||
it("renders server detail sections for daily operations", () => {
|
||||
const html = renderToStaticMarkup(<ServerDetailPage {...pageProps({ serverId: "server-example-1" })} />);
|
||||
|
||||
@@ -125,4 +147,42 @@ describe("first-party console pages", () => {
|
||||
expect(html).toContain("界面偏好");
|
||||
expect(html).not.toContain("role=\"dialog\"");
|
||||
});
|
||||
|
||||
it("labels uploaded profile backgrounds as active and built-in presets as fallback", () => {
|
||||
const originalWindow = globalThis.window;
|
||||
Object.defineProperty(globalThis, "window", {
|
||||
configurable: true,
|
||||
value: {
|
||||
localStorage: {
|
||||
getItem: (key: string) => {
|
||||
if (key === "platform-web.theme.palette") {
|
||||
return "magical-girl";
|
||||
}
|
||||
if (key === "platform-web.theme.backgroundPreset") {
|
||||
return "mecha-grid";
|
||||
}
|
||||
if (key === "platform-web.theme.background") {
|
||||
return "data:image/png;base64,custom";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
const html = renderToStaticMarkup(<ProfileSettingsPage {...pageProps()} />);
|
||||
|
||||
expect(html).toContain("自定义背景");
|
||||
expect(html).toContain("机甲格纳库");
|
||||
expect(html).toContain("备用");
|
||||
expect(html).toContain("当前显示自定义上传背景;机甲格纳库 仅作为移除上传后的备用桌面。");
|
||||
expect(html).toContain('aria-pressed="false"');
|
||||
} finally {
|
||||
Object.defineProperty(globalThis, "window", {
|
||||
configurable: true,
|
||||
value: originalWindow
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user