loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request 'Update dependency eslint-plugin-playwright to v2 (forgejo)' (#5669) from renovate/forgejo-eslint-plugin-playwright-2.x into forgejo

+40 -44
+2
eslint.config.mjs
··· 1125 1125 allowConditional: true, 1126 1126 }, 1127 1127 ], 1128 + 'playwright/no-useless-await': [2], 1128 1129 1129 1130 'playwright/prefer-comparison-matcher': [2], 1130 1131 'playwright/prefer-equality-matcher': [2], 1132 + 'playwright/prefer-native-locators': [2], 1131 1133 'playwright/prefer-to-contain': [2], 1132 1134 'playwright/prefer-to-have-length': [2], 1133 1135 'playwright/require-to-throw-message': [2],
+5 -11
package-lock.json
··· 75 75 "eslint-plugin-import-x": "4.3.1", 76 76 "eslint-plugin-no-jquery": "3.0.2", 77 77 "eslint-plugin-no-use-extend-native": "0.5.0", 78 - "eslint-plugin-playwright": "1.6.2", 78 + "eslint-plugin-playwright": "2.0.0", 79 79 "eslint-plugin-regexp": "2.6.0", 80 80 "eslint-plugin-sonarjs": "2.0.3", 81 81 "eslint-plugin-unicorn": "56.0.0", ··· 8294 8294 } 8295 8295 }, 8296 8296 "node_modules/eslint-plugin-playwright": { 8297 - "version": "1.6.2", 8298 - "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-1.6.2.tgz", 8299 - "integrity": "sha512-mraN4Em3b5jLt01q7qWPyLg0Q5v3KAWfJSlEWwldyUXoa7DSPrBR4k6B6LROLqipsG8ndkwWMdjl1Ffdh15tag==", 8297 + "version": "2.0.0", 8298 + "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-2.0.0.tgz", 8299 + "integrity": "sha512-nPa44nSp48mp/U+GSneabrhlyIyGvrcv+Z14u6sgno+jX8N0bH+ooSLEC1L6dvMDSHs7tj+kMIbls3l8gCJJSg==", 8300 8300 "dev": true, 8301 8301 "license": "MIT", 8302 8302 "workspaces": [ ··· 8309 8309 "node": ">=16.6.0" 8310 8310 }, 8311 8311 "peerDependencies": { 8312 - "eslint": ">=8.40.0", 8313 - "eslint-plugin-jest": ">=25" 8314 - }, 8315 - "peerDependenciesMeta": { 8316 - "eslint-plugin-jest": { 8317 - "optional": true 8318 - } 8312 + "eslint": ">=8.40.0" 8319 8313 } 8320 8314 }, 8321 8315 "node_modules/eslint-plugin-playwright/node_modules/globals": {
+1 -1
package.json
··· 74 74 "eslint-plugin-import-x": "4.3.1", 75 75 "eslint-plugin-no-jquery": "3.0.2", 76 76 "eslint-plugin-no-use-extend-native": "0.5.0", 77 - "eslint-plugin-playwright": "1.6.2", 77 + "eslint-plugin-playwright": "2.0.0", 78 78 "eslint-plugin-regexp": "2.6.0", 79 79 "eslint-plugin-sonarjs": "2.0.3", 80 80 "eslint-plugin-unicorn": "56.0.0",
+1 -1
tests/e2e/dashboard-ci-status.test.e2e.js
··· 15 15 const context = await load_logged_in_context(browser, workerInfo, 'user2'); 16 16 const page = await context.newPage(); 17 17 const response = await page.goto('/?repo-search-query=test_workflows'); 18 - await expect(response?.status()).toBe(200); 18 + expect(response?.status()).toBe(200); 19 19 20 20 await page.waitForLoadState('networkidle'); 21 21
+3 -3
tests/e2e/example.test.e2e.js
··· 15 15 16 16 test('Load Homepage', async ({page}) => { 17 17 const response = await page.goto('/'); 18 - await expect(response?.status()).toBe(200); // Status OK 18 + expect(response?.status()).toBe(200); // Status OK 19 19 await expect(page).toHaveTitle(/^Forgejo: Beyond coding. We Forge.\s*$/); 20 20 await expect(page.locator('.logo')).toHaveAttribute('src', '/assets/img/logo.svg'); 21 21 }); 22 22 23 23 test('Register Form', async ({page}, workerInfo) => { 24 24 const response = await page.goto('/user/sign_up'); 25 - await expect(response?.status()).toBe(200); // Status OK 25 + expect(response?.status()).toBe(200); // Status OK 26 26 await page.type('input[name=user_name]', `e2e-test-${workerInfo.workerIndex}`); 27 27 await page.type('input[name=email]', `e2e-test-${workerInfo.workerIndex}@test.com`); 28 28 await page.type('input[name=password]', 'test123test123'); 29 29 await page.type('input[name=retype]', 'test123test123'); 30 30 await page.click('form button.ui.primary.button:visible'); 31 31 // Make sure we routed to the home page. Else login failed. 32 - await expect(page.url()).toBe(`${workerInfo.project.use.baseURL}/`); 32 + expect(page.url()).toBe(`${workerInfo.project.use.baseURL}/`); 33 33 await expect(page.locator('.secondary-nav span>img.ui.avatar')).toBeVisible(); 34 34 await expect(page.locator('.ui.positive.message.flash-success')).toHaveText('Account was successfully created. Welcome!'); 35 35
+1 -1
tests/e2e/explore.test.e2e.js
··· 42 42 break; 43 43 } 44 44 } 45 - await expect(res).toBe(exp); 45 + expect(res).toBe(exp); 46 46 });
+1 -1
tests/e2e/issue-comment.test.e2e.js
··· 49 49 test('Always focus edit tab first on edit', async ({browser}, workerInfo) => { 50 50 const page = await login({browser}, workerInfo); 51 51 const response = await page.goto('/user2/repo1/issues/1'); 52 - await expect(response?.status()).toBe(200); 52 + expect(response?.status()).toBe(200); 53 53 54 54 // Switch to preview tab and save 55 55 await page.click('#issue-1 .comment-container .context-menu');
+6 -6
tests/e2e/issue-sidebar.test.e2e.js
··· 39 39 test.skip(workerInfo.project.name === 'Mobile Safari', 'Unable to get tests working on Safari Mobile, see https://codeberg.org/forgejo/forgejo/pulls/3445#issuecomment-1789636'); 40 40 const page = await login({browser}, workerInfo); 41 41 const response = await page.goto('/user2/repo1/pulls/5'); 42 - await expect(response?.status()).toBe(200); // Status OK 42 + expect(response?.status()).toBe(200); // Status OK 43 43 // initial state 44 44 await check_wip({page}, false); 45 45 // toggle to WIP ··· 82 82 // select label list in sidebar only 83 83 const labelList = page.locator('.issue-content-right .labels-list a'); 84 84 const response = await page.goto('/user2/repo1/issues/1'); 85 - await expect(response?.status()).toBe(200); 85 + expect(response?.status()).toBe(200); 86 86 // preconditions 87 87 await expect(labelList.filter({hasText: 'label1'})).toBeVisible(); 88 88 await expect(labelList.filter({hasText: 'label2'})).toBeHidden(); ··· 110 110 const assigneesList = page.locator('.issue-content-right .assignees.list .selected .item a'); 111 111 112 112 const response = await page.goto('/org3/repo3/issues/1'); 113 - await expect(response?.status()).toBe(200); 113 + expect(response?.status()).toBe(200); 114 114 // preconditions 115 115 await expect(assigneesList.filter({hasText: 'user2'})).toBeVisible(); 116 116 await expect(assigneesList.filter({hasText: 'user4'})).toBeHidden(); ··· 153 153 const assigneesList = page.locator('.issue-content-right .assignees.list .selected .item'); 154 154 155 155 const response = await page.goto('/org3/repo3/issues/new'); 156 - await expect(response?.status()).toBe(200); 156 + expect(response?.status()).toBe(200); 157 157 // preconditions 158 158 await expect(page.locator('.ui.assignees.list .item.no-select')).toBeVisible(); 159 159 await expect(assigneesList.filter({hasText: 'user2'})).toBeHidden(); ··· 191 191 const page = await login({browser}, workerInfo); 192 192 193 193 const response = await page.goto('/user2/repo1/issues/1'); 194 - await expect(response?.status()).toBe(200); 194 + expect(response?.status()).toBe(200); 195 195 196 196 const selectedMilestone = page.locator('.issue-content-right .select-milestone.list'); 197 197 const milestoneDropdown = page.locator('.issue-content-right .select-milestone.dropdown'); ··· 215 215 const page = await login({browser}, workerInfo); 216 216 217 217 const response = await page.goto('/user2/repo1/issues/new'); 218 - await expect(response?.status()).toBe(200); 218 + expect(response?.status()).toBe(200); 219 219 220 220 const selectedMilestone = page.locator('.issue-content-right .select-milestone.list'); 221 221 const milestoneDropdown = page.locator('.issue-content-right .select-milestone.dropdown');
+2 -2
tests/e2e/markdown-editor.test.e2e.js
··· 19 19 20 20 const page = await context.newPage(); 21 21 const response = await page.goto('/user2/repo1/issues/new'); 22 - await expect(response?.status()).toBe(200); 22 + expect(response?.status()).toBe(200); 23 23 24 24 const textarea = page.locator('textarea[name=content]'); 25 25 const tab = ' '; ··· 92 92 93 93 const page = await context.newPage(); 94 94 const response = await page.goto('/user2/repo1/issues/new'); 95 - await expect(response?.status()).toBe(200); 95 + expect(response?.status()).toBe(200); 96 96 97 97 const textarea = page.locator('textarea[name=content]'); 98 98 const tab = ' ';
+1 -1
tests/e2e/markup.test.e2e.js
··· 9 9 10 10 test('markup with #xyz-mode-only', async ({page}) => { 11 11 const response = await page.goto('/user2/repo1/issues/1'); 12 - await expect(response?.status()).toBe(200); 12 + expect(response?.status()).toBe(200); 13 13 await page.waitForLoadState('networkidle'); 14 14 15 15 const comment = page.locator('.comment-body>.markup', {hasText: 'test markup light/dark-mode-only'});
+1 -1
tests/e2e/org-settings.test.e2e.js
··· 18 18 test.skip(workerInfo.project.name === 'Mobile Safari', 'Cannot get it to work - as usual'); 19 19 const page = await login({browser}, workerInfo); 20 20 const response = await page.goto('/org/org3/teams/team1/edit'); 21 - await expect(response?.status()).toBe(200); 21 + expect(response?.status()).toBe(200); 22 22 23 23 await page.locator('input[name="permission"][value="admin"]').click(); 24 24 await expect(page.locator('.hide-unless-checked')).toBeHidden();
+1 -1
tests/e2e/reaction-selectors.test.e2e.js
··· 42 42 const page = await context.newPage(); 43 43 44 44 const response = await page.goto('/user2/repo1/issues/1'); 45 - await expect(response?.status()).toBe(200); 45 + expect(response?.status()).toBe(200); 46 46 47 47 const comment = page.locator('.comment#issuecomment-2').first(); 48 48
+2 -2
tests/e2e/repo-code.test.e2e.js
··· 42 42 const filePath = '/user2/repo1/src/branch/master/README.md?display=source'; 43 43 44 44 const response = await page.goto(filePath); 45 - await expect(response?.status()).toBe(200); 45 + expect(response?.status()).toBe(200); 46 46 47 47 await assertSelectedLines(page, []); 48 48 await page.locator('span#L1').click(); ··· 72 72 ]; 73 73 for (const thisDiff of expectedDiffs) { 74 74 const response = await page.goto('/user2/diff-test/commits/branch/main'); 75 - await expect(response?.status()).toBe(200); // Status OK 75 + expect(response?.status()).toBe(200); // Status OK 76 76 await page.getByText(`Patch: ${thisDiff.id}`).click(); 77 77 if (thisDiff.removed) { 78 78 await expect(page.getByText(thisDiff.removed, {exact: true})).toHaveClass(/removed-code/);
+1 -1
tests/e2e/repo-commitgraph.test.e2e.js
··· 24 24 const context = await load_logged_in_context(browser, workerInfo, 'user2'); 25 25 const page = await context.newPage(); 26 26 const response = await page.goto('/user2/repo1/graph'); 27 - await expect(response?.status()).toBe(200); 27 + expect(response?.status()).toBe(200); 28 28 29 29 await page.click('#flow-select-refs-dropdown'); 30 30 const input = page.locator('#flow-select-refs-dropdown');
+2 -2
tests/e2e/repo-migrate.test.e2e.js
··· 14 14 15 15 const page = await (await load_logged_in_context(browser, workerInfo, 'user2')).newPage(); 16 16 17 - await expect((await page.goto('/user2/invalidrepo'))?.status(), 'repo should not exist yet').toBe(404); 17 + expect((await page.goto('/user2/invalidrepo'))?.status(), 'repo should not exist yet').toBe(404); 18 18 19 19 await page.goto('/repo/migrate?service_type=1'); 20 20 ··· 24 24 await form.locator('button.primary').click({timeout: 5000}); 25 25 await expect(page).toHaveURL('user2/invalidrepo'); 26 26 27 - await expect((await unauthedPage.goto('/user2/invalidrepo'))?.status(), 'public migration page should be accessible').toBe(200); 27 + expect((await unauthedPage.goto('/user2/invalidrepo'))?.status(), 'public migration page should be accessible').toBe(200); 28 28 await expect(unauthedPage.locator('#repo_migrating_progress')).toBeVisible(); 29 29 30 30 await page.reload();
+2 -2
tests/e2e/repo-settings.test.e2e.js
··· 20 20 test.skip(workerInfo.project.name === 'Mobile Safari', 'Cannot get it to work - as usual'); 21 21 const page = await login({browser}, workerInfo); 22 22 const response = await page.goto('/user2/repo1/settings/hooks/forgejo/new'); 23 - await expect(response?.status()).toBe(200); 23 + expect(response?.status()).toBe(200); 24 24 25 25 await page.locator('input[name="events"][value="choose_events"]').click(); 26 26 await expect(page.locator('.hide-unless-checked')).toBeVisible(); ··· 39 39 test.skip(workerInfo.project.name === 'Mobile Safari', 'Cannot get it to work - as usual'); 40 40 const page = await login({browser}, workerInfo); 41 41 const response = await page.goto('/user2/repo1/settings/branches/edit'); 42 - await expect(response?.status()).toBe(200); 42 + expect(response?.status()).toBe(200); 43 43 44 44 await validate_form({page}, 'fieldset'); 45 45
+3 -3
tests/e2e/shared/forms.js
··· 26 26 // might be necessary to adjust in case colons are strictly necessary in help text 27 27 for (const l of await page.locator('label').all()) { 28 28 const str = await l.textContent(); 29 - await expect(str.split('\n')[0]).not.toContain(':'); 29 + expect(str.split('\n')[0]).not.toContain(':'); 30 30 } 31 31 32 32 // check that multiple help text are correctly aligned to each other ··· 36 36 const boxes = await Promise.all(helpLabels.map((help) => help.boundingBox())); 37 37 for (let i = 1; i < boxes.length; i++) { 38 38 // help texts vertically aligned on top of each other 39 - await expect(boxes[i].x).toBe(boxes[0].x); 39 + expect(boxes[i].x).toBe(boxes[0].x); 40 40 // help texts don't horizontally intersect each other 41 - await expect(boxes[i].y + boxes[i].height).toBeGreaterThanOrEqual(boxes[i - 1].y + boxes[i - 1].height); 41 + expect(boxes[i].y + boxes[i].height).toBeGreaterThanOrEqual(boxes[i - 1].y + boxes[i - 1].height); 42 42 } 43 43 } 44 44 }
+2 -2
tests/e2e/utils_e2e.js
··· 30 30 // Route to login page 31 31 // Note: this could probably be done more quickly with a POST 32 32 const response = await page.goto('/user/login'); 33 - await expect(response?.status()).toBe(200); // Status OK 33 + expect(response?.status()).toBe(200); // Status OK 34 34 35 35 // Fill out form 36 36 await page.type('input[name=user_name]', user); ··· 39 39 40 40 await page.waitForLoadState('networkidle'); 41 41 42 - await expect(page.url(), {message: `Failed to login user ${user}`}).toBe(`${workerInfo.project.use.baseURL}/`); 42 + expect(page.url(), {message: `Failed to login user ${user}`}).toBe(`${workerInfo.project.use.baseURL}/`); 43 43 44 44 // Save state 45 45 await context.storageState({path: `${ARTIFACTS_PATH}/state-${user}-${workerInfo.workerIndex}.json`});
+3 -3
tests/e2e/webauthn.test.e2e.js
··· 18 18 19 19 // Register a security key. 20 20 let response = await page.goto('/user/settings/security'); 21 - await expect(response?.status()).toBe(200); 21 + expect(response?.status()).toBe(200); 22 22 23 23 // https://github.com/microsoft/playwright/issues/7276#issuecomment-1516768428 24 24 const cdpSession = await page.context().newCDPSession(page); ··· 45 45 46 46 // Login. 47 47 response = await page.goto('/user/login'); 48 - await expect(response?.status()).toBe(200); 48 + expect(response?.status()).toBe(200); 49 49 50 50 await page.getByLabel('Username or email address').fill(username); 51 51 await page.getByLabel('Password').fill('password'); ··· 55 55 56 56 // Cleanup. 57 57 response = await page.goto('/user/settings/security'); 58 - await expect(response?.status()).toBe(200); 58 + expect(response?.status()).toBe(200); 59 59 await page.getByRole('button', {name: 'Remove'}).click(); 60 60 await page.getByRole('button', {name: 'Yes'}).click(); 61 61 await page.waitForURL(`${workerInfo.project.use.baseURL}/user/settings/security`);