feat: import Chinese-localized Buzz source snapshot
Docker image / Build (linux/amd64) (push) Has been cancelled
Docker image / Build (linux/arm64) (push) Has been cancelled
Docker image / Merge release multi-arch manifest (push) Has been cancelled
Docker image / Merge debug multi-arch manifest (push) Has been cancelled
Docker image / Build public push gateway (linux/amd64) (push) Has been cancelled
Docker image / Build public push gateway (linux/arm64) (push) Has been cancelled
Docker image / Publish public push gateway image (push) Has been cancelled
Sprig image / Build (linux/amd64) (push) Has been cancelled
Sprig image / Build (linux/arm64) (push) Has been cancelled
Sprig image / Merge multi-arch manifest (push) Has been cancelled
Harbor Buzz Orchestra / Python tests and lint (push) Has been cancelled
CI / Detect Changed Paths (push) Has been cancelled
CI / Rust Lint (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Desktop Core (push) Has been cancelled
CI / Desktop Smoke E2E (1) (push) Has been cancelled
CI / Desktop Smoke E2E (2) (push) Has been cancelled
CI / Desktop Smoke E2E (3) (push) Has been cancelled
CI / Desktop Smoke E2E (4) (push) Has been cancelled
CI / Desktop (push) Has been cancelled
CI / Desktop E2E Relay (push) Has been cancelled
CI / Desktop E2E Integration (1/2) (push) Has been cancelled
CI / Desktop E2E Integration (2/2) (push) Has been cancelled
CI / Desktop E2E Integration (push) Has been cancelled
CI / Backend Integration (relay e2e) (push) Has been cancelled
CI / Relay E2E (push) Has been cancelled
CI / Web (push) Has been cancelled
CI / Mobile (push) Has been cancelled
CI / Security (push) Has been cancelled
CI / Dead Token Reference Guard (push) Has been cancelled
CI / Server Cross-Compile (aarch64-unknown-linux-musl) (push) Has been cancelled
CI / Server Cross-Compile (x86_64-unknown-linux-musl) (push) Has been cancelled
CI / Windows Rust (x86_64-pc-windows-msvc) (push) Has been cancelled
CI / Desktop Build (macOS) (push) Has been cancelled
helm chart / lint + unittest + render matrix (push) Has been cancelled
helm chart / install on kind (gated) (push) Has been cancelled
helm chart / publish chart to GHCR (push) Has been cancelled
Mesh Lifecycle / Relay-Driven Mesh Lifecycle Smoke (push) Has been cancelled
Sprig / Build (aarch64-unknown-linux-musl) (push) Has been cancelled
Sprig / Build (x86_64-unknown-linux-musl) (push) Has been cancelled
Sprig / Publish rolling release (push) Has been cancelled
Sprig / Publish tagged release (push) Has been cancelled
Docker image / Build (linux/amd64) (push) Has been cancelled
Docker image / Build (linux/arm64) (push) Has been cancelled
Docker image / Merge release multi-arch manifest (push) Has been cancelled
Docker image / Merge debug multi-arch manifest (push) Has been cancelled
Docker image / Build public push gateway (linux/amd64) (push) Has been cancelled
Docker image / Build public push gateway (linux/arm64) (push) Has been cancelled
Docker image / Publish public push gateway image (push) Has been cancelled
Sprig image / Build (linux/amd64) (push) Has been cancelled
Sprig image / Build (linux/arm64) (push) Has been cancelled
Sprig image / Merge multi-arch manifest (push) Has been cancelled
Harbor Buzz Orchestra / Python tests and lint (push) Has been cancelled
CI / Detect Changed Paths (push) Has been cancelled
CI / Rust Lint (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Desktop Core (push) Has been cancelled
CI / Desktop Smoke E2E (1) (push) Has been cancelled
CI / Desktop Smoke E2E (2) (push) Has been cancelled
CI / Desktop Smoke E2E (3) (push) Has been cancelled
CI / Desktop Smoke E2E (4) (push) Has been cancelled
CI / Desktop (push) Has been cancelled
CI / Desktop E2E Relay (push) Has been cancelled
CI / Desktop E2E Integration (1/2) (push) Has been cancelled
CI / Desktop E2E Integration (2/2) (push) Has been cancelled
CI / Desktop E2E Integration (push) Has been cancelled
CI / Backend Integration (relay e2e) (push) Has been cancelled
CI / Relay E2E (push) Has been cancelled
CI / Web (push) Has been cancelled
CI / Mobile (push) Has been cancelled
CI / Security (push) Has been cancelled
CI / Dead Token Reference Guard (push) Has been cancelled
CI / Server Cross-Compile (aarch64-unknown-linux-musl) (push) Has been cancelled
CI / Server Cross-Compile (x86_64-unknown-linux-musl) (push) Has been cancelled
CI / Windows Rust (x86_64-pc-windows-msvc) (push) Has been cancelled
CI / Desktop Build (macOS) (push) Has been cancelled
helm chart / lint + unittest + render matrix (push) Has been cancelled
helm chart / install on kind (gated) (push) Has been cancelled
helm chart / publish chart to GHCR (push) Has been cancelled
Mesh Lifecycle / Relay-Driven Mesh Lifecycle Smoke (push) Has been cancelled
Sprig / Build (aarch64-unknown-linux-musl) (push) Has been cancelled
Sprig / Build (x86_64-unknown-linux-musl) (push) Has been cancelled
Sprig / Publish rolling release (push) Has been cancelled
Sprig / Publish tagged release (push) Has been cancelled
Signed-off-by: cls_宁波本机 <908705107@qq.com>
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
import { expect, test } from "@playwright/test";
|
||||
|
||||
import { TEST_IDENTITIES, installMockBridge } from "../helpers/bridge";
|
||||
|
||||
// Ultrawide viewport: 3440px is a common 21:9 monitor width.
|
||||
const ULTRAWIDE = { width: 3440, height: 1440 };
|
||||
|
||||
async function waitForMockLiveSubscription(
|
||||
page: import("@playwright/test").Page,
|
||||
channelName: string,
|
||||
) {
|
||||
await expect
|
||||
.poll(async () =>
|
||||
page.evaluate(
|
||||
({ ch }) =>
|
||||
(
|
||||
window as Window & {
|
||||
__BUZZ_E2E_HAS_MOCK_LIVE_SUBSCRIPTION__?: (input: {
|
||||
channelName: string;
|
||||
}) => boolean;
|
||||
}
|
||||
).__BUZZ_E2E_HAS_MOCK_LIVE_SUBSCRIPTION__?.({ channelName: ch }) ??
|
||||
false,
|
||||
{ ch: channelName },
|
||||
),
|
||||
)
|
||||
.toBe(true);
|
||||
}
|
||||
|
||||
async function emitMockReply(
|
||||
page: import("@playwright/test").Page,
|
||||
channelName: string,
|
||||
content: string,
|
||||
parentEventId: string,
|
||||
) {
|
||||
await page.evaluate(
|
||||
({ ch, msg, parent, pubkey }) =>
|
||||
(
|
||||
window as Window & {
|
||||
__BUZZ_E2E_EMIT_MOCK_MESSAGE__?: (input: {
|
||||
channelName: string;
|
||||
content: string;
|
||||
parentEventId?: string | null;
|
||||
pubkey?: string;
|
||||
createdAt?: number;
|
||||
}) => unknown;
|
||||
}
|
||||
).__BUZZ_E2E_EMIT_MOCK_MESSAGE__?.({
|
||||
channelName: ch,
|
||||
content: msg,
|
||||
parentEventId: parent,
|
||||
pubkey,
|
||||
createdAt: Math.floor(Date.now() / 1000) - 10,
|
||||
}),
|
||||
{
|
||||
ch: channelName,
|
||||
msg: content,
|
||||
parent: parentEventId,
|
||||
pubkey: TEST_IDENTITIES.alice.pubkey,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
async function openThread(page: import("@playwright/test").Page) {
|
||||
await page.goto("/");
|
||||
await page.getByTestId("channel-general").click();
|
||||
await expect(page.getByTestId("chat-title")).toHaveText("general");
|
||||
await waitForMockLiveSubscription(page, "general");
|
||||
|
||||
// Seed a reply so a thread summary row appears, then open it.
|
||||
await emitMockReply(
|
||||
page,
|
||||
"general",
|
||||
"Reply to welcome",
|
||||
"mock-general-welcome",
|
||||
);
|
||||
const threadSummary = page.getByTestId("message-thread-summary").first();
|
||||
await expect(threadSummary).toBeVisible();
|
||||
await threadSummary.click();
|
||||
await expect(page.getByTestId("message-thread-panel")).toBeVisible();
|
||||
}
|
||||
|
||||
test.describe("thread pane on ultrawide monitors", () => {
|
||||
test("expands well past the legacy 720px cap", async ({ page }) => {
|
||||
await page.setViewportSize(ULTRAWIDE);
|
||||
await installMockBridge(page);
|
||||
await openThread(page);
|
||||
|
||||
const pane = page.getByTestId("message-thread-panel");
|
||||
const handle = page.getByTestId("right-auxiliary-pane-resize-handle");
|
||||
|
||||
const beforeBox = await pane.boundingBox();
|
||||
if (!beforeBox) throw new Error("thread panel not laid out");
|
||||
// The panel opens at its default narrow width, far from the viewport edge.
|
||||
expect(beforeBox.width).toBeLessThan(720);
|
||||
await page.screenshot({
|
||||
path: "test-results/threadpane-ultrawide-before.png",
|
||||
});
|
||||
|
||||
// Drag the resize handle far to the left to widen the right-hand pane.
|
||||
const handleBox = await handle.boundingBox();
|
||||
if (!handleBox) throw new Error("resize handle not laid out");
|
||||
const startX = handleBox.x + handleBox.width / 2;
|
||||
const startY = handleBox.y + handleBox.height / 2;
|
||||
await page.mouse.move(startX, startY);
|
||||
await page.mouse.down();
|
||||
// Move left in steps so pointermove fires repeatedly.
|
||||
for (let x = startX; x >= 600; x -= 120) {
|
||||
await page.mouse.move(x, startY);
|
||||
}
|
||||
await page.mouse.up();
|
||||
|
||||
const afterBox = await pane.boundingBox();
|
||||
if (!afterBox) throw new Error("thread panel not laid out after resize");
|
||||
// The pane is now far wider than the old 720px hard cap.
|
||||
expect(afterBox.width).toBeGreaterThan(1200);
|
||||
await page.screenshot({
|
||||
path: "test-results/threadpane-ultrawide-after.png",
|
||||
});
|
||||
});
|
||||
|
||||
test("clamps the requested width to the channel surface", async ({
|
||||
page,
|
||||
}) => {
|
||||
await page.setViewportSize({ width: 1720, height: 900 });
|
||||
await installMockBridge(page);
|
||||
await openThread(page);
|
||||
|
||||
const pane = page.getByTestId("message-thread-panel");
|
||||
const handle = page.getByTestId("right-auxiliary-pane-resize-handle");
|
||||
const handleBox = await handle.boundingBox();
|
||||
if (!handleBox) throw new Error("resize handle not laid out");
|
||||
|
||||
const startX = handleBox.x + handleBox.width / 2;
|
||||
const startY = handleBox.y + handleBox.height / 2;
|
||||
await page.mouse.move(startX, startY);
|
||||
await page.mouse.down();
|
||||
for (let x = startX; x >= 500; x -= 60) {
|
||||
await page.mouse.move(x, startY);
|
||||
}
|
||||
await page.mouse.up();
|
||||
|
||||
const renderedWidth = await pane.evaluate((element) =>
|
||||
Math.round(element.getBoundingClientRect().width),
|
||||
);
|
||||
const storedWidth = await page.evaluate(() =>
|
||||
Number(window.sessionStorage.getItem("buzz.desktop.thread-panel-width")),
|
||||
);
|
||||
const mainWidth = await page
|
||||
.getByTestId("channel-drop-zone")
|
||||
.evaluate((element) => Math.round(element.getBoundingClientRect().width));
|
||||
|
||||
await page.screenshot({
|
||||
path: "test-results/threadpane-expanded-after-fix.png",
|
||||
});
|
||||
|
||||
expect(renderedWidth).toBe(storedWidth);
|
||||
expect(mainWidth).toBeGreaterThanOrEqual(300);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user