From 2203d64abeee456a2d86f8e7793a00cf4510d04f Mon Sep 17 00:00:00 2001 From: Viktor Scharf Date: Tue, 8 Jul 2025 16:58:19 +0200 Subject: [PATCH 1/3] e2e tests. fix app-provider flaky test --- .woodpecker.star | 3 + docker-compose.yml | 2 + .../objects/app-files/resource/actions.ts | 56 +++++-------------- tests/woodpecker/collabora/no_welcome/.keep | 0 4 files changed, 18 insertions(+), 43 deletions(-) create mode 100644 tests/woodpecker/collabora/no_welcome/.keep diff --git a/.woodpecker.star b/.woodpecker.star index 72d8f55c43..4b88b2aa36 100644 --- a/.woodpecker.star +++ b/.woodpecker.star @@ -1352,6 +1352,9 @@ def collaboraService(): "coolconfig generate-proof-key", "bash /start-collabora-online.sh", ], + "volumes": [ + "tests/woodpecker/collabora/no_welcome:/usr/share/coolwsd/browser/dist/welcome:ro", + ], }, ] diff --git a/docker-compose.yml b/docker-compose.yml index ee4c87f095..1895cf11b0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -206,6 +206,8 @@ services: traefik.http.routers.collabora.rule: PathPrefix(`/`) traefik.http.routers.collabora.entrypoints: collabora traefik.http.services.collabora.loadbalancer.server.port: 9980 + volumes: + - ./tests/woodpecker/collabora/no_welcome:/usr/share/coolwsd/browser/dist/welcome:ro restart: unless-stopped depends_on: - traefik diff --git a/tests/e2e/support/objects/app-files/resource/actions.ts b/tests/e2e/support/objects/app-files/resource/actions.ts index a88b85b275..15175a297d 100644 --- a/tests/e2e/support/objects/app-files/resource/actions.ts +++ b/tests/e2e/support/objects/app-files/resource/actions.ts @@ -82,7 +82,6 @@ const previewAudio = '//main[@id="preview"]//div[contains(@class,"stage_media")] const previewVideo = '//main[@id="preview"]//div[contains(@class,"stage_media")]//video//source' const previewControlsCount = '.preview-controls-action-count > :first-child' const externalEditorIframe = '[name="app-iframe"]' -const copyPasteWarningPopup = '#copy_paste_warning-box' const tagTableCell = '//*[@data-test-resource-name="%s"]/ancestor::tr//td[contains(@class, "oc-table-data-cell-tags")]' const tagInFilesTable = '//*[contains(@class, "oc-tag")]//span[text()="%s"]//ancestor::a' @@ -129,7 +128,6 @@ const userAvatarInActivitypanelSelector = '[data-test-user-name="%s"]' const collaboraDocPermissionModeSelector = '#permissionmode-container' const collaboraEditorSaveSelector = '.notebookbar-shortcuts-bar #save' const collaboraDocTextAreaSelector = '#clipboard-area' -const collaboraWelcomeModalIframe = '.iframe-welcome-modal' const collaboraCanvasEditorSelector = '.leaflet-layer' // OnlyOffice const onlyOfficeInnerFrameSelector = '[name="frameEditor"]' @@ -420,14 +418,6 @@ const createDocumentFile = async ( const editorMainFrame = page.frameLocator(externalEditorIframe) switch (editorToOpen) { case 'Collabora': - try { - await editorMainFrame - .locator(collaboraWelcomeModalIframe) - .waitFor({ timeout: config.minTimeout * 1000 }) - await page.keyboard.press('Escape') - } catch { - console.log('No welcome modal found. Continue...') - } await editorMainFrame.locator(collaboraDocTextAreaSelector).fill(content) const saveLocator = editorMainFrame.locator(collaboraEditorSaveSelector) await expect(saveLocator).toHaveAttribute('class', /.*savemodified.*/) @@ -492,14 +482,6 @@ export const openAndGetContentOfDocument = async ({ const editorMainFrame = page.frameLocator(externalEditorIframe) switch (editorToOpen) { case 'Collabora': - try { - await editorMainFrame - .locator(collaboraWelcomeModalIframe) - .waitFor({ timeout: config.minTimeout * 1000 }) - await page.keyboard.press('Escape') - } catch { - console.log('No welcome modal found. Continue...') - } await editorMainFrame.locator(collaboraCanvasEditorSelector).click() break case 'OnlyOffice': @@ -512,24 +494,21 @@ export const openAndGetContentOfDocument = async ({ "Editor should be either 'Collabora' or 'OnlyOffice' but found " + editorToOpen ) } - // copying and getting the value with keyboard requires some - await page.keyboard.press('ControlOrMeta+A', { delay: 200 }) - await page.keyboard.press('ControlOrMeta+C', { delay: 200 }) - try { - await editorMainFrame - .locator(copyPasteWarningPopup) - .waitFor({ timeout: config.minTimeout * 1000 }) - // close popup - await page.keyboard.press('Escape') - // deselect text. otherwise the clipboard will be empty + return await tryCopyClipboard(page) +} + +const tryCopyClipboard = async (page: Page, maxRetries = 5): Promise => { + for (let i = 0; i < maxRetries; i++) { + await page.evaluate(() => navigator.clipboard.writeText('')) + await page.waitForTimeout(200) + await page.keyboard.press('ControlOrMeta+A', { delay: 100 }) + await page.keyboard.press('ControlOrMeta+C', { delay: 100 }) + const text = await page.evaluate(() => navigator.clipboard.readText()) + if (text.trim().length > 0) return text + await page.waitForTimeout(200) await page.keyboard.press('Escape') - // select text again and copy text - await page.keyboard.press('ControlOrMeta+A', { delay: 200 }) - await page.keyboard.press('ControlOrMeta+C', { delay: 200 }) - } catch { - console.log('No copy-paste warning popup found. Continue...') } - return await page.evaluate(() => navigator.clipboard.readText()) + throw new Error('Failed to read non-empty clipboard content after retries') } const isAppProviderServiceForOfficeSuitesReadyInWebUI = async (page: Page, type: string) => { @@ -2060,15 +2039,6 @@ export const canEditContent = async ({ const editorMainFrame = page.frameLocator(externalEditorIframe) switch (type) { case 'OpenDocument': - // By Default when "OpenDocument" is created, it is opened with "Collabora" if both app-provider services are running together - try { - await editorMainFrame - .locator(collaboraWelcomeModalIframe) - .waitFor({ timeout: config.minTimeout * 1000 }) - await page.keyboard.press('Escape') - } catch { - console.log('No welcome modal found. Continue...') - } const collaboraDocPermissionModeLocator = editorMainFrame.locator( collaboraDocPermissionModeSelector ) diff --git a/tests/woodpecker/collabora/no_welcome/.keep b/tests/woodpecker/collabora/no_welcome/.keep new file mode 100644 index 0000000000..e69de29bb2 From 1503c108859c91c276f22f2a7fac2b2abfcc1602 Mon Sep 17 00:00:00 2001 From: Viktor Scharf Date: Thu, 10 Jul 2025 23:22:42 +0200 Subject: [PATCH 2/3] disable welcom popup using params --- .woodpecker.star | 5 +---- docker-compose.yml | 4 +--- tests/woodpecker/collabora/no_welcome/.keep | 0 3 files changed, 2 insertions(+), 7 deletions(-) delete mode 100644 tests/woodpecker/collabora/no_welcome/.keep diff --git a/.woodpecker.star b/.woodpecker.star index 4b88b2aa36..ed27ee6260 100644 --- a/.woodpecker.star +++ b/.woodpecker.star @@ -1346,15 +1346,12 @@ def collaboraService(): "detach": True, "environment": { "DONT_GEN_SSL_CERT": "set", - "extra_params": "--o:ssl.enable=true --o:ssl.termination=true --o:welcome.enable=false --o:net.frame_ancestors=https://opencloud:9200", + "extra_params": "--o:ssl.enable=true --o:ssl.termination=true --o:home_mode.enable=true --o:net.frame_ancestors=https://opencloud:9200", }, "commands": [ "coolconfig generate-proof-key", "bash /start-collabora-online.sh", ], - "volumes": [ - "tests/woodpecker/collabora/no_welcome:/usr/share/coolwsd/browser/dist/welcome:ro", - ], }, ] diff --git a/docker-compose.yml b/docker-compose.yml index 1895cf11b0..2c0f5f5274 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -185,7 +185,7 @@ services: command: ['coolconfig generate-proof-key && /start-collabora-online.sh'] environment: DONT_GEN_SSL_CERT: YES - extra_params: --o:ssl.enable=false --o:ssl.ssl_verification=false --o:ssl.termination=true --o:welcome.enable=false --o:net.frame_ancestors=${OC_URL:-https://host.docker.internal:9200} + extra_params: --o:ssl.enable=false --o:ssl.ssl_verification=false --o:home_mode.enable=true --o:ssl.termination=true --o:net.frame_ancestors=${OC_URL:-https://host.docker.internal:9200} username: ${COLLABORA_ADMIN_USER:-admin} password: ${COLLABORA_ADMIN_PASSWORD:-admin} cap_add: @@ -206,8 +206,6 @@ services: traefik.http.routers.collabora.rule: PathPrefix(`/`) traefik.http.routers.collabora.entrypoints: collabora traefik.http.services.collabora.loadbalancer.server.port: 9980 - volumes: - - ./tests/woodpecker/collabora/no_welcome:/usr/share/coolwsd/browser/dist/welcome:ro restart: unless-stopped depends_on: - traefik diff --git a/tests/woodpecker/collabora/no_welcome/.keep b/tests/woodpecker/collabora/no_welcome/.keep deleted file mode 100644 index e69de29bb2..0000000000 From 35b31d783183923f077a79abaf7587b0d80b9011 Mon Sep 17 00:00:00 2001 From: Viktor Scharf Date: Thu, 10 Jul 2025 23:34:22 +0200 Subject: [PATCH 3/3] update collabora version --- .woodpecker.star | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker.star b/.woodpecker.star index ed27ee6260..501baee8df 100644 --- a/.woodpecker.star +++ b/.woodpecker.star @@ -3,7 +3,7 @@ docker_repo_slug = "opencloudeu/web" ALPINE_GIT = "alpine/git:latest" APACHE_TIKA = "apache/tika:2.8.0.0" -COLLABORA_CODE = "collabora/code:24.04.13.2.1" +COLLABORA_CODE = "collabora/code:25.04.3.2.1" KEYCLOAK = "quay.io/keycloak/keycloak:25.0.0" MINIO_MC = "minio/mc:RELEASE.2021-10-07T04-19-58Z" OC_CI_ALPINE = "owncloudci/alpine:latest"