From ae343baab7c2c689364ee78cfa7cb3de690dff4a Mon Sep 17 00:00:00 2001 From: Rayane Elmedjadji Date: Mon, 26 Jan 2026 17:00:06 +0100 Subject: [PATCH 1/7] change type for chromosome input in locuszoom and upgrades to version 0.0.8 --- packages/locuszoom/package.json | 2 +- packages/locuszoom/public/locuszoom.xml | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/locuszoom/package.json b/packages/locuszoom/package.json index 08e5feea..6c38e681 100644 --- a/packages/locuszoom/package.json +++ b/packages/locuszoom/package.json @@ -1,6 +1,6 @@ { "name": "@galaxyproject/locuszoom", - "version": "0.0.7", + "version": "0.0.8", "type": "module", "license": "MIT", "files": [ diff --git a/packages/locuszoom/public/locuszoom.xml b/packages/locuszoom/public/locuszoom.xml index 4ed12579..bad432dc 100644 --- a/packages/locuszoom/public/locuszoom.xml +++ b/packages/locuszoom/public/locuszoom.xml @@ -21,9 +21,7 @@ chromosome - integer - 1 - 1 + string @@ -97,7 +95,7 @@ - + ]]> From fd8d89a44ed31cf6c45a58988bec79c3f53cb8dc Mon Sep 17 00:00:00 2001 From: Rayane Elmedjadji Date: Tue, 27 Jan 2026 14:06:25 +0100 Subject: [PATCH 2/7] Add a playwright test for locuszoom --- .../.github/workflows/playwright.yml | 27 +++++++ packages/locuszoom/.gitignore | 9 ++- packages/locuszoom/package.json | 67 +++++++-------- packages/locuszoom/playwright.config.js | 81 +++++++++++++++++++ packages/locuszoom/src/main.js | 4 +- packages/locuszoom/tests/example.spec.js | 16 ++++ packages/locuszoom/yarn.lock | 40 ++++++--- 7 files changed, 196 insertions(+), 48 deletions(-) create mode 100644 packages/locuszoom/.github/workflows/playwright.yml create mode 100644 packages/locuszoom/playwright.config.js create mode 100644 packages/locuszoom/tests/example.spec.js diff --git a/packages/locuszoom/.github/workflows/playwright.yml b/packages/locuszoom/.github/workflows/playwright.yml new file mode 100644 index 00000000..3eb13143 --- /dev/null +++ b/packages/locuszoom/.github/workflows/playwright.yml @@ -0,0 +1,27 @@ +name: Playwright Tests +on: + push: + branches: [ main, master ] + pull_request: + branches: [ main, master ] +jobs: + test: + timeout-minutes: 60 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: lts/* + - name: Install dependencies + run: npm ci + - name: Install Playwright Browsers + run: npx playwright install --with-deps + - name: Run Playwright tests + run: npx playwright test + - uses: actions/upload-artifact@v4 + if: ${{ !cancelled() }} + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 diff --git a/packages/locuszoom/.gitignore b/packages/locuszoom/.gitignore index 8c785b3e..3a915b13 100644 --- a/packages/locuszoom/.gitignore +++ b/packages/locuszoom/.gitignore @@ -15,4 +15,11 @@ node_modules npm-debug.log* pnpm-debug.log* yarn-debug.log* -yarn-error.log* \ No newline at end of file +yarn-error.log* + +# Playwright +/test-results/ +/playwright-report/ +/blob-report/ +/playwright/.cache/ +/playwright/.auth/ diff --git a/packages/locuszoom/package.json b/packages/locuszoom/package.json index 6c38e681..d3479ca7 100644 --- a/packages/locuszoom/package.json +++ b/packages/locuszoom/package.json @@ -1,35 +1,36 @@ { - "name": "@galaxyproject/locuszoom", - "version": "0.0.8", - "type": "module", - "license": "MIT", - "files": [ - "static" - ], - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview", - "prettier": "prettier --config ./prettier.config.js --write 'package.json' '**/*.{js,jsx,ts,tsx,json,css,md,vue}'", - "test": "vitest --run", - "test:watch": "vitest --watch", - "test:ui": "vitest --ui" - }, - "devDependencies": { - "@types/node": "^22.9.0", - "@vitejs/plugin-vue": "^5.0.5", - "@vitest/ui": "^3.0.9", - "autoprefixer": "^10.4.19", - "galaxy-charts": "^0.0.73", - "galaxy-charts-xml-parser": "^1.0.3", - "jsdom": "^25.0.1", - "locuszoom": "^0.14.0", - "postcss": "^8.4.40", - "prettier": "^3.3.3", - "tailwindcss": "^3.4.7", - "typescript": "^5.5.4", - "vite": "^6.2.2", - "vitest": "^3.0.9", - "vue": "^3.4.31" - } + "name": "@galaxyproject/locuszoom", + "version": "0.0.8", + "type": "module", + "license": "MIT", + "files": [ + "static" + ], + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "prettier": "prettier --config ./prettier.config.js --write 'package.json' '**/*.{js,jsx,ts,tsx,json,css,md,vue}'", + "test": "vitest --run", + "test:watch": "vitest --watch", + "test:ui": "vitest --ui" + }, + "devDependencies": { + "@playwright/test": "^1.58.0", + "@types/node": "^22.9.0", + "@vitejs/plugin-vue": "^5.0.5", + "@vitest/ui": "^3.0.9", + "autoprefixer": "^10.4.19", + "galaxy-charts": "^0.0.73", + "galaxy-charts-xml-parser": "^1.0.3", + "jsdom": "^25.0.1", + "locuszoom": "^0.14.0", + "postcss": "^8.4.40", + "prettier": "^3.3.3", + "tailwindcss": "^3.4.7", + "typescript": "^5.5.4", + "vite": "^6.2.2", + "vitest": "^3.0.9", + "vue": "^3.4.31" + } } diff --git a/packages/locuszoom/playwright.config.js b/packages/locuszoom/playwright.config.js new file mode 100644 index 00000000..3967e588 --- /dev/null +++ b/packages/locuszoom/playwright.config.js @@ -0,0 +1,81 @@ +// @ts-check +import { defineConfig, devices } from '@playwright/test'; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// import dotenv from 'dotenv'; +// import path from 'path'; +// dotenv.config({ path: path.resolve(__dirname, '.env') }); + +/** + * @see https://playwright.dev/docs/test-configuration + */ +export default defineConfig({ + testDir: './tests', + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('')`. */ + // baseURL: 'http://localhost:3000', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, + + { + name: 'webkit', + use: { ...devices['Desktop Safari'] }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + + /* Run your local dev server before starting the tests */ + // webServer: { + // command: 'npm run start', + // url: 'http://localhost:3000', + // reuseExistingServer: !process.env.CI, + // }, +}); + diff --git a/packages/locuszoom/src/main.js b/packages/locuszoom/src/main.js index 75a95b77..3ee84888 100644 --- a/packages/locuszoom/src/main.js +++ b/packages/locuszoom/src/main.js @@ -11,10 +11,10 @@ async function main() { // Construct the incoming data object with mock configuration and data const dataIncoming = { visualization_config: { - dataset_id: "b620c45fba703209", // id of primary_dataset.bgzip + dataset_id: "0a248a1f62a0cc04", // id of primary_dataset.bgzip // Placeholder for additional visualization settings settings: { - tabix: { id: "abd164196b68b912" }, // id of secondary_dataset.tbi + tabix: { id: "03501d7626bd192f" }, // id of secondary_dataset.tbi }, }, // Parse and load the visualization XML configuration diff --git a/packages/locuszoom/tests/example.spec.js b/packages/locuszoom/tests/example.spec.js new file mode 100644 index 00000000..dc94251c --- /dev/null +++ b/packages/locuszoom/tests/example.spec.js @@ -0,0 +1,16 @@ +// @ts-check +import { test, expect } from '@playwright/test'; + +test('Run plot', async ({ page }) => { + await page.goto('http://localhost:5173/'); + await page.getByRole('button').click(); + await page.getByRole('textbox', { name: 'Please Input' }).nth(1).fill('chr1'); + await expect(page.locator('#lz-plot_association_associationpvalues_-161284_TC')).toBeVisible(); + await page.locator('#lz-plot_association_associationpvalues_-161284_TC').click(); + await page.getByText('×phen1:61284_T/C P Value: 4.').click(); + await expect(page.getByText('×phen1:61284_T/C P Value: 4.')).toBeVisible(); + await page.getByRole('button', { name: '×' }).click(); + await expect(page.getByText('×phen1:61284_T/C P Value: 4.')).toBeHidden(); + await page.getByRole('textbox', { name: 'Please Input' }).nth(1).click(); +}); + diff --git a/packages/locuszoom/yarn.lock b/packages/locuszoom/yarn.lock index 1b3e556a..623dc993 100644 --- a/packages/locuszoom/yarn.lock +++ b/packages/locuszoom/yarn.lock @@ -42,10 +42,10 @@ "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" -"@esbuild/darwin-arm64@0.25.1": +"@esbuild/linux-x64@0.25.1": version "0.25.1" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz" - integrity sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ== + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz" + integrity sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA== "@hapi/hoek@^9.0.0": version "9.3.0" @@ -129,15 +129,22 @@ resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@playwright/test@^1.58.0": + version "1.58.0" + resolved "https://registry.npmjs.org/@playwright/test/-/test-1.58.0.tgz" + integrity sha512-fWza+Lpbj6SkQKCrU6si4iu+fD2dD3gxNHFhUPxsfXBPhnv3rRSQVd0NtBUT9Z/RhF/boCBcuUaMUSTRTopjZg== + dependencies: + playwright "1.58.0" + "@polka/url@^1.0.0-next.24": version "1.0.0-next.28" resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz" integrity sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw== -"@rollup/rollup-darwin-arm64@4.35.0": +"@rollup/rollup-linux-x64-gnu@4.35.0": version "4.35.0" - resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz" - integrity sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q== + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz" + integrity sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA== "@types/estree@^1.0.0", "@types/estree@1.0.6": version "1.0.6" @@ -1320,11 +1327,6 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" @@ -1660,7 +1662,7 @@ json-stable-stringify-without-jsonify@^1.0.1: "jszlib@git+https://github.com/dasmoth/jszlib.git#4e562c7": version "0.2.1" resolved "git+ssh://git@github.com/dasmoth/jszlib.git" - integrity sha512-L+slw277qqgqWvyz6srOUOqHnbuyLBGPkgzM7IgxCTb/MVTNiy11iQ15mS+dO2f8UIjKBb4z8AgO3vshLrjXVg== + integrity sha512-uvBAyIcKCRxAWN6fpZMzC5GOrFzWsTehZW6DkRn9RKfJ4QcSsHZFqnlFmHQOxSIkO4tWQ0FxGLNKJQ1pKy3PeA== just-clone@^3.2.1: version "3.2.1" @@ -1976,6 +1978,20 @@ pirates@^4.0.1: resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== +playwright-core@1.58.0: + version "1.58.0" + resolved "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.0.tgz" + integrity sha512-aaoB1RWrdNi3//rOeKuMiS65UCcgOVljU46At6eFcOFPFHWtd2weHRRow6z/n+Lec0Lvu0k9ZPKJSjPugikirw== + +playwright@1.58.0: + version "1.58.0" + resolved "https://registry.npmjs.org/playwright/-/playwright-1.58.0.tgz" + integrity sha512-2SVA0sbPktiIY/MCOPX8e86ehA/e+tDNq+e5Y8qjKYti2Z/JG7xnronT/TXTIkKbYGWlCbuucZ6dziEgkoEjQQ== + dependencies: + playwright-core "1.58.0" + optionalDependencies: + fsevents "2.3.2" + postcss-import@^15.1.0: version "15.1.0" resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz" From 305baa52b9f52c53e83ef5ed686e7242946b5747 Mon Sep 17 00:00:00 2001 From: Rayane Elmedjadji Date: Tue, 27 Jan 2026 16:45:39 +0100 Subject: [PATCH 3/7] fix tests --- packages/locuszoom/{tests => e2e}/example.spec.js | 0 packages/locuszoom/package.json | 4 +++- packages/locuszoom/playwright.config.js | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) rename packages/locuszoom/{tests => e2e}/example.spec.js (100%) diff --git a/packages/locuszoom/tests/example.spec.js b/packages/locuszoom/e2e/example.spec.js similarity index 100% rename from packages/locuszoom/tests/example.spec.js rename to packages/locuszoom/e2e/example.spec.js diff --git a/packages/locuszoom/package.json b/packages/locuszoom/package.json index d3479ca7..67697eb0 100644 --- a/packages/locuszoom/package.json +++ b/packages/locuszoom/package.json @@ -11,7 +11,9 @@ "build": "vite build", "preview": "vite preview", "prettier": "prettier --config ./prettier.config.js --write 'package.json' '**/*.{js,jsx,ts,tsx,json,css,md,vue}'", - "test": "vitest --run", + "test": "npm run test:unit && npm run test:e2e", + "test:e2e": "npx playwright test", + "test:unit": "vitest run", "test:watch": "vitest --watch", "test:ui": "vitest --ui" }, diff --git a/packages/locuszoom/playwright.config.js b/packages/locuszoom/playwright.config.js index 3967e588..12027b49 100644 --- a/packages/locuszoom/playwright.config.js +++ b/packages/locuszoom/playwright.config.js @@ -13,7 +13,7 @@ import { defineConfig, devices } from '@playwright/test'; * @see https://playwright.dev/docs/test-configuration */ export default defineConfig({ - testDir: './tests', + testDir: './e2e', /* Run tests in files in parallel */ fullyParallel: true, /* Fail the build on CI if you accidentally left test.only in the source code. */ From ed7563b83d194b4276140d77802d29151c56cf86 Mon Sep 17 00:00:00 2001 From: Rayane Elmedjadji Date: Wed, 28 Jan 2026 13:00:55 +0100 Subject: [PATCH 4/7] Fix playwright testing for locuszoom --- packages/locuszoom/.gitignore | 1 + packages/locuszoom/e2e/example.spec.js | 27 ++++++++++++------ packages/locuszoom/src/Plugin.vue | 18 ++++++++++-- packages/locuszoom/src/main.js | 4 +-- packages/locuszoom/test-data/weird.gwas_bgzip | Bin 0 -> 8349 bytes .../locuszoom/test-data/weird.gwas_bgzip.tbi | Bin 0 -> 156 bytes 6 files changed, 37 insertions(+), 13 deletions(-) create mode 100644 packages/locuszoom/test-data/weird.gwas_bgzip create mode 100644 packages/locuszoom/test-data/weird.gwas_bgzip.tbi diff --git a/packages/locuszoom/.gitignore b/packages/locuszoom/.gitignore index 3a915b13..0c5b4094 100644 --- a/packages/locuszoom/.gitignore +++ b/packages/locuszoom/.gitignore @@ -23,3 +23,4 @@ yarn-error.log* /blob-report/ /playwright/.cache/ /playwright/.auth/ +/.github/ diff --git a/packages/locuszoom/e2e/example.spec.js b/packages/locuszoom/e2e/example.spec.js index dc94251c..cafb7f6d 100644 --- a/packages/locuszoom/e2e/example.spec.js +++ b/packages/locuszoom/e2e/example.spec.js @@ -2,15 +2,26 @@ import { test, expect } from '@playwright/test'; test('Run plot', async ({ page }) => { - await page.goto('http://localhost:5173/'); + + // Test variables + + const URL = 'http://localhost:5173/'; + const CHR_INPUT = 'raya560ne.2.1.2'; // a chromosome + const POINT = '#lz-plot_association_associationpvalues_-RAYA560NE21261284_TC' // a point in the plot + const POINT_LOCATOR = page.locator(POINT); + const PHENO_STAT = '×phenRAYA560NE.2.1.2:61284_T/'; // stats' table for the point + const PHENO_STAT_TO_CLICK = page.getByText(PHENO_STAT) + + // Test execution + + await page.goto(URL); await page.getByRole('button').click(); - await page.getByRole('textbox', { name: 'Please Input' }).nth(1).fill('chr1'); - await expect(page.locator('#lz-plot_association_associationpvalues_-161284_TC')).toBeVisible(); - await page.locator('#lz-plot_association_associationpvalues_-161284_TC').click(); - await page.getByText('×phen1:61284_T/C P Value: 4.').click(); - await expect(page.getByText('×phen1:61284_T/C P Value: 4.')).toBeVisible(); + await page.getByRole('textbox', { name: 'Please Input' }).nth(1).fill(CHR_INPUT); + await expect(POINT_LOCATOR).toBeVisible(); + await POINT_LOCATOR.click(); + await PHENO_STAT_TO_CLICK.click(); + await expect(PHENO_STAT_TO_CLICK).toBeVisible(); await page.getByRole('button', { name: '×' }).click(); - await expect(page.getByText('×phen1:61284_T/C P Value: 4.')).toBeHidden(); - await page.getByRole('textbox', { name: 'Please Input' }).nth(1).click(); + await expect(PHENO_STAT_TO_CLICK).toBeHidden(); }); diff --git a/packages/locuszoom/src/Plugin.vue b/packages/locuszoom/src/Plugin.vue index c9255ed8..e7f726a2 100644 --- a/packages/locuszoom/src/Plugin.vue +++ b/packages/locuszoom/src/Plugin.vue @@ -160,7 +160,19 @@ const props = defineProps({ const errorMessage = ref(""); +function getURLs(primaryID, secondaryID) { + if (primaryID==="testingDataset"){ + return ["http://localhost:5173/test-data/weird.gwas_bgzip","http://localhost:5173/test-data/weird.gwas_bgzip.tbi"] + } + else { + return [`${props.root}api/datasets/${primaryID}/display`,`${props.root}api/datasets/${secondaryID}/display`] + } + +} + +const datasetURLs = getURLs(props.datasetId, props.settings.tabix?.id); function render() { + const datasetURLs = getURLs(props.datasetId, props.settings.tabix?.id); const id = props.settings.tabix?.id; const chrIn = props.settings.chromosome; const startIn = props.settings.start; @@ -173,7 +185,7 @@ function render() { const is_neg_log_pvalue = props.settings.is_neg_log_pvalue; const beta_col = props.settings.beta_col; const stderr_beta_col = props.settings.stderr_beta_col; - if (!id) { + if (datasetURLs[1]==="/api/datasets/undefined/display") { errorMessage.value = "Please select a Tabix file."; return; } @@ -199,8 +211,8 @@ function render() { let data_sources = new LocusZoom.DataSources().add("assoc", [ "TabixUrlSource", { - url_data: `${props.root}api/datasets/${props.datasetId}/display`, - url_tbi: `${props.root}api/datasets/${id}/display`, + url_data: datasetURLs[0], + url_tbi: datasetURLs[1], parser_func: gwasParser, overfetch: 0, }, diff --git a/packages/locuszoom/src/main.js b/packages/locuszoom/src/main.js index 3ee84888..5c2ee4a2 100644 --- a/packages/locuszoom/src/main.js +++ b/packages/locuszoom/src/main.js @@ -11,10 +11,10 @@ async function main() { // Construct the incoming data object with mock configuration and data const dataIncoming = { visualization_config: { - dataset_id: "0a248a1f62a0cc04", // id of primary_dataset.bgzip + dataset_id: process.env.dataset_id || "testingDataset", // id of primary_dataset.bgzip // Placeholder for additional visualization settings settings: { - tabix: { id: "03501d7626bd192f" }, // id of secondary_dataset.tbi + tabix: {}, // id of secondary_dataset.tbi }, }, // Parse and load the visualization XML configuration diff --git a/packages/locuszoom/test-data/weird.gwas_bgzip b/packages/locuszoom/test-data/weird.gwas_bgzip new file mode 100644 index 0000000000000000000000000000000000000000..1ab67f8b24cb1d36330347ae21140f86d5b91b74 GIT binary patch literal 8349 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 literal 0 HcmV?d00001 diff --git a/packages/locuszoom/test-data/weird.gwas_bgzip.tbi b/packages/locuszoom/test-data/weird.gwas_bgzip.tbi new file mode 100644 index 0000000000000000000000000000000000000000..547826f6b6a4b8ab9801c0462cc65961d093f231 GIT binary patch literal 156 zcmb2|=3rp}f&Xj_PR>jW^$gsFpHfm%8W;r5vK&1XV92PT=e5Si#MJnN_f_Ld##fA! z5}3OxeVbM|H@LA1ygYZJfoV^x!m~pMqRcqnGK;oB literal 0 HcmV?d00001 From c4ffd6dd0f1ef25eb53aa72d3e070a8209f71b84 Mon Sep 17 00:00:00 2001 From: Rayane Elmedjadji Date: Wed, 28 Jan 2026 13:03:45 +0100 Subject: [PATCH 5/7] Remove YAML file in locuszoom --- .../.github/workflows/playwright.yml | 27 ------------------- 1 file changed, 27 deletions(-) delete mode 100644 packages/locuszoom/.github/workflows/playwright.yml diff --git a/packages/locuszoom/.github/workflows/playwright.yml b/packages/locuszoom/.github/workflows/playwright.yml deleted file mode 100644 index 3eb13143..00000000 --- a/packages/locuszoom/.github/workflows/playwright.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Playwright Tests -on: - push: - branches: [ main, master ] - pull_request: - branches: [ main, master ] -jobs: - test: - timeout-minutes: 60 - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: lts/* - - name: Install dependencies - run: npm ci - - name: Install Playwright Browsers - run: npx playwright install --with-deps - - name: Run Playwright tests - run: npx playwright test - - uses: actions/upload-artifact@v4 - if: ${{ !cancelled() }} - with: - name: playwright-report - path: playwright-report/ - retention-days: 30 From 0589320724806ec61bdcfce3da444319ec136515 Mon Sep 17 00:00:00 2001 From: Rayane Elmedjadji Date: Wed, 28 Jan 2026 14:19:26 +0100 Subject: [PATCH 6/7] minimal playwright config for locuszoom --- packages/locuszoom/playwright.config.js | 83 ++----------------------- packages/locuszoom/src/Plugin.vue | 36 ++++++++--- packages/locuszoom/src/main.js | 2 +- 3 files changed, 34 insertions(+), 87 deletions(-) diff --git a/packages/locuszoom/playwright.config.js b/packages/locuszoom/playwright.config.js index 12027b49..307c3d9e 100644 --- a/packages/locuszoom/playwright.config.js +++ b/packages/locuszoom/playwright.config.js @@ -1,81 +1,10 @@ -// @ts-check -import { defineConfig, devices } from '@playwright/test'; +import { defineConfig } from "@playwright/test"; -/** - * Read environment variables from file. - * https://github.com/motdotla/dotenv - */ -// import dotenv from 'dotenv'; -// import path from 'path'; -// dotenv.config({ path: path.resolve(__dirname, '.env') }); - -/** - * @see https://playwright.dev/docs/test-configuration - */ export default defineConfig({ - testDir: './e2e', - /* Run tests in files in parallel */ - fullyParallel: true, - /* Fail the build on CI if you accidentally left test.only in the source code. */ - forbidOnly: !!process.env.CI, - /* Retry on CI only */ - retries: process.env.CI ? 2 : 0, - /* Opt out of parallel tests on CI. */ - workers: process.env.CI ? 1 : undefined, - /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: 'html', - /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ - use: { - /* Base URL to use in actions like `await page.goto('')`. */ - // baseURL: 'http://localhost:3000', - - /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: 'on-first-retry', - }, - - /* Configure projects for major browsers */ - projects: [ - { - name: 'chromium', - use: { ...devices['Desktop Chrome'] }, + testIgnore: ["src/**"], + timeout: 120000, // 120 seconds per test + use: { + headless: !!process.env.CI, }, - - { - name: 'firefox', - use: { ...devices['Desktop Firefox'] }, - }, - - { - name: 'webkit', - use: { ...devices['Desktop Safari'] }, - }, - - /* Test against mobile viewports. */ - // { - // name: 'Mobile Chrome', - // use: { ...devices['Pixel 5'] }, - // }, - // { - // name: 'Mobile Safari', - // use: { ...devices['iPhone 12'] }, - // }, - - /* Test against branded browsers. */ - // { - // name: 'Microsoft Edge', - // use: { ...devices['Desktop Edge'], channel: 'msedge' }, - // }, - // { - // name: 'Google Chrome', - // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, - // }, - ], - - /* Run your local dev server before starting the tests */ - // webServer: { - // command: 'npm run start', - // url: 'http://localhost:3000', - // reuseExistingServer: !process.env.CI, - // }, + snapshotPathTemplate: "{testDir}/test-data/{arg}.png", }); - diff --git a/packages/locuszoom/src/Plugin.vue b/packages/locuszoom/src/Plugin.vue index e7f726a2..6fcd6fc5 100644 --- a/packages/locuszoom/src/Plugin.vue +++ b/packages/locuszoom/src/Plugin.vue @@ -10,6 +10,10 @@ LocusZoom.use(LzTabixSource); const TabixUrlSource = LocusZoom.Adapters.get("TabixUrlSource"); +// Test files paths + +const BGZIP_PRIMARY_DATASET_PATH = "http://localhost:5173/test-data/weird.gwas_bgzip"; +const TABIX_SECONDARY_DATASET_PATH = "http://localhost:5173/test-data/weird.gwas_bgzip.tbi"; // Patch URLFetchable prototype by accessing it through a reader instance let hasURLFetchablePrototypeBeenPatched = false; @@ -160,19 +164,33 @@ const props = defineProps({ const errorMessage = ref(""); -function getURLs(primaryID, secondaryID) { - if (primaryID==="testingDataset"){ - return ["http://localhost:5173/test-data/weird.gwas_bgzip","http://localhost:5173/test-data/weird.gwas_bgzip.tbi"] +// Functions to retrieve URLs + +function getPrimaryURL(root,primaryID) { + if (primaryID==="__test__"){ + return BGZIP_PRIMARY_DATASET_PATH; + } + else { + return `${root}api/datasets/${primaryID}/display`; + } + +} +function getSecondaryURL(root,primaryID, secondaryID) { + if (primaryID==="__test__"){ + return TABIX_SECONDARY_DATASET_PATH; } else { - return [`${props.root}api/datasets/${primaryID}/display`,`${props.root}api/datasets/${secondaryID}/display`] + return `${root}api/datasets/${secondaryID}/display`; } } -const datasetURLs = getURLs(props.datasetId, props.settings.tabix?.id); +const bgzipURL = getPrimaryURL(props.root,props.datasetId); +const tabixURL = getSecondaryURL(props.root,props.datasetId, props.settings.tabix?.id); + function render() { - const datasetURLs = getURLs(props.datasetId, props.settings.tabix?.id); + const bgzipURL = getPrimaryURL(props.root,props.datasetId); + const tabixURL = getSecondaryURL(props.root,props.datasetId, props.settings.tabix?.id); const id = props.settings.tabix?.id; const chrIn = props.settings.chromosome; const startIn = props.settings.start; @@ -185,7 +203,7 @@ function render() { const is_neg_log_pvalue = props.settings.is_neg_log_pvalue; const beta_col = props.settings.beta_col; const stderr_beta_col = props.settings.stderr_beta_col; - if (datasetURLs[1]==="/api/datasets/undefined/display") { + if (tabixURL.includes("/api/datasets/undefined/display")) { errorMessage.value = "Please select a Tabix file."; return; } @@ -211,8 +229,8 @@ function render() { let data_sources = new LocusZoom.DataSources().add("assoc", [ "TabixUrlSource", { - url_data: datasetURLs[0], - url_tbi: datasetURLs[1], + url_data: bgzipURL, + url_tbi: tabixURL, parser_func: gwasParser, overfetch: 0, }, diff --git a/packages/locuszoom/src/main.js b/packages/locuszoom/src/main.js index 5c2ee4a2..93fa5e61 100644 --- a/packages/locuszoom/src/main.js +++ b/packages/locuszoom/src/main.js @@ -11,7 +11,7 @@ async function main() { // Construct the incoming data object with mock configuration and data const dataIncoming = { visualization_config: { - dataset_id: process.env.dataset_id || "testingDataset", // id of primary_dataset.bgzip + dataset_id: process.env.dataset_id || "__test__", // id of primary_dataset.bgzip // Placeholder for additional visualization settings settings: { tabix: {}, // id of secondary_dataset.tbi From c769a6a52afd07ab6f26b08ca81d75526c9a2b8a Mon Sep 17 00:00:00 2001 From: Rayane Elmedjadji Date: Wed, 28 Jan 2026 14:22:50 +0100 Subject: [PATCH 7/7] remove useless comments --- packages/locuszoom/src/Plugin.vue | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/locuszoom/src/Plugin.vue b/packages/locuszoom/src/Plugin.vue index 6fcd6fc5..b0950888 100644 --- a/packages/locuszoom/src/Plugin.vue +++ b/packages/locuszoom/src/Plugin.vue @@ -14,6 +14,7 @@ const TabixUrlSource = LocusZoom.Adapters.get("TabixUrlSource"); const BGZIP_PRIMARY_DATASET_PATH = "http://localhost:5173/test-data/weird.gwas_bgzip"; const TABIX_SECONDARY_DATASET_PATH = "http://localhost:5173/test-data/weird.gwas_bgzip.tbi"; + // Patch URLFetchable prototype by accessing it through a reader instance let hasURLFetchablePrototypeBeenPatched = false; @@ -175,6 +176,7 @@ function getPrimaryURL(root,primaryID) { } } + function getSecondaryURL(root,primaryID, secondaryID) { if (primaryID==="__test__"){ return TABIX_SECONDARY_DATASET_PATH; @@ -185,9 +187,6 @@ function getSecondaryURL(root,primaryID, secondaryID) { } -const bgzipURL = getPrimaryURL(props.root,props.datasetId); -const tabixURL = getSecondaryURL(props.root,props.datasetId, props.settings.tabix?.id); - function render() { const bgzipURL = getPrimaryURL(props.root,props.datasetId); const tabixURL = getSecondaryURL(props.root,props.datasetId, props.settings.tabix?.id);