Update linters (forgejo) (#11627)

Co-authored-by: Renovate Bot <bot@kriese.eu>
Co-committed-by: Renovate Bot <bot@kriese.eu>
This commit is contained in:
Renovate Bot 2026-03-12 18:27:43 +01:00 committed by viceice-bot
parent 9177e52cf4
commit 62c32f00e4
6 changed files with 79 additions and 78 deletions

View file

@ -1145,6 +1145,7 @@ export default tseslint.config(
'playwright/prefer-comparison-matcher': [2], 'playwright/prefer-comparison-matcher': [2],
'playwright/prefer-equality-matcher': [2], 'playwright/prefer-equality-matcher': [2],
'playwright/prefer-locator': [0],
'playwright/prefer-native-locators': [2], 'playwright/prefer-native-locators': [2],
'playwright/prefer-to-contain': [2], 'playwright/prefer-to-contain': [2],
'playwright/prefer-to-have-length': [2], 'playwright/prefer-to-have-length': [2],

94
package-lock.json generated
View file

@ -83,22 +83,22 @@
}, },
"devDependencies": { "devDependencies": {
"@axe-core/playwright": "4.11.0", "@axe-core/playwright": "4.11.0",
"@eslint-community/eslint-plugin-eslint-comments": "4.6.0", "@eslint-community/eslint-plugin-eslint-comments": "4.7.1",
"@playwright/test": "1.57.0", "@playwright/test": "1.57.0",
"@stoplight/spectral-cli": "6.15.0", "@stoplight/spectral-cli": "6.15.0",
"@stylistic/eslint-plugin": "5.9.0", "@stylistic/eslint-plugin": "5.10.0",
"@stylistic/stylelint-plugin": "4.0.1", "@stylistic/stylelint-plugin": "4.0.1",
"@vitejs/plugin-vue": "6.0.3", "@vitejs/plugin-vue": "6.0.3",
"@vitest/coverage-v8": "4.0.18", "@vitest/coverage-v8": "4.0.18",
"@vitest/eslint-plugin": "1.6.9", "@vitest/eslint-plugin": "1.6.9",
"@vue/test-utils": "2.4.6", "@vue/test-utils": "2.4.6",
"eslint": "9.39.3", "eslint": "9.39.4",
"eslint-import-resolver-typescript": "4.4.4", "eslint-import-resolver-typescript": "4.4.4",
"eslint-plugin-array-func": "5.1.0", "eslint-plugin-array-func": "5.1.1",
"eslint-plugin-import-x": "4.16.1", "eslint-plugin-import-x": "4.16.1",
"eslint-plugin-no-jquery": "3.1.1", "eslint-plugin-no-jquery": "3.1.1",
"eslint-plugin-no-use-extend-native": "0.7.2", "eslint-plugin-no-use-extend-native": "0.7.2",
"eslint-plugin-playwright": "2.8.0", "eslint-plugin-playwright": "2.9.0",
"eslint-plugin-regexp": "3.0.0", "eslint-plugin-regexp": "3.0.0",
"eslint-plugin-sonarjs": "3.0.7", "eslint-plugin-sonarjs": "3.0.7",
"eslint-plugin-toml": "0.13.1", "eslint-plugin-toml": "0.13.1",
@ -1387,9 +1387,9 @@
} }
}, },
"node_modules/@eslint-community/eslint-plugin-eslint-comments": { "node_modules/@eslint-community/eslint-plugin-eslint-comments": {
"version": "4.6.0", "version": "4.7.1",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-4.6.0.tgz", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-4.7.1.tgz",
"integrity": "sha512-2EX2bBQq1ez++xz2o9tEeEQkyvfieWgUFMH4rtJJri2q0Azvhja3hZGXsjPXs31R4fQkZDtWzNDDK2zQn5UE5g==", "integrity": "sha512-Ql2nJFwA8wUGpILYGOQaT1glPsmvEwE0d+a+l7AALLzQvInqdbXJdx7aSu0DpUX9dB1wMVBMhm99/++S3MdEtQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -1403,7 +1403,7 @@
"url": "https://opencollective.com/eslint" "url": "https://opencollective.com/eslint"
}, },
"peerDependencies": { "peerDependencies": {
"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0"
} }
}, },
"node_modules/@eslint-community/eslint-plugin-eslint-comments/node_modules/ignore": { "node_modules/@eslint-community/eslint-plugin-eslint-comments/node_modules/ignore": {
@ -1459,24 +1459,24 @@
} }
}, },
"node_modules/@eslint/config-array": { "node_modules/@eslint/config-array": {
"version": "0.21.1", "version": "0.21.2",
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz",
"integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@eslint/object-schema": "^2.1.7", "@eslint/object-schema": "^2.1.7",
"debug": "^4.3.1", "debug": "^4.3.1",
"minimatch": "^3.1.2" "minimatch": "^3.1.5"
}, },
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
} }
}, },
"node_modules/@eslint/config-array/node_modules/minimatch": { "node_modules/@eslint/config-array/node_modules/minimatch": {
"version": "3.1.2", "version": "3.1.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true, "dev": true,
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
@ -1513,20 +1513,20 @@
} }
}, },
"node_modules/@eslint/eslintrc": { "node_modules/@eslint/eslintrc": {
"version": "3.3.3", "version": "3.3.5",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz",
"integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"ajv": "^6.12.4", "ajv": "^6.14.0",
"debug": "^4.3.2", "debug": "^4.3.2",
"espree": "^10.0.1", "espree": "^10.0.1",
"globals": "^14.0.0", "globals": "^14.0.0",
"ignore": "^5.2.0", "ignore": "^5.2.0",
"import-fresh": "^3.2.1", "import-fresh": "^3.2.1",
"js-yaml": "^4.1.1", "js-yaml": "^4.1.1",
"minimatch": "^3.1.2", "minimatch": "^3.1.5",
"strip-json-comments": "^3.1.1" "strip-json-comments": "^3.1.1"
}, },
"engines": { "engines": {
@ -1537,9 +1537,9 @@
} }
}, },
"node_modules/@eslint/eslintrc/node_modules/ajv": { "node_modules/@eslint/eslintrc/node_modules/ajv": {
"version": "6.12.6", "version": "6.14.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -1574,9 +1574,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@eslint/eslintrc/node_modules/minimatch": { "node_modules/@eslint/eslintrc/node_modules/minimatch": {
"version": "3.1.2", "version": "3.1.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true, "dev": true,
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
@ -1587,9 +1587,9 @@
} }
}, },
"node_modules/@eslint/js": { "node_modules/@eslint/js": {
"version": "9.39.3", "version": "9.39.4",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.3.tgz", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz",
"integrity": "sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==", "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
@ -3789,9 +3789,9 @@
} }
}, },
"node_modules/@stylistic/eslint-plugin": { "node_modules/@stylistic/eslint-plugin": {
"version": "5.9.0", "version": "5.10.0",
"resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.9.0.tgz", "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.10.0.tgz",
"integrity": "sha512-FqqSkvDMYJReydrMhlugc71M76yLLQWNfmGq+SIlLa7N3kHp8Qq8i2PyWrVNAfjOyOIY+xv9XaaYwvVW7vroMA==", "integrity": "sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -7896,25 +7896,25 @@
} }
}, },
"node_modules/eslint": { "node_modules/eslint": {
"version": "9.39.3", "version": "9.39.4",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.3.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz",
"integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==", "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1", "@eslint-community/regexpp": "^4.12.1",
"@eslint/config-array": "^0.21.1", "@eslint/config-array": "^0.21.2",
"@eslint/config-helpers": "^0.4.2", "@eslint/config-helpers": "^0.4.2",
"@eslint/core": "^0.17.0", "@eslint/core": "^0.17.0",
"@eslint/eslintrc": "^3.3.1", "@eslint/eslintrc": "^3.3.5",
"@eslint/js": "9.39.3", "@eslint/js": "9.39.4",
"@eslint/plugin-kit": "^0.4.1", "@eslint/plugin-kit": "^0.4.1",
"@humanfs/node": "^0.16.6", "@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.2", "@humanwhocodes/retry": "^0.4.2",
"@types/estree": "^1.0.6", "@types/estree": "^1.0.6",
"ajv": "^6.12.4", "ajv": "^6.14.0",
"chalk": "^4.0.0", "chalk": "^4.0.0",
"cross-spawn": "^7.0.6", "cross-spawn": "^7.0.6",
"debug": "^4.3.2", "debug": "^4.3.2",
@ -7933,7 +7933,7 @@
"is-glob": "^4.0.0", "is-glob": "^4.0.0",
"json-stable-stringify-without-jsonify": "^1.0.1", "json-stable-stringify-without-jsonify": "^1.0.1",
"lodash.merge": "^4.6.2", "lodash.merge": "^4.6.2",
"minimatch": "^3.1.2", "minimatch": "^3.1.5",
"natural-compare": "^1.4.0", "natural-compare": "^1.4.0",
"optionator": "^0.9.3" "optionator": "^0.9.3"
}, },
@ -8032,9 +8032,9 @@
} }
}, },
"node_modules/eslint-plugin-array-func": { "node_modules/eslint-plugin-array-func": {
"version": "5.1.0", "version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-array-func/-/eslint-plugin-array-func-5.1.0.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-array-func/-/eslint-plugin-array-func-5.1.1.tgz",
"integrity": "sha512-+OULB0IQdENBmBf8pHMPPObgV6QyfeXFin483jPonOaiurI9UFmc8UydWriK5f5Gel8xBhQLA6NzMwbck1BUJw==", "integrity": "sha512-TbVGk+yLqXHgtrS4DnYzg2Ycuk5y+lYFy5NgT748neQdJvNIYUucxp2QQjPU7dwbs9xp9fyktgtK069y9rNdig==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
@ -8111,9 +8111,9 @@
} }
}, },
"node_modules/eslint-plugin-playwright": { "node_modules/eslint-plugin-playwright": {
"version": "2.8.0", "version": "2.9.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-2.8.0.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-2.9.0.tgz",
"integrity": "sha512-BRCXbnX20l/ZPOOi1jEqNvqU/UjXpkZRJaghQxSM2kjAvsDph8+osn9u1iMmvoa9Cegbp9d0Skh7vro7242t+Q==", "integrity": "sha512-k3xrG6YzrallWNFMoGUjMNeu3SFFKXN79KJQBD2PkM4PasJegqV2Up+mPY5od2UmPKQGT+MeIhCmWH8r5eYuQQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {

View file

@ -82,22 +82,22 @@
}, },
"devDependencies": { "devDependencies": {
"@axe-core/playwright": "4.11.0", "@axe-core/playwright": "4.11.0",
"@eslint-community/eslint-plugin-eslint-comments": "4.6.0", "@eslint-community/eslint-plugin-eslint-comments": "4.7.1",
"@playwright/test": "1.57.0", "@playwright/test": "1.57.0",
"@stoplight/spectral-cli": "6.15.0", "@stoplight/spectral-cli": "6.15.0",
"@stylistic/eslint-plugin": "5.9.0", "@stylistic/eslint-plugin": "5.10.0",
"@stylistic/stylelint-plugin": "4.0.1", "@stylistic/stylelint-plugin": "4.0.1",
"@vitejs/plugin-vue": "6.0.3", "@vitejs/plugin-vue": "6.0.3",
"@vitest/coverage-v8": "4.0.18", "@vitest/coverage-v8": "4.0.18",
"@vitest/eslint-plugin": "1.6.9", "@vitest/eslint-plugin": "1.6.9",
"@vue/test-utils": "2.4.6", "@vue/test-utils": "2.4.6",
"eslint": "9.39.3", "eslint": "9.39.4",
"eslint-import-resolver-typescript": "4.4.4", "eslint-import-resolver-typescript": "4.4.4",
"eslint-plugin-array-func": "5.1.0", "eslint-plugin-array-func": "5.1.1",
"eslint-plugin-import-x": "4.16.1", "eslint-plugin-import-x": "4.16.1",
"eslint-plugin-no-jquery": "3.1.1", "eslint-plugin-no-jquery": "3.1.1",
"eslint-plugin-no-use-extend-native": "0.7.2", "eslint-plugin-no-use-extend-native": "0.7.2",
"eslint-plugin-playwright": "2.8.0", "eslint-plugin-playwright": "2.9.0",
"eslint-plugin-regexp": "3.0.0", "eslint-plugin-regexp": "3.0.0",
"eslint-plugin-sonarjs": "3.0.7", "eslint-plugin-sonarjs": "3.0.7",
"eslint-plugin-toml": "0.13.1", "eslint-plugin-toml": "0.13.1",

View file

@ -18,6 +18,16 @@ import {validate_form} from './shared/forms.ts';
test.use({user: 'user2'}); test.use({user: 'user2'});
test.afterEach(async ({page}) => {
// Delete release
const response = await page.goto('/user2/repo2/releases/edit/2.0');
test.skip(response.status() === 404, 'No release to delete');
await page.locator('.delete-button').dispatchEvent('click');
await page.locator('.button.ok').click();
await expect(page).toHaveURL('/user2/repo2/releases');
});
test.describe('Releases', () => { test.describe('Releases', () => {
test('External release attachments', async ({page, isMobile}) => { test('External release attachments', async ({page, isMobile}) => {
test.skip(isMobile); test.skip(isMobile);
@ -142,14 +152,4 @@ test.describe('Releases', () => {
expect((await release.locator('.detail').boundingBox()).width).toBeLessThan(viewport.width * 0.75); expect((await release.locator('.detail').boundingBox()).width).toBeLessThan(viewport.width * 0.75);
} }
}); });
test.afterEach(async ({page}) => {
// Delete release
const response = await page.goto('/user2/repo2/releases/edit/2.0');
test.skip(response.status() === 404, 'No release to delete');
await page.locator('.delete-button').dispatchEvent('click');
await page.locator('.button.ok').click();
await expect(page).toHaveURL('/user2/repo2/releases');
});
}); });

View file

@ -44,7 +44,7 @@ test('Wiki unicode-escape', async ({page}) => {
await page.goto('/user2/unicode-escaping/wiki'); await page.goto('/user2/unicode-escaping/wiki');
await screenshot(page); await screenshot(page);
expect(await page.locator('.ui.message.unicode-escape-prompt').count()).toEqual(3); await expect(page.locator('.ui.message.unicode-escape-prompt')).toHaveCount(3);
const unescapedElements = page.locator('.ambiguous-code-point'); const unescapedElements = page.locator('.ambiguous-code-point');
for (let i = 0; i < await unescapedElements.count(); i++) { for (let i = 0; i < await unescapedElements.count(); i++) {

View file

@ -73,12 +73,12 @@ test.describe('small viewport', () => {
await expect(page.locator('.tippy-target>#settings-btn')).toBeVisible(); await expect(page.locator('.tippy-target>#settings-btn')).toBeVisible();
// Verify that we have no duplicated items // Verify that we have no duplicated items
const shownItems = await page.locator('.overflow-menu-items>a').all(); const shownItems = page.locator('.overflow-menu-items>a');
expect(shownItems).not.toHaveLength(0); await expect(shownItems).not.toHaveCount(0);
const overflowItems = await page.locator('.tippy-target>a').all(); const overflowItems = page.locator('.tippy-target>a');
expect(overflowItems).not.toHaveLength(0); await expect(overflowItems).not.toHaveCount(0);
const items = shownItems.concat(overflowItems); const items = (await shownItems.all()).concat(overflowItems);
expect(Array.from(new Set(items))).toHaveLength(items.length); expect(Array.from(new Set(items))).toHaveLength(items.length);
await screenshot(page); await screenshot(page);
}); });
@ -94,12 +94,12 @@ test.describe('small viewport', () => {
await expect(page.locator('.tippy-target>#settings-btn')).toBeVisible(); await expect(page.locator('.tippy-target>#settings-btn')).toBeVisible();
// Verify that we have no duplicated items // Verify that we have no duplicated items
const shownItems = await page.locator('.overflow-menu-items>a').all(); const shownItems = page.locator('.overflow-menu-items>a');
expect(shownItems).not.toHaveLength(0); await expect(shownItems).not.toHaveCount(0);
const overflowItems = await page.locator('.tippy-target>a').all(); const overflowItems = page.locator('.tippy-target>a');
expect(overflowItems).not.toHaveLength(0); await expect(overflowItems).not.toHaveCount(0);
const items = shownItems.concat(overflowItems); const items = (await shownItems.all()).concat(overflowItems);
expect(Array.from(new Set(items))).toHaveLength(items.length); expect(Array.from(new Set(items))).toHaveLength(items.length);
}); });
}); });
@ -117,12 +117,12 @@ test.describe('small viewport, unauthenticated', () => {
await expect(page.locator('.tippy-target>#settings-btn')).toHaveCount(0); await expect(page.locator('.tippy-target>#settings-btn')).toHaveCount(0);
// Verify that we have no duplicated items // Verify that we have no duplicated items
const shownItems = await page.locator('.overflow-menu-items>a').all(); const shownItems = page.locator('.overflow-menu-items>a');
expect(shownItems).not.toHaveLength(0); await expect(shownItems).not.toHaveCount(0);
const overflowItems = await page.locator('.tippy-target>a').all(); const overflowItems = page.locator('.tippy-target>a');
expect(overflowItems).not.toHaveLength(0); await expect(overflowItems).not.toHaveCount(0);
const items = shownItems.concat(overflowItems); const items = (await shownItems.all()).concat(overflowItems);
expect(Array.from(new Set(items))).toHaveLength(items.length); expect(Array.from(new Set(items))).toHaveLength(items.length);
await screenshot(page); await screenshot(page);
}); });