diff --git a/images/object-storage-setup/guide-object-storage-setup-local-file-policy.png b/images/object-storage-setup/guide-object-storage-setup-local-file-policy.png index fe29a27e..423a92fb 100644 Binary files a/images/object-storage-setup/guide-object-storage-setup-local-file-policy.png and b/images/object-storage-setup/guide-object-storage-setup-local-file-policy.png differ diff --git a/images/object-storage-setup/guide-object-storage-setup-retrieval-method.png b/images/object-storage-setup/guide-object-storage-setup-retrieval-method.png index 39e2c52c..e3d331eb 100644 Binary files a/images/object-storage-setup/guide-object-storage-setup-retrieval-method.png and b/images/object-storage-setup/guide-object-storage-setup-retrieval-method.png differ diff --git a/images/p2p-setup/guide-p2p-setup-local-file-policy.png b/images/p2p-setup/guide-p2p-setup-local-file-policy.png index fe29a27e..423a92fb 100644 Binary files a/images/p2p-setup/guide-p2p-setup-local-file-policy.png and b/images/p2p-setup/guide-p2p-setup-local-file-policy.png differ diff --git a/images/p2p-setup/guide-p2p-setup-retrieval-method.png b/images/p2p-setup/guide-p2p-setup-retrieval-method.png index 39e2c52c..e3d331eb 100644 Binary files a/images/p2p-setup/guide-p2p-setup-retrieval-method.png and b/images/p2p-setup/guide-p2p-setup-retrieval-method.png differ diff --git a/images/quick-setup/guide-quick-setup-local-file-policy.png b/images/quick-setup/guide-quick-setup-local-file-policy.png index fe29a27e..423a92fb 100644 Binary files a/images/quick-setup/guide-quick-setup-local-file-policy.png and b/images/quick-setup/guide-quick-setup-local-file-policy.png differ diff --git a/images/quick-setup/guide-quick-setup-retrieval-method.png b/images/quick-setup/guide-quick-setup-retrieval-method.png index 39e2c52c..e3d331eb 100644 Binary files a/images/quick-setup/guide-quick-setup-retrieval-method.png and b/images/quick-setup/guide-quick-setup-retrieval-method.png differ diff --git a/test/e2e-obsidian/runner/setupUri.ts b/test/e2e-obsidian/runner/setupUri.ts index 2c2c119f..274eb2bf 100644 --- a/test/e2e-obsidian/runner/setupUri.ts +++ b/test/e2e-obsidian/runner/setupUri.ts @@ -41,6 +41,17 @@ export async function captureGuideDialogue(port: number, filename: string, title return await captureObsidianElement(port, filename, (page) => modalByTitle(page, title).locator(".modal").first()); } +export async function assertVerticalActionLayout(port: number, title: string): Promise { + await withObsidianPage(port, async (page) => { + const actions = modalByTitle(page, title).locator(".vpk-action-dialog__actions").first(); + await actions.waitFor({ state: "visible", timeout: uiTimeoutMs }); + const flexDirection = await actions.evaluate((element) => getComputedStyle(element).flexDirection); + if (flexDirection !== "column") { + throw new Error(`Expected vertically stacked actions in '${title}', received '${flexDirection}'.`); + } + }); +} + export async function selectRadioOption(modal: Locator, title: string): Promise { const radio = modal.locator("label").filter({ hasText: title }).locator('input[type="radio"]').first(); await radio.check({ timeout: uiTimeoutMs }); @@ -257,6 +268,7 @@ export async function acknowledgeDisabledOptionalFeatures(port: number, captures export async function confirmFastFetch(port: number, captures: SetupCaptureNames): Promise { const firstTitle = "Data retrieval scheduled"; + await assertVerticalActionLayout(port, firstTitle); const firstScreenshot = await captureGuideDialogue( port, `guide-${captures.guide}-retrieval-method.png`, @@ -269,6 +281,7 @@ export async function confirmFastFetch(port: number, captures: SetupCaptureNames }); const secondTitle = "How to handle extra existing local files?"; + await assertVerticalActionLayout(port, secondTitle); const secondScreenshot = await captureGuideDialogue( port, `guide-${captures.guide}-local-file-policy.png`, diff --git a/test/e2e-obsidian/scripts/setup-uri-workflow.ts b/test/e2e-obsidian/scripts/setup-uri-workflow.ts index 4b6f1c5b..a53ca5ac 100644 --- a/test/e2e-obsidian/scripts/setup-uri-workflow.ts +++ b/test/e2e-obsidian/scripts/setup-uri-workflow.ts @@ -22,7 +22,11 @@ import { type LocalDatabaseEntry, } from "../runner/liveSyncWorkflow.ts"; import { startObsidianLiveSyncSession, type ObsidianLiveSyncSession } from "../runner/session.ts"; -import { generateSetupURIFromDevice, resumeCompatibilityReviewIfShown } from "../runner/setupUri.ts"; +import { + assertVerticalActionLayout, + generateSetupURIFromDevice, + resumeCompatibilityReviewIfShown, +} from "../runner/setupUri.ts"; import { captureObsidianDialogue, captureObsidianElement, @@ -344,6 +348,7 @@ async function acknowledgeDisabledOptionalFeatures(port: number): Promise { const firstTitle = "Data retrieval scheduled"; + await assertVerticalActionLayout(port, firstTitle); const firstScreenshot = await captureObsidianDialogue( port, "setup-uri-second-retrieval-method.png", @@ -359,6 +364,7 @@ async function confirmFastFetch(port: number): Promise { }); const secondTitle = "How to handle extra existing local files?"; + await assertVerticalActionLayout(port, secondTitle); const secondScreenshot = await captureObsidianDialogue( port, "setup-uri-second-local-file-policy.png",