feat: initial addProject test with WebdriverIO (#4589)

Co-authored-by: Mattias Granlund <mtsgrd@gmail.com>
Co-authored-by: Test User <test@example.com>
This commit is contained in:
Nico Domino 2024-08-13 17:31:19 +02:00 committed by GitHub
parent 796f8fe011
commit 11ff8a71cc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 256 additions and 192 deletions

View File

@ -0,0 +1,47 @@
#!/usr/bin/env bash
set -eu -o pipefail
TEMP_DIR="/tmp/gb-e2e-repos"
CLI=${1:?The first argument is the GitButler CLI}
# Convert to absolute path
CLI=$(realpath "$CLI")
function tick() {
if test -z "${tick+set}"; then
tick=1675176957
else
tick=$($tick + 60)
fi
GIT_COMMITTER_DATE="$tick +0100"
GIT_AUTHOR_DATE="$tick +0100"
export GIT_COMMITTER_DATE GIT_AUTHOR_DATE
}
tick
mkdir "$TEMP_DIR"
cd "$TEMP_DIR"
git init remote
(
cd remote
git config user.email "test@example.com"
git config user.name "Test User"
git config init.defaultBranch master
echo first >file
git add . && git commit -m "init"
)
git clone remote one-vbranch-on-integration
# This code will be useful for scenarios that assumes a project
# already exists.
# (
# cd one-vbranch-on-integration
# $CLI project add --switch-to-integration "$(git rev-parse --symbolic-full-name "@{u}")"
# $CLI branch create virtual
# )

View File

@ -0,0 +1,25 @@
import { setElementValue, spawnAndLog, findAndClick } from '../utils.js';
describe('Project', () => {
before(() => {
spawnAndLog('bash', [
'-c',
'./e2e/scripts/init-repositories.sh ../../target/debug/gitbutler-cli'
]);
});
it('should add a local project', async () => {
await findAndClick('button[data-testid="analytics-continue"]');
// Workaround selecting path via fileDialog by setting a hidden input value
const dirInput = await $('input[data-testid="test-directory-path"]');
setElementValue(dirInput, `/tmp/gb-e2e-repos/one-vbranch-on-integration`);
await findAndClick('button[data-testid="add-local-project"]');
await findAndClick('button[data-testid="set-base-branch"]');
await findAndClick('button[data-testid="accept-git-auth"]');
const workspaceButton = await $('button=Workspace');
await expect(workspaceButton).toExist();
});
});

View File

@ -1,6 +1,6 @@
describe('GitButler', () => {
it('should have the root element', async () => {
const element = await $('body.text-base');
expect(element).toExist();
await expect(element).toExist();
});
});

View File

@ -1,9 +0,0 @@
const DEFAULT_TIMEOUT = 5_000;
export async function findAndClick(selector, timeout) {
const button = await $(selector);
await button.waitForClickable({
timeout: timeout ?? DEFAULT_TIMEOUT
});
await browser.execute('arguments[0].click();', button);
}

31
apps/desktop/e2e/utils.ts Normal file
View File

@ -0,0 +1,31 @@
import { spawnSync } from 'node:child_process';
import { browser } from '@wdio/globals';
const DEFAULT_TIMEOUT = 5_000;
export async function spawnAndLog(command: string, args: string[]) {
const result = spawnSync(command, args);
console.log(`Exec command: ${command} ${args.join(' ')}`);
console.log('==== STDOUT ====\n', result.stdout?.toString());
console.log('==== STDERR ====\n', result.stderr?.toString());
console.log('==== EXIT STATUS ====\n', result.status);
return result.status;
}
export async function findAndClick(selector: string, timeout?: number) {
const button = await $(selector);
await button.waitForClickable({
timeout: timeout ?? DEFAULT_TIMEOUT
});
await browser.execute('arguments[0].click();', button);
}
export async function setElementValue(targetElement: WebdriverIO.Element, value: string) {
await browser.execute(
(input, path) => {
(input as any).value = path;
},
targetElement,
value
);
}

View File

@ -8,6 +8,7 @@
"test": "vitest run --mode development",
"test:watch": "vitest --watch --mode development",
"test:e2e": "wdio run wdio.conf.ts",
"test:e2e:watch": "wdio wdio.conf.ts --watch",
"build": "vite build",
"check": "svelte-check --tsconfig ./tsconfig.json",
"check:watch": "pnpm check --watch",

View File

@ -45,10 +45,12 @@
{@const [remoteName, branchName] = selectedBranch[0].split(/\/(.*)/s)}
<KeysForm {remoteName} {branchName} disabled={loading} />
<div class="actions">
<Button style="ghost" outline disabled={loading} onclick={() => (selectedBranch[0] = '')}
>Back</Button
>
<Button style="pop" kind="solid" {loading} onclick={setTarget}>Let's go!</Button>
<Button style="ghost" outline disabled={loading} onclick={() => (selectedBranch[0] = '')}>
Back
</Button>
<Button style="pop" kind="solid" {loading} onclick={setTarget} testId="accept-git-auth">
Let's go!
</Button>
</div>
{:else}
<ProjectSetupTarget

View File

@ -255,6 +255,7 @@
{loading}
onclick={onSetTargetClick}
icon="chevron-right-small"
testId="set-base-branch"
id="set-base-branch"
>
{#if $platformName === 'win32'}

View File

@ -10,13 +10,14 @@
const projectService = getContext(ProjectService);
let newProjectLoading = false;
let cloneProjectLoading = false;
let newProjectLoading = $state(false);
let directoryInputElement = $state<HTMLInputElement | undefined>();
async function onNewProject() {
newProjectLoading = true;
try {
await projectService.addProject();
const testDirectoryPath = directoryInputElement?.value;
await projectService.addProject(testDirectoryPath ?? '');
} finally {
newProjectLoading = false;
}
@ -31,11 +32,18 @@
<h1 class="welcome-title text-serif-40" data-tauri-drag-region>Welcome to GitButler</h1>
<div class="welcome__actions">
<div class="welcome__actions--repo">
<input
type="text"
hidden
bind:this={directoryInputElement}
data-testid="test-directory-path"
/>
<WelcomeAction
title="Add local project"
loading={newProjectLoading}
onclick={onNewProject}
dimMessage
testId="add-local-project"
>
{#snippet icon()}
{@html newProjectSvg}
@ -44,12 +52,7 @@
Should be a valid git repository
{/snippet}
</WelcomeAction>
<WelcomeAction
title="Clone repository"
loading={cloneProjectLoading}
onclick={onCloneProject}
dimMessage
>
<WelcomeAction title="Clone repository" onclick={onCloneProject} dimMessage>
{#snippet icon()}
{@html cloneRepoSvg}
{/snippet}

View File

@ -11,10 +11,11 @@
message,
dimMessage,
row,
rowReverse
rowReverse,
testId
}: {
title: string;
loading: boolean;
loading?: boolean;
onmousedown?: (e: MouseEvent) => void;
onclick?: (e: MouseEvent) => void;
icon: Snippet;
@ -22,6 +23,7 @@
dimMessage?: boolean;
row?: boolean;
rowReverse?: boolean;
testId?: string;
} = $props();
</script>
@ -33,6 +35,7 @@
{onclick}
{onmousedown}
disabled={loading}
data-testid={testId}
>
<div class="icon">
{@render icon()}

View File

@ -15,6 +15,7 @@
<Button
style="pop"
kind="solid"
testId="analytics-continue"
icon="chevron-right-small"
onclick={() => {
$analyticsConfirmed = true;

View File

@ -14,7 +14,7 @@
"sourceMap": true,
"strict": true,
"experimentalDecorators": true,
"types": ["vitest/importMeta"]
"types": ["node", "@wdio/globals/types", "@wdio/mocha-framework", "vitest/importMeta"]
},
"include": [
"wdio.conf.ts",
@ -27,8 +27,8 @@
"src/**/*.js",
"src/**/*.ts",
"src/**/*.svelte",
"tests/**/*.js",
"tests/**/*.ts",
"tests/**/*.svelte"
"e2e/tests/**/*.js",
"e2e/tests/**/*.ts",
"e2e/tests/**/*.svelte"
]
}

View File

@ -1,4 +1,3 @@
import { browser } from '@wdio/globals';
import { spawn, ChildProcess } from 'node:child_process';
import os from 'node:os';
import path from 'node:path';
@ -9,11 +8,12 @@ let tauriDriver: ChildProcess;
export const config: Options.WebdriverIO = {
hostname: '127.0.0.1',
port: 4444,
specs: ['./e2e/**/*.spec.js'],
specs: ['./e2e/tests/**/*.spec.ts'],
maxInstances: 1,
capabilities: [
{
// @ts-expect-error custom tauri capabilities
maxInstances: 1,
'tauri:options': {
application: '../../target/release/git-butler-dev'
}
@ -35,7 +35,7 @@ export const config: Options.WebdriverIO = {
waitforTimeout: 10000,
connectionRetryTimeout: 120000,
connectionRetryCount: 3,
connectionRetryCount: 0,
// ensure we are running `tauri-driver` before the session starts so that we can proxy the webdriver requests
beforeSession: () =>
@ -43,11 +43,7 @@ export const config: Options.WebdriverIO = {
stdio: [null, process.stdout, process.stderr]
})),
afterTest: function ({ error }: { error: Error }) {
if (error) {
browser.takeScreenshot();
afterSession: () => {
tauriDriver.kill();
}
},
afterSession: () => tauriDriver.kill()
};

View File

@ -27,6 +27,7 @@
icon?: keyof typeof iconsJson | undefined;
help?: string;
helpShowDelay?: number;
testId?: string;
// Events
onclick?: (e: MouseEvent) => void;
onmousedown?: (e: MouseEvent) => void;
@ -66,6 +67,7 @@
outline = false,
dashed = false,
solidBackground = false,
testId,
icon,
help = '',
helpShowDelay = 1200,
@ -112,6 +114,7 @@
{onkeydown}
{type}
{id}
{...testId ? { 'data-testid': testId } : null}
tabindex={clickable ? tabindex : -1}
>
{#if children}

View File

@ -180,16 +180,16 @@ importers:
version: 6.0.3
'@wdio/cli':
specifier: ^8.39.1
version: 8.39.1(typescript@5.4.5)
version: 8.40.2
'@wdio/globals':
specifier: ^8.39.1
version: 8.39.1(typescript@5.4.5)
version: 8.40.2
'@wdio/local-runner':
specifier: ^8.39.1
version: 8.39.1(typescript@5.4.5)
version: 8.40.2
'@wdio/mocha-framework':
specifier: ^8.39.0
version: 8.39.0
version: 8.40.2
'@wdio/spec-reporter':
specifier: ^8.39.0
version: 8.39.0
@ -270,7 +270,7 @@ importers:
version: 5.2.13(@types/node@20.5.9)
vitest:
specifier: ^0.34.6
version: 0.34.6(playwright@1.44.1)(safaridriver@0.1.2)(webdriverio@8.39.1(typescript@5.4.5))
version: 0.34.6(playwright@1.44.1)(safaridriver@0.1.2)(webdriverio@8.40.2)
apps/web:
dependencies:
@ -1658,16 +1658,6 @@ packages:
'@promptbook/utils@0.58.0':
resolution: {integrity: sha512-TglWndmjikWN+OGg9eNOUaMTM7RHr8uFCtgxfWULT1BUjcohywdijf54vS1U4mZ1tBLdHD4/fIrIHtmHzPUIZQ==}
'@puppeteer/browsers@1.4.6':
resolution: {integrity: sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ==}
engines: {node: '>=16.3.0'}
hasBin: true
peerDependencies:
typescript: '>= 4.7.4'
peerDependenciesMeta:
typescript:
optional: true
'@puppeteer/browsers@1.9.1':
resolution: {integrity: sha512-PuvK6xZzGhKPvlx3fpfdM2kYY3P/hB1URtK8wA7XUJ6prn6pp22zvJHu48th0SGcHL9SutbPHrFuQgfXTFobWA==}
engines: {node: '>=16.3.0'}
@ -2514,6 +2504,9 @@ packages:
'@vitest/expect@0.34.6':
resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==}
'@vitest/pretty-format@2.0.5':
resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==}
'@vitest/runner@0.34.6':
resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==}
@ -2523,35 +2516,38 @@ packages:
'@vitest/snapshot@1.6.0':
resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==}
'@vitest/snapshot@2.0.5':
resolution: {integrity: sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==}
'@vitest/spy@0.34.6':
resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==}
'@vitest/utils@0.34.6':
resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==}
'@wdio/cli@8.39.1':
resolution: {integrity: sha512-CUze/nbOMzgSEp+Qo27dnM5IhlOPAiBJCPX3xO85/kjweqqxmAB1QBKww1Mz9YlNIXineaHrkgqlUQIvEqOJdQ==}
'@wdio/cli@8.40.2':
resolution: {integrity: sha512-/h6Md8yMZqH8Z4XK9wjbDb/YIf9UibDkdaUxWKj5UyLA5PIyrIsLvz42PXH9ArdSq8YCUO1Jl859Z2tKdxwfgA==}
engines: {node: ^16.13 || >=18}
hasBin: true
'@wdio/config@8.39.0':
resolution: {integrity: sha512-yNuGPMPibY91s936gnJCHWlStvIyDrwLwGfLC/NCdTin4F7HL4Gp5iJnHWkJFty1/DfFi8jjoIUBNLM8HEez+A==}
'@wdio/config@8.40.2':
resolution: {integrity: sha512-RED2vcdX5Zdd6r+K+aWcjK4douxjJY4LP/8YvvavgqM0TURd5PDI0Y7IEz7+BIJOT4Uh+3atZawIN9/3yWFeag==}
engines: {node: ^16.13 || >=18}
'@wdio/globals@8.39.1':
resolution: {integrity: sha512-kNb1TlxI8Le/tsOiw7CMQcG0+ZGyxk9ZDO/PQLxkJvjo/q2QmiBcgaNMPuf+j1ABETcQK4bI7QtiT5uZ+f2AGA==}
'@wdio/globals@8.40.2':
resolution: {integrity: sha512-eF47oRE79JY2Cgl0/OCpCLdEAh4eNgU11e4O8fvkPrwbPgW6gcS8xG23ZmNGc3EjhHUZUOzrm7uJ8ymcRPIuoA==}
engines: {node: ^16.13 || >=18}
'@wdio/local-runner@8.39.1':
resolution: {integrity: sha512-VYRD7pSkl5JTsYXroM65yb+vJVn9pFJf0XZMB7Xj+WVUqGXuVkZ+XybsQetUlhruXvHIsPdiFj12V1tMyaUHrQ==}
'@wdio/local-runner@8.40.2':
resolution: {integrity: sha512-Q6NDtI5IqYHciv+3t6mxwUefmdTdKmXf1aAg/KzJUTDl0RaISb9gKBOBW4pyMbY2ot5yF2mB7rXF93aN2Kmq6Q==}
engines: {node: ^16.13 || >=18}
'@wdio/logger@8.38.0':
resolution: {integrity: sha512-kcHL86RmNbcQP+Gq/vQUGlArfU6IIcbbnNp32rRIraitomZow+iEoc519rdQmSVusDozMS5DZthkgDdxK+vz6Q==}
engines: {node: ^16.13 || >=18}
'@wdio/mocha-framework@8.39.0':
resolution: {integrity: sha512-OFau1dd5mUAqC70gkx0WeZ8rJG191Snb4qhOTS18FpszUoZgoHtgjFICC0cxqZBFtmT9j7+22hNrj6d4sQVPJw==}
'@wdio/mocha-framework@8.40.2':
resolution: {integrity: sha512-hqhyYzfIe40aAXrC6SQXKqRbrpnf4BSaLlJyxDbMVkge/5du/pCinciz25HmOdfHDhG/t9Ox9q1fNfD6+1IMew==}
engines: {node: ^16.13 || >=18}
'@wdio/protocols@8.38.0':
@ -2565,8 +2561,8 @@ packages:
resolution: {integrity: sha512-XahXhmaA1okdwg4/ThHFSqy/41KywxhbtszPcTzyXB+9INaqFNHA1b1vvWs0mrD5+tTtKbg4caTcEHVJU4iv0w==}
engines: {node: ^16.13 || >=18}
'@wdio/runner@8.39.1':
resolution: {integrity: sha512-hCGI+TSAyb14UtdDjswI5AAdW1CZMi6di+rDZ6ml43hQyHc6sw+74CXI8dwoJ29dcTzbg7QCJZZXV1qMn0kh2w==}
'@wdio/runner@8.40.2':
resolution: {integrity: sha512-alK1n5fHiAG/Pf77O9gb8mjs/KIbLFEedrQsIk2ZMVvgTfmyriKb790Iy64RCYDfZpWQmCvcj9yDARc64IhSGw==}
engines: {node: ^16.13 || >=18}
'@wdio/spec-reporter@8.39.0':
@ -2577,8 +2573,8 @@ packages:
resolution: {integrity: sha512-86lcYROTapOJuFd9ouomFDfzDnv3Kn+jE0RmqfvN9frZAeLVJ5IKjX9M6HjplsyTZhjGO1uCaehmzx+HJus33Q==}
engines: {node: ^16.13 || >=18}
'@wdio/utils@8.39.0':
resolution: {integrity: sha512-jY+n6jlGeK+9Tx8T659PKLwMQTGpLW5H78CSEWgZLbjbVSr2LfGR8Lx0CRktNXxAtqEVZPj16Pi74OtAhvhE6Q==}
'@wdio/utils@8.40.2':
resolution: {integrity: sha512-leYcCUSaAdLUCVKqRKNgMCASPOUo/VvOTKETiZ/qpdY2azCBt/KnLugtiycCzakeYg6Kp+VIjx5fkm0M7y4qhA==}
engines: {node: ^16.13 || >=18}
'@yarnpkg/fslib@2.10.3':
@ -2943,8 +2939,8 @@ packages:
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
engines: {node: '>=10'}
chromium-bidi@0.4.16:
resolution: {integrity: sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==}
chromium-bidi@0.5.8:
resolution: {integrity: sha512-blqh+1cEQbHBKmok3rVJkBlBxt9beKBgOsxbFgs7UJcoVbbeZ+K7+6liAsjgpc8l1Xd55cQUy14fXZdGSb4zIw==}
peerDependencies:
devtools-protocol: '*'
@ -3256,11 +3252,11 @@ packages:
devalue@5.0.0:
resolution: {integrity: sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==}
devtools-protocol@0.0.1147663:
resolution: {integrity: sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==}
devtools-protocol@0.0.1232444:
resolution: {integrity: sha512-pM27vqEfxSxRkTMnF+XCmxSEb6duO5R+t8A9DEEJgy4Wz2RVanje2mmj99B6A3zv2r/qGfYlOvYznUhuokizmg==}
devtools-protocol@0.0.1302984:
resolution: {integrity: sha512-Rgh2Sk5fUSCtEx4QGH9iwTyECdFPySG2nlz5J8guGh2Wlha6uzSOCq/DCEC8faHlLaMPZJMuZ4ovgcX4LvOkKA==}
devtools-protocol@0.0.1335233:
resolution: {integrity: sha512-bNTJw/m+v0JvQEsaI0l+i6mETHHf7VwZbQzT5GNSveGuYjip8uyjeF/qg84bsIPU+lFypnZr10a+cbcee6I8pg==}
diff-match-patch@1.0.5:
resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==}
@ -4708,8 +4704,8 @@ packages:
resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
engines: {node: '>= 8'}
mitt@3.0.0:
resolution: {integrity: sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==}
mitt@3.0.1:
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
mkdirp-classic@0.5.3:
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
@ -5267,10 +5263,6 @@ packages:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'}
proxy-agent@6.3.0:
resolution: {integrity: sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==}
engines: {node: '>= 14'}
proxy-agent@6.3.1:
resolution: {integrity: sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==}
engines: {node: '>= 14'}
@ -5285,14 +5277,9 @@ packages:
resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
engines: {node: '>=6'}
puppeteer-core@20.9.0:
resolution: {integrity: sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg==}
engines: {node: '>=16.3.0'}
peerDependencies:
typescript: '>= 4.7.4'
peerDependenciesMeta:
typescript:
optional: true
puppeteer-core@21.11.0:
resolution: {integrity: sha512-ArbnyA3U5SGHokEvkfWjW+O8hOxV1RSJxOgriX/3A4xZRqixt9ZFHD0yPgZQF05Qj0oAqi8H/7stDorjoHY90Q==}
engines: {node: '>=16.13.2'}
qs@6.11.0:
resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
@ -5934,6 +5921,10 @@ packages:
resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==}
engines: {node: '>=14.0.0'}
tinyrainbow@1.2.0:
resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
engines: {node: '>=14.0.0'}
tinyspy@2.2.1:
resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==}
engines: {node: '>=14.0.0'}
@ -6177,6 +6168,9 @@ packages:
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
urlpattern-polyfill@10.0.0:
resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==}
userhome@1.0.0:
resolution: {integrity: sha512-ayFKY3H+Pwfy4W98yPdtH1VqH4psDeyW8lYYFzfecR9d6hqLpqhecktvYR3SEEXt7vG0S1JEpciI3g94pMErig==}
engines: {node: '>= 0.8.0'}
@ -6302,12 +6296,12 @@ packages:
resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==}
engines: {node: '>= 14'}
webdriver@8.39.0:
resolution: {integrity: sha512-Kc3+SfiH4ufyrIht683VT2vnJocx0pfH8rYdyPvEh1b2OYewtFTHK36k9rBDHZiBmk6jcSXs4M2xeFgOuon9Lg==}
webdriver@8.40.2:
resolution: {integrity: sha512-GoRR94m3yL8tWC9Myf+xIBSdVK8fi1ilZgEZZaYT8+XIWewR02dvrC6rml+/2ZjXUQzeee0RFGDwk9IC7cyYrg==}
engines: {node: ^16.13 || >=18}
webdriverio@8.39.1:
resolution: {integrity: sha512-dPwLgLNtP+l4vnybz+YFxxH8nBKOP7j6VVzKtfDyTLDQg9rz3U8OA4xMMQCBucnrVXy3KcKxGqlnMa+c4IfWCQ==}
webdriverio@8.40.2:
resolution: {integrity: sha512-6yuzUlE064qNuMy98Du1+8QHbXk0st8qTWF7MDZRgYK19FGoy+KhQbaUv1wlFJuFHM0PiAYuduTURL4ub6HvzQ==}
engines: {node: ^16.13 || >=18}
peerDependencies:
devtools: ^8.14.0
@ -6381,8 +6375,8 @@ packages:
write-file-atomic@2.4.3:
resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==}
ws@8.13.0:
resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==}
ws@8.16.0:
resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
@ -6449,10 +6443,6 @@ packages:
resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
engines: {node: '>=10'}
yargs@17.7.1:
resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==}
engines: {node: '>=12'}
yargs@17.7.2:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
@ -8066,20 +8056,6 @@ snapshots:
dependencies:
spacetrim: 0.11.36
'@puppeteer/browsers@1.4.6(typescript@5.4.5)':
dependencies:
debug: 4.3.4
extract-zip: 2.0.1
progress: 2.0.3
proxy-agent: 6.3.0
tar-fs: 3.0.4
unbzip2-stream: 1.4.3
yargs: 17.7.1
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
'@puppeteer/browsers@1.9.1':
dependencies:
debug: 4.3.4
@ -9221,6 +9197,10 @@ snapshots:
'@vitest/utils': 0.34.6
chai: 4.3.10
'@vitest/pretty-format@2.0.5':
dependencies:
tinyrainbow: 1.2.0
'@vitest/runner@0.34.6':
dependencies:
'@vitest/utils': 0.34.6
@ -9239,6 +9219,12 @@ snapshots:
pathe: 1.1.2
pretty-format: 29.7.0
'@vitest/snapshot@2.0.5':
dependencies:
'@vitest/pretty-format': 2.0.5
magic-string: 0.30.10
pathe: 1.1.2
'@vitest/spy@0.34.6':
dependencies:
tinyspy: 2.2.1
@ -9249,16 +9235,16 @@ snapshots:
loupe: 2.3.7
pretty-format: 29.7.0
'@wdio/cli@8.39.1(typescript@5.4.5)':
'@wdio/cli@8.40.2':
dependencies:
'@types/node': 20.14.13
'@vitest/snapshot': 1.6.0
'@wdio/config': 8.39.0
'@wdio/globals': 8.39.1(typescript@5.4.5)
'@vitest/snapshot': 2.0.5
'@wdio/config': 8.40.2
'@wdio/globals': 8.40.2
'@wdio/logger': 8.38.0
'@wdio/protocols': 8.38.0
'@wdio/types': 8.39.0
'@wdio/utils': 8.39.0
'@wdio/utils': 8.40.2
async-exit-hook: 2.0.1
chalk: 5.3.0
chokidar: 3.6.0
@ -9273,21 +9259,20 @@ snapshots:
lodash.union: 4.6.0
read-pkg-up: 10.0.0
recursive-readdir: 2.2.3
webdriverio: 8.39.1(typescript@5.4.5)
webdriverio: 8.40.2
yargs: 17.7.2
transitivePeerDependencies:
- bufferutil
- devtools
- encoding
- supports-color
- typescript
- utf-8-validate
'@wdio/config@8.39.0':
'@wdio/config@8.40.2':
dependencies:
'@wdio/logger': 8.38.0
'@wdio/types': 8.39.0
'@wdio/utils': 8.39.0
'@wdio/utils': 8.40.2
decamelize: 6.0.0
deepmerge-ts: 5.1.0
glob: 10.4.5
@ -9295,24 +9280,23 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@wdio/globals@8.39.1(typescript@5.4.5)':
'@wdio/globals@8.40.2':
optionalDependencies:
expect-webdriverio: 4.15.1(typescript@5.4.5)
webdriverio: 8.39.1(typescript@5.4.5)
expect-webdriverio: 4.15.1
webdriverio: 8.40.2
transitivePeerDependencies:
- bufferutil
- devtools
- encoding
- supports-color
- typescript
- utf-8-validate
'@wdio/local-runner@8.39.1(typescript@5.4.5)':
'@wdio/local-runner@8.40.2':
dependencies:
'@types/node': 20.14.13
'@wdio/logger': 8.38.0
'@wdio/repl': 8.24.12
'@wdio/runner': 8.39.1(typescript@5.4.5)
'@wdio/runner': 8.40.2
'@wdio/types': 8.39.0
async-exit-hook: 2.0.1
split2: 4.2.0
@ -9322,7 +9306,6 @@ snapshots:
- devtools
- encoding
- supports-color
- typescript
- utf-8-validate
'@wdio/logger@8.38.0':
@ -9332,13 +9315,13 @@ snapshots:
loglevel-plugin-prefix: 0.8.4
strip-ansi: 7.1.0
'@wdio/mocha-framework@8.39.0':
'@wdio/mocha-framework@8.40.2':
dependencies:
'@types/mocha': 10.0.7
'@types/node': 20.14.13
'@wdio/logger': 8.38.0
'@wdio/types': 8.39.0
'@wdio/utils': 8.39.0
'@wdio/utils': 8.40.2
mocha: 10.7.0
transitivePeerDependencies:
- supports-color
@ -9357,25 +9340,24 @@ snapshots:
diff: 5.2.0
object-inspect: 1.13.1
'@wdio/runner@8.39.1(typescript@5.4.5)':
'@wdio/runner@8.40.2':
dependencies:
'@types/node': 20.14.13
'@wdio/config': 8.39.0
'@wdio/globals': 8.39.1(typescript@5.4.5)
'@wdio/config': 8.40.2
'@wdio/globals': 8.40.2
'@wdio/logger': 8.38.0
'@wdio/types': 8.39.0
'@wdio/utils': 8.39.0
'@wdio/utils': 8.40.2
deepmerge-ts: 5.1.0
expect-webdriverio: 4.15.1(typescript@5.4.5)
expect-webdriverio: 4.15.1
gaze: 1.1.3
webdriver: 8.39.0
webdriverio: 8.39.1(typescript@5.4.5)
webdriver: 8.40.2
webdriverio: 8.40.2
transitivePeerDependencies:
- bufferutil
- devtools
- encoding
- supports-color
- typescript
- utf-8-validate
'@wdio/spec-reporter@8.39.0':
@ -9390,7 +9372,7 @@ snapshots:
dependencies:
'@types/node': 20.14.13
'@wdio/utils@8.39.0':
'@wdio/utils@8.40.2':
dependencies:
'@puppeteer/browsers': 1.9.1
'@wdio/logger': 8.38.0
@ -9834,10 +9816,11 @@ snapshots:
chownr@2.0.0: {}
chromium-bidi@0.4.16(devtools-protocol@0.0.1147663):
chromium-bidi@0.5.8(devtools-protocol@0.0.1232444):
dependencies:
devtools-protocol: 0.0.1147663
mitt: 3.0.0
devtools-protocol: 0.0.1232444
mitt: 3.0.1
urlpattern-polyfill: 10.0.0
ci-info@3.9.0: {}
@ -10119,9 +10102,9 @@ snapshots:
devalue@5.0.0: {}
devtools-protocol@0.0.1147663: {}
devtools-protocol@0.0.1232444: {}
devtools-protocol@0.0.1302984: {}
devtools-protocol@0.0.1335233: {}
diff-match-patch@1.0.5: {}
@ -10660,22 +10643,21 @@ snapshots:
signal-exit: 4.1.0
strip-final-newline: 3.0.0
expect-webdriverio@4.15.1(typescript@5.4.5):
expect-webdriverio@4.15.1:
dependencies:
'@vitest/snapshot': 1.6.0
expect: 29.7.0
jest-matcher-utils: 29.7.0
lodash.isequal: 4.5.0
optionalDependencies:
'@wdio/globals': 8.39.1(typescript@5.4.5)
'@wdio/globals': 8.40.2
'@wdio/logger': 8.38.0
webdriverio: 8.39.1(typescript@5.4.5)
webdriverio: 8.40.2
transitivePeerDependencies:
- bufferutil
- devtools
- encoding
- supports-color
- typescript
- utf-8-validate
expect@29.7.0:
@ -11845,7 +11827,7 @@ snapshots:
minipass: 3.3.6
yallist: 4.0.0
mitt@3.0.0: {}
mitt@3.0.1: {}
mkdirp-classic@0.5.3: {}
@ -12387,19 +12369,6 @@ snapshots:
forwarded: 0.2.0
ipaddr.js: 1.9.1
proxy-agent@6.3.0:
dependencies:
agent-base: 7.1.1
debug: 4.3.6(supports-color@8.1.1)
http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.5
lru-cache: 7.18.3
pac-proxy-agent: 7.0.2
proxy-from-env: 1.1.0
socks-proxy-agent: 8.0.4
transitivePeerDependencies:
- supports-color
proxy-agent@6.3.1:
dependencies:
agent-base: 7.1.1
@ -12422,16 +12391,14 @@ snapshots:
punycode@2.3.0: {}
puppeteer-core@20.9.0(typescript@5.4.5):
puppeteer-core@21.11.0:
dependencies:
'@puppeteer/browsers': 1.4.6(typescript@5.4.5)
chromium-bidi: 0.4.16(devtools-protocol@0.0.1147663)
'@puppeteer/browsers': 1.9.1
chromium-bidi: 0.5.8(devtools-protocol@0.0.1232444)
cross-fetch: 4.0.0
debug: 4.3.4
devtools-protocol: 0.0.1147663
ws: 8.13.0
optionalDependencies:
typescript: 5.4.5
devtools-protocol: 0.0.1232444
ws: 8.16.0
transitivePeerDependencies:
- bufferutil
- encoding
@ -13206,6 +13173,8 @@ snapshots:
tinypool@0.7.0: {}
tinyrainbow@1.2.0: {}
tinyspy@2.2.1: {}
tmp@0.0.33:
@ -13440,6 +13409,8 @@ snapshots:
dependencies:
punycode: 2.3.0
urlpattern-polyfill@10.0.0: {}
userhome@1.0.0: {}
util-deprecate@1.0.2: {}
@ -13511,7 +13482,7 @@ snapshots:
optionalDependencies:
vite: 5.2.13(@types/node@20.5.9)
vitest@0.34.6(playwright@1.44.1)(safaridriver@0.1.2)(webdriverio@8.39.1(typescript@5.4.5)):
vitest@0.34.6(playwright@1.44.1)(safaridriver@0.1.2)(webdriverio@8.40.2):
dependencies:
'@types/chai': 4.3.6
'@types/chai-subset': 1.3.3
@ -13540,7 +13511,7 @@ snapshots:
optionalDependencies:
playwright: 1.44.1
safaridriver: 0.1.2
webdriverio: 8.39.1(typescript@5.4.5)
webdriverio: 8.40.2
transitivePeerDependencies:
- less
- lightningcss
@ -13570,15 +13541,15 @@ snapshots:
web-streams-polyfill@4.0.0-beta.3: {}
webdriver@8.39.0:
webdriver@8.40.2:
dependencies:
'@types/node': 20.14.13
'@types/ws': 8.5.12
'@wdio/config': 8.39.0
'@wdio/config': 8.40.2
'@wdio/logger': 8.38.0
'@wdio/protocols': 8.38.0
'@wdio/types': 8.39.0
'@wdio/utils': 8.39.0
'@wdio/utils': 8.40.2
deepmerge-ts: 5.1.0
got: 12.6.1
ky: 0.33.3
@ -13588,20 +13559,20 @@ snapshots:
- supports-color
- utf-8-validate
webdriverio@8.39.1(typescript@5.4.5):
webdriverio@8.40.2:
dependencies:
'@types/node': 20.14.13
'@wdio/config': 8.39.0
'@wdio/config': 8.40.2
'@wdio/logger': 8.38.0
'@wdio/protocols': 8.38.0
'@wdio/repl': 8.24.12
'@wdio/types': 8.39.0
'@wdio/utils': 8.39.0
'@wdio/utils': 8.40.2
archiver: 7.0.1
aria-query: 5.3.0
css-shorthand-properties: 1.1.1
css-value: 0.0.1
devtools-protocol: 0.0.1302984
devtools-protocol: 0.0.1335233
grapheme-splitter: 1.0.4
import-meta-resolve: 4.1.0
is-plain-obj: 4.1.0
@ -13609,17 +13580,16 @@ snapshots:
lodash.clonedeep: 4.5.0
lodash.zip: 4.2.0
minimatch: 9.0.4
puppeteer-core: 20.9.0(typescript@5.4.5)
puppeteer-core: 21.11.0
query-selector-shadow-dom: 1.0.1
resq: 1.11.0
rgb2hex: 0.2.5
serialize-error: 11.0.3
webdriver: 8.39.0
webdriver: 8.40.2
transitivePeerDependencies:
- bufferutil
- encoding
- supports-color
- typescript
- utf-8-validate
webidl-conversions@3.0.1: {}
@ -13701,7 +13671,7 @@ snapshots:
imurmurhash: 0.1.4
signal-exit: 3.0.7
ws@8.13.0: {}
ws@8.16.0: {}
ws@8.17.1: {}
@ -13740,16 +13710,6 @@ snapshots:
y18n: 5.0.8
yargs-parser: 20.2.9
yargs@17.7.1:
dependencies:
cliui: 8.0.1
escalade: 3.1.2
get-caller-file: 2.0.5
require-directory: 2.1.1
string-width: 4.2.3
y18n: 5.0.8
yargs-parser: 21.1.1
yargs@17.7.2:
dependencies:
cliui: 8.0.1