Merge branch 'main' into PENPOT-50
# Conflicts: # pages/login-page.js
12
.github/workflows/playwright_pre.yml
vendored
|
@ -21,6 +21,10 @@ jobs:
|
|||
BASE_URL: ${{ secrets.BASE_URL }}
|
||||
LOGIN_EMAIL: ${{ secrets.LOGIN_EMAIL }}
|
||||
LOGIN_PWD: ${{ secrets.LOGIN_PWD }}
|
||||
REFRESH_TOKEN: ${{ secrets.REFRESH_TOKEN }}
|
||||
CLIENT_ID: ${{ secrets.CLIENT_ID }}
|
||||
CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
|
||||
GMAIL_NAME: ${{ secrets.GMAIL_NAME }}
|
||||
run: npx playwright test --project=chrome -gv 'PERF'
|
||||
- name: Upload Playwright Report
|
||||
uses: actions/upload-artifact@v3
|
||||
|
@ -48,6 +52,10 @@ jobs:
|
|||
BASE_URL: ${{ secrets.BASE_URL }}
|
||||
LOGIN_EMAIL: ${{ secrets.LOGIN_EMAIL }}
|
||||
LOGIN_PWD: ${{ secrets.LOGIN_PWD }}
|
||||
REFRESH_TOKEN: ${{ secrets.REFRESH_TOKEN }}
|
||||
CLIENT_ID: ${{ secrets.CLIENT_ID }}
|
||||
CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
|
||||
GMAIL_NAME: ${{ secrets.GMAIL_NAME }}
|
||||
run: npx playwright test --project=firefox -gv 'PERF'
|
||||
- name: Upload Playwright Report
|
||||
uses: actions/upload-artifact@v3
|
||||
|
@ -75,6 +83,10 @@ jobs:
|
|||
BASE_URL: ${{ secrets.BASE_URL }}
|
||||
LOGIN_EMAIL: ${{ secrets.LOGIN_EMAIL }}
|
||||
LOGIN_PWD: ${{ secrets.LOGIN_PWD }}
|
||||
REFRESH_TOKEN: ${{ secrets.REFRESH_TOKEN }}
|
||||
CLIENT_ID: ${{ secrets.CLIENT_ID }}
|
||||
CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
|
||||
GMAIL_NAME: ${{ secrets.GMAIL_NAME }}
|
||||
run: npx playwright test --project=webkit -gv 'PERF'
|
||||
- name: Upload Playwright Report
|
||||
uses: actions/upload-artifact@v3
|
||||
|
|
4
.github/workflows/playwright_pre_daily.yml
vendored
|
@ -24,6 +24,10 @@ jobs:
|
|||
LOGIN_EMAIL: ${{ secrets.LOGIN_EMAIL }}
|
||||
LOGIN_PWD: ${{ secrets.LOGIN_PWD }}
|
||||
GITHUB_RUN_ID: ${{ github.run.id }}
|
||||
REFRESH_TOKEN: ${{ secrets.REFRESH_TOKEN }}
|
||||
CLIENT_ID: ${{ secrets.CLIENT_ID }}
|
||||
CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
|
||||
GMAIL_NAME: ${{ secrets.GMAIL_NAME }}
|
||||
run: npx playwright test --project=chrome -gv 'PERF'
|
||||
- name: Upload Playwright Report
|
||||
uses: actions/upload-artifact@v3
|
||||
|
|
|
@ -47,6 +47,10 @@ jobs:
|
|||
BASE_URL: ${{ secrets.BASE_URL }}
|
||||
LOGIN_EMAIL: ${{ secrets.LOGIN_EMAIL }}
|
||||
LOGIN_PWD: ${{ secrets.LOGIN_PWD }}
|
||||
REFRESH_TOKEN: ${{ secrets.REFRESH_TOKEN }}
|
||||
CLIENT_ID: ${{ secrets.CLIENT_ID }}
|
||||
CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
|
||||
GMAIL_NAME: ${{ secrets.GMAIL_NAME }}
|
||||
run: npx playwright test --project=chrome -gv 'PERF' ./tests/dashboard/dashboard-teams.spec.js
|
||||
- name: Upload Playwright Report
|
||||
uses: actions/upload-artifact@v3
|
||||
|
|
4
.github/workflows/playwright_pre_login.yml
vendored
|
@ -47,6 +47,10 @@ jobs:
|
|||
BASE_URL: ${{ secrets.BASE_URL }}
|
||||
LOGIN_EMAIL: ${{ secrets.LOGIN_EMAIL }}
|
||||
LOGIN_PWD: ${{ secrets.LOGIN_PWD }}
|
||||
REFRESH_TOKEN: ${{ secrets.REFRESH_TOKEN }}
|
||||
CLIENT_ID: ${{ secrets.CLIENT_ID }}
|
||||
CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
|
||||
GMAIL_NAME: ${{ secrets.GMAIL_NAME }}
|
||||
run: npx playwright test --project=chrome -gv 'PERF' ./tests/login.spec.js
|
||||
- name: Upload Playwright Report
|
||||
uses: actions/upload-artifact@v3
|
||||
|
|
4
.github/workflows/playwright_pre_signup.yml
vendored
|
@ -47,6 +47,10 @@ jobs:
|
|||
BASE_URL: ${{ secrets.BASE_URL }}
|
||||
LOGIN_EMAIL: ${{ secrets.LOGIN_EMAIL }}
|
||||
LOGIN_PWD: ${{ secrets.LOGIN_PWD }}
|
||||
REFRESH_TOKEN: ${{ secrets.REFRESH_TOKEN }}
|
||||
CLIENT_ID: ${{ secrets.CLIENT_ID }}
|
||||
CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
|
||||
GMAIL_NAME: ${{ secrets.GMAIL_NAME }}
|
||||
run: npx playwright test --project=chrome -gv 'PERF' ./tests/signup.spec.js
|
||||
- name: Upload Playwright Report
|
||||
uses: actions/upload-artifact@v3
|
||||
|
|
1
.gitignore
vendored
|
@ -106,3 +106,4 @@ dist
|
|||
/playwright-report/
|
||||
/playwright/.cache/
|
||||
/.idea/
|
||||
/helpers/gmail_cred/
|
||||
|
|
128
helpers/gmail.js
Normal file
|
@ -0,0 +1,128 @@
|
|||
const { google } = require('googleapis');
|
||||
const { expect } = require('@playwright/test');
|
||||
|
||||
const client_id = process.env.CLIENT_ID;
|
||||
const client_secret = process.env.CLIENT_SECRET;
|
||||
const rToken = process.env.REFRESH_TOKEN;
|
||||
|
||||
async function authorize() {
|
||||
const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, "http://localhost");
|
||||
return await refreshToken(oAuth2Client);
|
||||
}
|
||||
|
||||
async function refreshToken(oAuth2Client) {
|
||||
oAuth2Client.setCredentials({ refresh_token: rToken });
|
||||
oAuth2Client.on('tokens', (tokens) => {
|
||||
if (tokens.access_token) {
|
||||
// console.log('New access token:', tokens.access_token);
|
||||
oAuth2Client.setCredentials(tokens);
|
||||
}
|
||||
});
|
||||
return oAuth2Client;
|
||||
}
|
||||
|
||||
async function listMessages(auth, email) {
|
||||
const gmail = google.gmail({ version: 'v1', auth });
|
||||
|
||||
async function searchMessages(label, email) {
|
||||
const res = await gmail.users.messages.list({
|
||||
userId: 'me',
|
||||
q: `to:${email}`,
|
||||
labelIds: [label],
|
||||
maxResults: 10,
|
||||
});
|
||||
return res.data.messages || [];
|
||||
}
|
||||
|
||||
const inboxMessages = await searchMessages('INBOX', email);
|
||||
const spamMessages = await searchMessages('SPAM', email);
|
||||
const messages = [...inboxMessages, ...spamMessages];
|
||||
|
||||
const msg = await gmail.users.messages.get({
|
||||
userId: 'me',
|
||||
id: messages[0].id,
|
||||
});
|
||||
return Buffer.from(msg.data.payload.parts[0].parts[0].body.data, 'base64').toString('utf-8');
|
||||
}
|
||||
|
||||
async function getRegisterMessage(email) {
|
||||
return authorize().then(async (auth) => {
|
||||
const body = await listMessages(auth, email);
|
||||
const urlRegex = /(https?:\/\/[^\s]+)/;
|
||||
const match = body.match(urlRegex);
|
||||
if (match) {
|
||||
const url = match[0];
|
||||
const remainingText = body.replace(url, '').trim();
|
||||
return {
|
||||
inviteUrl: url,
|
||||
inviteText: remainingText
|
||||
};
|
||||
} else {
|
||||
console.log('No URL found in the text.');
|
||||
return null;
|
||||
}
|
||||
}).catch(console.error);
|
||||
}
|
||||
|
||||
async function checkInviteText(text, team, user='k8q6byz') {
|
||||
const messageText = 'Hello!\r\n' +
|
||||
'\r\n' +
|
||||
`${user} has invited you to join the team “${team}”.\r\n` +
|
||||
'\r\n' +
|
||||
'Accept invitation using this link:\r\n' +
|
||||
'\r\n' +
|
||||
'\r\n' +
|
||||
'\r\n' +
|
||||
'Enjoy!\r\n' +
|
||||
'The Penpot team.';
|
||||
await expect(text).toBe(messageText);
|
||||
}
|
||||
|
||||
async function checkRegisterText(text, name) {
|
||||
const messageText = `Hello ${name}!\r\n` +
|
||||
'\r\n' +
|
||||
'Thanks for signing up for your Penpot account! Please verify your email using the\r\n' +
|
||||
'link below and get started building mockups and prototypes today!\r\n' +
|
||||
'\r\n' +
|
||||
'\r\n' +
|
||||
'\r\n' +
|
||||
'Enjoy!\r\n' +
|
||||
'The Penpot team.';
|
||||
await expect(text).toBe(messageText);
|
||||
}
|
||||
|
||||
async function checkRecoveryText(text, name) {
|
||||
const messageText = `Hello ${name}!\r\n` +
|
||||
'\r\n' +
|
||||
'We received a request to reset your password. Click the link below to choose a\r\n' +
|
||||
'new one:\r\n' +
|
||||
'\r\n' +
|
||||
'\r\n' +
|
||||
'\r\n' +
|
||||
'If you received this email by mistake, you can safely ignore it. Your password\r\n' +
|
||||
"won't be changed.\r\n" +
|
||||
'\r\n' +
|
||||
'Enjoy!\r\n' +
|
||||
'The Penpot team.';
|
||||
await expect(text).toBe(messageText);
|
||||
}
|
||||
|
||||
async function checkNewEmailText(text, name, newEmail) {
|
||||
const messageText = `Hello ${name}!\r\n` +
|
||||
'\r\n' +
|
||||
`We received a request to change your current email to ${newEmail}.\r\n` +
|
||||
'\r\n' +
|
||||
'Click to the link below to confirm the change:\r\n' +
|
||||
'\r\n' +
|
||||
'\r\n' +
|
||||
'\r\n' +
|
||||
'If you received this email by mistake, please consider changing your password\r\n' +
|
||||
'for security reasons.\r\n' +
|
||||
'\r\n' +
|
||||
'Enjoy!\r\n' +
|
||||
'The Penpot team.';
|
||||
await expect(text).toBe(messageText);
|
||||
}
|
||||
|
||||
module.exports = {checkInviteText, getRegisterMessage, checkRegisterText, checkRecoveryText, checkNewEmailText};
|
||||
|
794
package-lock.json
generated
|
@ -12,6 +12,7 @@
|
|||
"axios": "^1.6.8",
|
||||
"cheerio": "^1.0.0-rc.12",
|
||||
"fs": "^0.0.1-security",
|
||||
"googleapis": "^137.1.0",
|
||||
"playwright-qase-reporter": "^1.2.2",
|
||||
"prettier": "^3.0.1",
|
||||
"ts-node": "^10.9.2"
|
||||
|
@ -117,6 +118,17 @@
|
|||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/agent-base": {
|
||||
"version": "7.1.1",
|
||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
|
||||
"integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
|
||||
"dependencies": {
|
||||
"debug": "^4.3.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
|
@ -151,11 +163,61 @@
|
|||
"proxy-from-env": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/base64-js": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
||||
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
]
|
||||
},
|
||||
"node_modules/bignumber.js": {
|
||||
"version": "9.1.2",
|
||||
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz",
|
||||
"integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==",
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/boolbase": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
|
||||
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
|
||||
},
|
||||
"node_modules/buffer-equal-constant-time": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
|
||||
"integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
|
||||
},
|
||||
"node_modules/call-bind": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
|
||||
"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
|
||||
"dependencies": {
|
||||
"es-define-property": "^1.0.0",
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2",
|
||||
"get-intrinsic": "^1.2.4",
|
||||
"set-function-length": "^1.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/chalk": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
||||
|
@ -265,6 +327,38 @@
|
|||
"url": "https://github.com/sponsors/fb55"
|
||||
}
|
||||
},
|
||||
"node_modules/debug": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
||||
"dependencies": {
|
||||
"ms": "2.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"supports-color": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/define-data-property": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
|
||||
"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
|
||||
"dependencies": {
|
||||
"es-define-property": "^1.0.0",
|
||||
"es-errors": "^1.3.0",
|
||||
"gopd": "^1.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
|
@ -344,6 +438,14 @@
|
|||
"url": "https://github.com/motdotla/dotenv?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/ecdsa-sig-formatter": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
|
||||
"integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
|
||||
"dependencies": {
|
||||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/entities": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
|
||||
|
@ -355,6 +457,30 @@
|
|||
"url": "https://github.com/fb55/entities?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/es-define-property": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
|
||||
"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
|
||||
"dependencies": {
|
||||
"get-intrinsic": "^1.2.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-errors": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
|
||||
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/extend": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
||||
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.6",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
|
||||
|
@ -406,6 +532,126 @@
|
|||
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/function-bind": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
||||
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/gaxios": {
|
||||
"version": "6.6.0",
|
||||
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.6.0.tgz",
|
||||
"integrity": "sha512-bpOZVQV5gthH/jVCSuYuokRo2bTKOcuBiVWpjmTn6C5Agl5zclGfTljuGsQZxwwDBkli+YhZhP4TdlqTnhOezQ==",
|
||||
"dependencies": {
|
||||
"extend": "^3.0.2",
|
||||
"https-proxy-agent": "^7.0.1",
|
||||
"is-stream": "^2.0.0",
|
||||
"node-fetch": "^2.6.9",
|
||||
"uuid": "^9.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/gcp-metadata": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz",
|
||||
"integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==",
|
||||
"dependencies": {
|
||||
"gaxios": "^6.0.0",
|
||||
"json-bigint": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/get-intrinsic": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
|
||||
"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2",
|
||||
"has-proto": "^1.0.1",
|
||||
"has-symbols": "^1.0.3",
|
||||
"hasown": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/google-auth-library": {
|
||||
"version": "9.10.0",
|
||||
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.10.0.tgz",
|
||||
"integrity": "sha512-ol+oSa5NbcGdDqA+gZ3G3mev59OHBZksBTxY/tYwjtcp1H/scAFwJfSQU9/1RALoyZ7FslNbke8j4i3ipwlyuQ==",
|
||||
"dependencies": {
|
||||
"base64-js": "^1.3.0",
|
||||
"ecdsa-sig-formatter": "^1.0.11",
|
||||
"gaxios": "^6.1.1",
|
||||
"gcp-metadata": "^6.1.0",
|
||||
"gtoken": "^7.0.0",
|
||||
"jws": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/googleapis": {
|
||||
"version": "137.1.0",
|
||||
"resolved": "https://registry.npmjs.org/googleapis/-/googleapis-137.1.0.tgz",
|
||||
"integrity": "sha512-2L7SzN0FLHyQtFmyIxrcXhgust77067pkkduqkbIpDuj9JzVnByxsRrcRfUMFQam3rQkWW2B0f1i40IwKDWIVQ==",
|
||||
"dependencies": {
|
||||
"google-auth-library": "^9.0.0",
|
||||
"googleapis-common": "^7.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/googleapis-common": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.2.0.tgz",
|
||||
"integrity": "sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==",
|
||||
"dependencies": {
|
||||
"extend": "^3.0.2",
|
||||
"gaxios": "^6.0.3",
|
||||
"google-auth-library": "^9.7.0",
|
||||
"qs": "^6.7.0",
|
||||
"url-template": "^2.0.8",
|
||||
"uuid": "^9.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/gopd": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
|
||||
"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
|
||||
"dependencies": {
|
||||
"get-intrinsic": "^1.1.3"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/gtoken": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz",
|
||||
"integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==",
|
||||
"dependencies": {
|
||||
"gaxios": "^6.0.0",
|
||||
"jws": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
|
@ -414,6 +660,50 @@
|
|||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/has-property-descriptors": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
|
||||
"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
|
||||
"dependencies": {
|
||||
"es-define-property": "^1.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/has-proto": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
|
||||
"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/has-symbols": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
|
||||
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/hasown": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
||||
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
||||
"dependencies": {
|
||||
"function-bind": "^1.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/htmlparser2": {
|
||||
"version": "8.0.2",
|
||||
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
|
||||
|
@ -432,6 +722,56 @@
|
|||
"entities": "^4.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/https-proxy-agent": {
|
||||
"version": "7.0.4",
|
||||
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
|
||||
"integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
|
||||
"dependencies": {
|
||||
"agent-base": "^7.0.2",
|
||||
"debug": "4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/is-stream": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
|
||||
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/json-bigint": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
|
||||
"integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
|
||||
"dependencies": {
|
||||
"bignumber.js": "^9.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/jwa": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
|
||||
"integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
|
||||
"dependencies": {
|
||||
"buffer-equal-constant-time": "1.0.1",
|
||||
"ecdsa-sig-formatter": "1.0.11",
|
||||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/jws": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
|
||||
"integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
|
||||
"dependencies": {
|
||||
"jwa": "^2.0.0",
|
||||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/make-error": {
|
||||
"version": "1.3.6",
|
||||
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
|
||||
|
@ -456,6 +796,30 @@
|
|||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||
},
|
||||
"node_modules/node-fetch": {
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
||||
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
|
||||
"dependencies": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "4.x || >=6.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"encoding": "^0.1.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"encoding": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/nth-check": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
|
||||
|
@ -467,6 +831,14 @@
|
|||
"url": "https://github.com/fb55/nth-check?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/object-inspect": {
|
||||
"version": "1.13.1",
|
||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
|
||||
"integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/parse5": {
|
||||
"version": "7.1.2",
|
||||
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
|
||||
|
@ -598,6 +970,72 @@
|
|||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/qs": {
|
||||
"version": "6.12.1",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz",
|
||||
"integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==",
|
||||
"dependencies": {
|
||||
"side-channel": "^1.0.6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.6"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/safe-buffer": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
]
|
||||
},
|
||||
"node_modules/set-function-length": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
|
||||
"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
|
||||
"dependencies": {
|
||||
"define-data-property": "^1.1.4",
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2",
|
||||
"get-intrinsic": "^1.2.4",
|
||||
"gopd": "^1.0.1",
|
||||
"has-property-descriptors": "^1.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/side-channel": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
|
||||
"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
|
||||
"dependencies": {
|
||||
"call-bind": "^1.0.7",
|
||||
"es-errors": "^1.3.0",
|
||||
"get-intrinsic": "^1.2.4",
|
||||
"object-inspect": "^1.13.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
|
@ -609,6 +1047,11 @@
|
|||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/tr46": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
|
||||
},
|
||||
"node_modules/ts-node": {
|
||||
"version": "10.9.2",
|
||||
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
|
||||
|
@ -670,11 +1113,42 @@
|
|||
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/url-template": {
|
||||
"version": "2.0.8",
|
||||
"resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz",
|
||||
"integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw=="
|
||||
},
|
||||
"node_modules/uuid": {
|
||||
"version": "9.0.1",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
|
||||
"integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
|
||||
"funding": [
|
||||
"https://github.com/sponsors/broofa",
|
||||
"https://github.com/sponsors/ctavan"
|
||||
],
|
||||
"bin": {
|
||||
"uuid": "dist/bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/v8-compile-cache-lib": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
|
||||
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="
|
||||
},
|
||||
"node_modules/webidl-conversions": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
|
||||
},
|
||||
"node_modules/whatwg-url": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
|
||||
"dependencies": {
|
||||
"tr46": "~0.0.3",
|
||||
"webidl-conversions": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/yn": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
|
||||
|
@ -760,6 +1234,14 @@
|
|||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
|
||||
"integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A=="
|
||||
},
|
||||
"agent-base": {
|
||||
"version": "7.1.1",
|
||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
|
||||
"integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
|
||||
"requires": {
|
||||
"debug": "^4.3.4"
|
||||
}
|
||||
},
|
||||
"ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
|
@ -788,11 +1270,38 @@
|
|||
"proxy-from-env": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"base64-js": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
||||
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
|
||||
},
|
||||
"bignumber.js": {
|
||||
"version": "9.1.2",
|
||||
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz",
|
||||
"integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug=="
|
||||
},
|
||||
"boolbase": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
|
||||
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
|
||||
},
|
||||
"buffer-equal-constant-time": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
|
||||
"integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
|
||||
},
|
||||
"call-bind": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
|
||||
"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
|
||||
"requires": {
|
||||
"es-define-property": "^1.0.0",
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2",
|
||||
"get-intrinsic": "^1.2.4",
|
||||
"set-function-length": "^1.2.1"
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
||||
|
@ -872,6 +1381,24 @@
|
|||
"resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
|
||||
"integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw=="
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
||||
"requires": {
|
||||
"ms": "2.1.2"
|
||||
}
|
||||
},
|
||||
"define-data-property": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
|
||||
"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
|
||||
"requires": {
|
||||
"es-define-property": "^1.0.0",
|
||||
"es-errors": "^1.3.0",
|
||||
"gopd": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
|
@ -921,11 +1448,37 @@
|
|||
"integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==",
|
||||
"dev": true
|
||||
},
|
||||
"ecdsa-sig-formatter": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
|
||||
"integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
|
||||
"requires": {
|
||||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"entities": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
|
||||
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
|
||||
},
|
||||
"es-define-property": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
|
||||
"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
|
||||
"requires": {
|
||||
"get-intrinsic": "^1.2.4"
|
||||
}
|
||||
},
|
||||
"es-errors": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
|
||||
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
|
||||
},
|
||||
"extend": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
||||
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.15.6",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
|
||||
|
@ -953,11 +1506,127 @@
|
|||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"function-bind": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
||||
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
|
||||
},
|
||||
"gaxios": {
|
||||
"version": "6.6.0",
|
||||
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.6.0.tgz",
|
||||
"integrity": "sha512-bpOZVQV5gthH/jVCSuYuokRo2bTKOcuBiVWpjmTn6C5Agl5zclGfTljuGsQZxwwDBkli+YhZhP4TdlqTnhOezQ==",
|
||||
"requires": {
|
||||
"extend": "^3.0.2",
|
||||
"https-proxy-agent": "^7.0.1",
|
||||
"is-stream": "^2.0.0",
|
||||
"node-fetch": "^2.6.9",
|
||||
"uuid": "^9.0.1"
|
||||
}
|
||||
},
|
||||
"gcp-metadata": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz",
|
||||
"integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==",
|
||||
"requires": {
|
||||
"gaxios": "^6.0.0",
|
||||
"json-bigint": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"get-intrinsic": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
|
||||
"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
|
||||
"requires": {
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2",
|
||||
"has-proto": "^1.0.1",
|
||||
"has-symbols": "^1.0.3",
|
||||
"hasown": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"google-auth-library": {
|
||||
"version": "9.10.0",
|
||||
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.10.0.tgz",
|
||||
"integrity": "sha512-ol+oSa5NbcGdDqA+gZ3G3mev59OHBZksBTxY/tYwjtcp1H/scAFwJfSQU9/1RALoyZ7FslNbke8j4i3ipwlyuQ==",
|
||||
"requires": {
|
||||
"base64-js": "^1.3.0",
|
||||
"ecdsa-sig-formatter": "^1.0.11",
|
||||
"gaxios": "^6.1.1",
|
||||
"gcp-metadata": "^6.1.0",
|
||||
"gtoken": "^7.0.0",
|
||||
"jws": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"googleapis": {
|
||||
"version": "137.1.0",
|
||||
"resolved": "https://registry.npmjs.org/googleapis/-/googleapis-137.1.0.tgz",
|
||||
"integrity": "sha512-2L7SzN0FLHyQtFmyIxrcXhgust77067pkkduqkbIpDuj9JzVnByxsRrcRfUMFQam3rQkWW2B0f1i40IwKDWIVQ==",
|
||||
"requires": {
|
||||
"google-auth-library": "^9.0.0",
|
||||
"googleapis-common": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"googleapis-common": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.2.0.tgz",
|
||||
"integrity": "sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==",
|
||||
"requires": {
|
||||
"extend": "^3.0.2",
|
||||
"gaxios": "^6.0.3",
|
||||
"google-auth-library": "^9.7.0",
|
||||
"qs": "^6.7.0",
|
||||
"url-template": "^2.0.8",
|
||||
"uuid": "^9.0.0"
|
||||
}
|
||||
},
|
||||
"gopd": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
|
||||
"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
|
||||
"requires": {
|
||||
"get-intrinsic": "^1.1.3"
|
||||
}
|
||||
},
|
||||
"gtoken": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz",
|
||||
"integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==",
|
||||
"requires": {
|
||||
"gaxios": "^6.0.0",
|
||||
"jws": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
|
||||
},
|
||||
"has-property-descriptors": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
|
||||
"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
|
||||
"requires": {
|
||||
"es-define-property": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"has-proto": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
|
||||
"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="
|
||||
},
|
||||
"has-symbols": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
|
||||
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
|
||||
},
|
||||
"hasown": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
||||
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
||||
"requires": {
|
||||
"function-bind": "^1.1.2"
|
||||
}
|
||||
},
|
||||
"htmlparser2": {
|
||||
"version": "8.0.2",
|
||||
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
|
||||
|
@ -969,6 +1638,47 @@
|
|||
"entities": "^4.4.0"
|
||||
}
|
||||
},
|
||||
"https-proxy-agent": {
|
||||
"version": "7.0.4",
|
||||
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
|
||||
"integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
|
||||
"requires": {
|
||||
"agent-base": "^7.0.2",
|
||||
"debug": "4"
|
||||
}
|
||||
},
|
||||
"is-stream": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
|
||||
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
|
||||
},
|
||||
"json-bigint": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
|
||||
"integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
|
||||
"requires": {
|
||||
"bignumber.js": "^9.0.0"
|
||||
}
|
||||
},
|
||||
"jwa": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
|
||||
"integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
|
||||
"requires": {
|
||||
"buffer-equal-constant-time": "1.0.1",
|
||||
"ecdsa-sig-formatter": "1.0.11",
|
||||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"jws": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
|
||||
"integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
|
||||
"requires": {
|
||||
"jwa": "^2.0.0",
|
||||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"make-error": {
|
||||
"version": "1.3.6",
|
||||
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
|
||||
|
@ -987,6 +1697,19 @@
|
|||
"mime-db": "1.52.0"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||
},
|
||||
"node-fetch": {
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
||||
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
|
||||
"requires": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"nth-check": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
|
||||
|
@ -995,6 +1718,11 @@
|
|||
"boolbase": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"object-inspect": {
|
||||
"version": "1.13.1",
|
||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
|
||||
"integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="
|
||||
},
|
||||
"parse5": {
|
||||
"version": "7.1.2",
|
||||
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
|
||||
|
@ -1089,6 +1817,43 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"qs": {
|
||||
"version": "6.12.1",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz",
|
||||
"integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==",
|
||||
"requires": {
|
||||
"side-channel": "^1.0.6"
|
||||
}
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
|
||||
},
|
||||
"set-function-length": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
|
||||
"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
|
||||
"requires": {
|
||||
"define-data-property": "^1.1.4",
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2",
|
||||
"get-intrinsic": "^1.2.4",
|
||||
"gopd": "^1.0.1",
|
||||
"has-property-descriptors": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"side-channel": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
|
||||
"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
|
||||
"requires": {
|
||||
"call-bind": "^1.0.7",
|
||||
"es-errors": "^1.3.0",
|
||||
"get-intrinsic": "^1.2.4",
|
||||
"object-inspect": "^1.13.1"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
|
@ -1097,6 +1862,11 @@
|
|||
"has-flag": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"tr46": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
|
||||
},
|
||||
"ts-node": {
|
||||
"version": "10.9.2",
|
||||
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
|
||||
|
@ -1129,11 +1899,35 @@
|
|||
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
|
||||
"peer": true
|
||||
},
|
||||
"url-template": {
|
||||
"version": "2.0.8",
|
||||
"resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz",
|
||||
"integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw=="
|
||||
},
|
||||
"uuid": {
|
||||
"version": "9.0.1",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
|
||||
"integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="
|
||||
},
|
||||
"v8-compile-cache-lib": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
|
||||
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="
|
||||
},
|
||||
"webidl-conversions": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
|
||||
},
|
||||
"whatwg-url": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
|
||||
"requires": {
|
||||
"tr46": "~0.0.3",
|
||||
"webidl-conversions": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"yn": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
"axios": "^1.6.8",
|
||||
"cheerio": "^1.0.0-rc.12",
|
||||
"fs": "^0.0.1-security",
|
||||
"googleapis": "^137.1.0",
|
||||
"playwright-qase-reporter": "^1.2.2",
|
||||
"prettier": "^3.0.1",
|
||||
"ts-node": "^10.9.2"
|
||||
|
|
|
@ -95,12 +95,8 @@ exports.BasePage = class BasePage {
|
|||
this.duplicateOption = page.locator(
|
||||
'ul[class*="workspace_context_menu"] span:has-text("Duplicate")',
|
||||
);
|
||||
this.copyOption = page.locator(
|
||||
'ul[class*="workspace_context_menu"] span:has-text("Copy")',
|
||||
);
|
||||
this.pasteOption = page.locator(
|
||||
'ul[class*="workspace_context_menu"] span:has-text("Paste")',
|
||||
);
|
||||
this.copyOption = page.getByRole('listitem').filter({ hasText: 'Copy'});
|
||||
this.pasteOption = page.getByRole('listitem').filter({ hasText: 'Paste'});
|
||||
this.groupOption = page.locator(
|
||||
'ul[class*="workspace_context_menu"] span:has-text("Group")',
|
||||
);
|
||||
|
@ -197,6 +193,11 @@ exports.BasePage = class BasePage {
|
|||
await this.page.keyboard.press('Enter');
|
||||
}
|
||||
|
||||
async clickOnBackspaceAndEnter() {
|
||||
await this.page.keyboard.press('Backspace');
|
||||
await this.page.keyboard.press('Enter');
|
||||
}
|
||||
|
||||
async isHeaderDisplayed(title) {
|
||||
await expect(this.header).toHaveText(title);
|
||||
}
|
||||
|
|
|
@ -120,6 +120,7 @@ exports.DashboardPage = class DashboardPage extends BasePage {
|
|||
this.editFontMenuItem = page.locator('#font-edit');
|
||||
this.deleteFontMenuItem = page.locator('#font-delete');
|
||||
this.deleteFontButton = page.locator('input[value="Delete"]');
|
||||
this.cancelDeleteFontButton = page.getByRole('button', { name: 'Cancel' });
|
||||
this.fontsTablePlaceholder = page.locator(
|
||||
'div[class*="fonts-placeholder"] div[class*="label"]',
|
||||
);
|
||||
|
@ -130,6 +131,23 @@ exports.DashboardPage = class DashboardPage extends BasePage {
|
|||
|
||||
//Libraries & Templates
|
||||
this.noLibrariesPlacelder = page.locator('div[data-test="empty-placeholder"] p');
|
||||
|
||||
this.onboardingNextBtn = page.locator('button[data-test="onboarding-next-btn"]');
|
||||
this.onboardingContinueBtn = page.locator('button[class="main_ui_onboarding_newsletter__accept-btn"]');
|
||||
this.onboardingHeader = page.locator('h1[data-test="onboarding-welcome"]');
|
||||
this.planingToUsingDropdown = page.locator('div[class*="custom-select"]');
|
||||
this.nextButton = page.locator('button[label="Next"]');
|
||||
this.startButton = page.locator('button[label="Start"]');
|
||||
this.figmaTool = page.locator('//input[@id="experience-design-tool-figma"]/..');
|
||||
this.otherRole = page.locator('label[for="role-other"]').first();
|
||||
this.otherRoleInput = page.locator('input[id="role-other"][type="text"]');
|
||||
this.onboardingNewsHeader = page.locator('*[data-test="onboarding-newsletter-title"]');
|
||||
this.onboardingNewsUpdatesCheckbox = page.locator('label[for="newsletter-updates"]');
|
||||
this.onboardingNewsCheckbox = page.locator('label[for="newsletter-news"]');
|
||||
this.onboardingCreateTeamInput = page.locator('input[class*="team-name-input"]');
|
||||
this.onboardingContinueCreateTeamBtn = page.locator('button[label="Continue creating team"]');
|
||||
this.onboardingInviteInput = page.locator('input[class*="components_forms__inside-input"]');
|
||||
this.onboardingCreateTeamButton = page.locator('button[class*="main_ui_onboarding_team_choice__accept-button"]')
|
||||
}
|
||||
|
||||
async createFileViaPlaceholder() {
|
||||
|
@ -449,6 +467,12 @@ exports.DashboardPage = class DashboardPage extends BasePage {
|
|||
await this.deleteFontButton.click();
|
||||
}
|
||||
|
||||
async cancelDeleteFont() {
|
||||
await this.fontOptionsMenuButton.click();
|
||||
await this.deleteFontMenuItem.click();
|
||||
await this.cancelDeleteFontButton.click();
|
||||
}
|
||||
|
||||
async isFontsTablePlaceholderDisplayed(text) {
|
||||
await expect(this.fontsTablePlaceholder).toHaveText(text);
|
||||
}
|
||||
|
@ -575,4 +599,84 @@ exports.DashboardPage = class DashboardPage extends BasePage {
|
|||
await this.page.keyboard.press('Enter');
|
||||
await this.isFilePresentWithName(newFileName);
|
||||
}
|
||||
|
||||
async isOnboardingNextBtnDisplayed() {
|
||||
await expect(this.onboardingNextBtn).toBeVisible();
|
||||
}
|
||||
|
||||
async clickOnOnboardingNextBtn() {
|
||||
await this.onboardingNextBtn.click();
|
||||
}
|
||||
|
||||
async clickOnOnboardingContinueBtn() {
|
||||
await this.onboardingContinueBtn.click();
|
||||
}
|
||||
|
||||
async checkOnboardingWelcomeHeader(text) {
|
||||
await expect(this.onboardingHeader.first()).toHaveText(text);
|
||||
}
|
||||
|
||||
async selectPlaningToUsing(option) {
|
||||
await this.planingToUsingDropdown.click();
|
||||
const optionSelector = await this.page.locator(`li span:has-text("${option}")`);
|
||||
await optionSelector.click();
|
||||
}
|
||||
|
||||
async clickOnNextButton() {
|
||||
await this.nextButton.click();
|
||||
}
|
||||
|
||||
async clickOnStartButton() {
|
||||
await this.startButton.click();
|
||||
}
|
||||
|
||||
async fillSecondOnboardPage(branding, visual, wireframes) {
|
||||
await this.page.locator(`//input[@id="experience-branding-illustrations-marketing-pieces-${branding}"]/..`).click();
|
||||
await this.page.locator(`//input[@id="experience-interface-design-visual-assets-design-systems-${visual}"]/..`).click();
|
||||
await this.page.locator(`//input[@id="experience-interface-wireframes-user-journeys-flows-navigation-trees-${wireframes}"]/..`).click();
|
||||
await this.nextButton.click();
|
||||
}
|
||||
|
||||
async selectFigmaTool() {
|
||||
await this.figmaTool.click();
|
||||
}
|
||||
|
||||
async selectOnboardingOtherRole(otherRole) {
|
||||
await this.otherRole.click();
|
||||
await this.otherRoleInput.fill(otherRole);
|
||||
}
|
||||
|
||||
async selectTeamSize(option) {
|
||||
await this.planingToUsingDropdown.click();
|
||||
const optionSelector = await this.page.locator(`li span:has-text("${option}")`);
|
||||
await optionSelector.click();
|
||||
}
|
||||
|
||||
async isOnboardingNewsHeaderDisplayed() {
|
||||
await expect(this.onboardingNewsHeader).toBeVisible();
|
||||
}
|
||||
|
||||
async isOnboardingNewsUpdatesCheckboxDisplayed() {
|
||||
await expect(this.onboardingNewsUpdatesCheckbox).toBeVisible();
|
||||
}
|
||||
|
||||
async isOnboardingNewsCheckboxDisplayed() {
|
||||
await expect(this.onboardingNewsCheckbox).toBeVisible();
|
||||
}
|
||||
|
||||
async clickOnOnboardingContinueCreateTeamButton() {
|
||||
await this.onboardingContinueCreateTeamBtn.click();
|
||||
}
|
||||
|
||||
async enterOnboardingTeamName(name) {
|
||||
await this.onboardingCreateTeamInput.fill(name);
|
||||
}
|
||||
|
||||
async enterOnboardingInviteEmails(name) {
|
||||
await this.onboardingInviteInput.fill(name);
|
||||
}
|
||||
|
||||
async clickOnOnboardingCreateTeamButton() {
|
||||
await this.onboardingCreateTeamButton.click();
|
||||
}
|
||||
};
|
||||
|
|
|
@ -43,6 +43,8 @@ exports.TeamPage = class TeamPage extends BasePage {
|
|||
this.teamOwnerSection = page.locator('//div[text()="Team members"]/..');
|
||||
this.teamStatsSection = page.locator('//div[text()="Team projects"]/..');
|
||||
|
||||
this.membersMenuItem = page.locator('li[data-test="team-members"]');
|
||||
|
||||
//Invitations
|
||||
this.invitationsMenuItem = page.locator('li[data-test="team-invitations"]');
|
||||
this.inviteMembersToTeamButton = page.locator('a[data-test="invite-member"]');
|
||||
|
@ -148,6 +150,12 @@ exports.TeamPage = class TeamPage extends BasePage {
|
|||
}
|
||||
}
|
||||
|
||||
async openMembersPageViaOptionsMenu() {
|
||||
await this.teamOptionsMenuButton.click();
|
||||
await this.membersMenuItem.click();
|
||||
await this.isHeaderDisplayed('Members');
|
||||
}
|
||||
|
||||
async openInvitationsPageViaOptionsMenu() {
|
||||
await this.teamOptionsMenuButton.click();
|
||||
await this.invitationsMenuItem.click();
|
||||
|
@ -188,6 +196,26 @@ exports.TeamPage = class TeamPage extends BasePage {
|
|||
await expect(this.invitationRecordStatusCell).toHaveText(status);
|
||||
}
|
||||
|
||||
async isMultipleInvitationRecordDisplayed(email, role, status) {
|
||||
const emailSelector = `//div[contains(@class, 'dashboard_team__field-email') and contains(text(), '${email}')]`
|
||||
const emailLocator = await this.page.locator(emailSelector);
|
||||
const roleLocator = await this.page.locator(`${emailSelector}/following-sibling::div//span`);
|
||||
const statusLocator = await this.page.locator(`${emailSelector}/following-sibling::div//aside`);
|
||||
await expect(emailLocator).toHaveText(email);
|
||||
await expect(roleLocator).toHaveText(role);
|
||||
await expect(statusLocator).toHaveText(status);
|
||||
}
|
||||
|
||||
async isMultipleMemberRecordDisplayed(name, email, role) {
|
||||
const nameSelector = `//div[contains(@class, 'team__member-name') and contains(text(), '${name}')]`
|
||||
const emailLocator = await this.page.locator(`${nameSelector}/following-sibling::div`);
|
||||
const roleLocator = await this.page.locator(`${nameSelector}/../../following-sibling::div//span`);
|
||||
const nameLocator = await this.page.locator(nameSelector);
|
||||
await expect(nameLocator).toContainText(name);
|
||||
await expect(emailLocator.first()).toHaveText(email);
|
||||
await expect(roleLocator).toHaveText(role);
|
||||
}
|
||||
|
||||
async selectInvitationRoleInPopUp(role) {
|
||||
await this.inviteMembersToTeamRoleSelectorButton.click();
|
||||
switch (role) {
|
||||
|
|
|
@ -17,6 +17,12 @@ exports.LoginPage = class LoginPage extends BasePage {
|
|||
this.loginErrorBanner = page.locator('aside[class*="context_notification__warning"] div:nth-of-type(2)');
|
||||
this.createAccountLink = page.locator('a:has-text("Create an account")');
|
||||
this.forgotPasswordLink = page.locator('data-test=forgot-password');
|
||||
this.loginHereButton = page.locator('*[data-test="login-here-link"]');
|
||||
this.forgotPasswordBtn = page.locator('a[data-test="forgot-password"]');
|
||||
this.recoverySubmitBtn = page.locator('button[data-test="recovery-resquest-submit"]');
|
||||
this.recoveryPwdInput = page.locator('#password-1');
|
||||
this.recoveryPwdConfirmInput = page.locator('#password-2');
|
||||
this.changePwdButton = page.locator('button[class*="auth_recovery__submit-btn"]')
|
||||
}
|
||||
|
||||
async checkLoginError(text) {
|
||||
|
@ -66,6 +72,29 @@ exports.LoginPage = class LoginPage extends BasePage {
|
|||
async clickOnCreateAccount() {
|
||||
await this.createAccountLink.click();
|
||||
}
|
||||
async clickOnLoginHereLinc() {
|
||||
await this.loginHereButton.click();
|
||||
}
|
||||
|
||||
async clickOnForgotPasswordButton() {
|
||||
await this.forgotPasswordBtn.click();
|
||||
}
|
||||
|
||||
async clickOnRecoverySubmitButton() {
|
||||
await this.recoverySubmitBtn.click();
|
||||
}
|
||||
|
||||
async enterNewPwd(loginPwd) {
|
||||
await this.recoveryPwdInput.fill(loginPwd);
|
||||
}
|
||||
|
||||
async enterConfirmPwd(loginPwd) {
|
||||
await this.recoveryPwdConfirmInput.fill(loginPwd);
|
||||
}
|
||||
|
||||
async clickOnChangePwdButton() {
|
||||
await this.changePwdButton.click();
|
||||
}
|
||||
|
||||
async clickOnForgotPassword() {
|
||||
await this.forgotPasswordLink.click();
|
||||
|
|
|
@ -25,6 +25,10 @@ exports.ProfilePage = class ProfilePage extends BasePage {
|
|||
this.profileAvatarBlock = page.locator(
|
||||
'div.main_ui_settings_profile__form-container',
|
||||
);
|
||||
this.changeEmailBtn = page.locator('div[class="change-email"]');
|
||||
this.newEmailInput = page.locator('#email-1');
|
||||
this.confirmNewEmailInput = page.locator('#email-2');
|
||||
this.confirmChangeEmailBtn = page.locator('div[data-test="change-email-submit"] button');
|
||||
|
||||
//Feedback
|
||||
this.feedbackSubjectInput = page.locator('#subject');
|
||||
|
@ -104,6 +108,15 @@ exports.ProfilePage = class ProfilePage extends BasePage {
|
|||
await this.saveSettingsButton.click();
|
||||
}
|
||||
|
||||
async changeEmail(newEmail) {
|
||||
await this.profileMenuButton.click();
|
||||
await this.yourAccountMenuItem.click();
|
||||
await this.changeEmailBtn.click();
|
||||
await this.newEmailInput.fill(newEmail);
|
||||
await this.confirmNewEmailInput.fill(newEmail);
|
||||
await this.confirmChangeEmailBtn.click();
|
||||
}
|
||||
|
||||
async enterSubjectToGiveFeedbackForm(text) {
|
||||
await this.feedbackSubjectInput.fill(text);
|
||||
}
|
||||
|
|
|
@ -12,9 +12,14 @@ exports.RegisterPage = class RegisterPage extends BasePage {
|
|||
this.emailInput = page.locator('#email');
|
||||
this.passwordInput = page.locator('#password');
|
||||
this.createAccountBtn = page.locator('button[data-test="register-form-submit"]');
|
||||
this.createAccountSecondBtn = page.locator('button[type="submit"]');
|
||||
this.emailInputError = page.locator('div[data-test="email-input-error"]');
|
||||
this.passwordInputHint = page.locator('div.main_ui_components_forms__hint');
|
||||
this.passwordInputError = page.locator('div[data-test="-error"]');
|
||||
this.fullnameInput = page.locator('input[id="fullname"]');
|
||||
this.acceptTermsCheckbox = page.locator('label[for="accept-terms-and-privacy"] span');
|
||||
this.regEmailNotification = page.locator('div[class*="notification-text-email"]');
|
||||
this.createDemoAccountBtn = page.locator('div[class*="auth_register__demo-account"]');
|
||||
}
|
||||
|
||||
async isRegisterPageOpened() {
|
||||
|
@ -30,6 +35,22 @@ exports.RegisterPage = class RegisterPage extends BasePage {
|
|||
await this.passwordInput.fill(password);
|
||||
}
|
||||
|
||||
async enterFullName(name) {
|
||||
await this.fullnameInput.fill(name);
|
||||
}
|
||||
|
||||
async clickOnAcceptTermsCheckbox() {
|
||||
await this.acceptTermsCheckbox.click();
|
||||
}
|
||||
|
||||
async clickOnCreateAccountBtn() {
|
||||
await this.createAccountBtn.click();
|
||||
}
|
||||
|
||||
async clickOnCreateAccountSecondBtn() {
|
||||
await this.createAccountSecondBtn.click();
|
||||
}
|
||||
|
||||
async isCreateAccountBtnDisplayed() {
|
||||
await expect(this.createAccountBtn).toBeVisible();
|
||||
}
|
||||
|
@ -57,4 +78,13 @@ exports.RegisterPage = class RegisterPage extends BasePage {
|
|||
async clickOnHeader() {
|
||||
await this.pageTitle.click();
|
||||
}
|
||||
|
||||
async isRegisterEmailCorrect(email) {
|
||||
await expect(this.regEmailNotification).toBeVisible();
|
||||
await expect(this.regEmailNotification).toHaveText(email);
|
||||
}
|
||||
|
||||
async clickOnCreateDemoAccountBtn() {
|
||||
await this.createDemoAccountBtn.click();
|
||||
}
|
||||
};
|
||||
|
|
|
@ -10,6 +10,9 @@ exports.LayersPanelPage = class LayersPanelPage extends BasePage {
|
|||
|
||||
this.layersTab = page.locator('div[data-id="layers"]');
|
||||
this.layersSidebar = page.locator('#layers');
|
||||
this.sidebarLayerItem = page.locator(
|
||||
'div[class*="workspace_sidebar_layer_item__layer-row"]',
|
||||
);
|
||||
this.createdLayerOnLayersPanelNameInput = page.locator(
|
||||
'div[class*="element-list-body"] input[class*="element-name"]',
|
||||
);
|
||||
|
@ -261,4 +264,15 @@ exports.LayersPanelPage = class LayersPanelPage extends BasePage {
|
|||
await this.copyComponentLayer.click({ button: 'right', force: true });
|
||||
await this.detachInstanceOption.click();
|
||||
}
|
||||
|
||||
async copyLayerViaRightClick(layerName) {
|
||||
const layerSel = this.page.locator('#layers').getByText(layerName);
|
||||
await layerSel.last().click({
|
||||
button: 'right',
|
||||
force: true,
|
||||
});
|
||||
await this.copyOption.click();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -72,6 +72,10 @@ const config = {
|
|||
launchOptions: {
|
||||
ignoreDefaultArgs: ['--hide-scrollbars'],
|
||||
},
|
||||
contextOptions: {
|
||||
// chromium-specific permissions
|
||||
permissions: ['clipboard-read', 'clipboard-write'],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -88,6 +92,16 @@ const config = {
|
|||
width: 1920,
|
||||
},
|
||||
},
|
||||
launchOptions: {
|
||||
firefoxUserPrefs: {
|
||||
'dom.events.asyncClipboard.readText': true,
|
||||
'dom.events.testing.asyncClipboard': true,
|
||||
},
|
||||
},
|
||||
contextOptions: {
|
||||
// chromium-specific permissions
|
||||
permissions: ['clipboard-read', 'clipboard-write'],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'webkit',
|
||||
|
|
|
@ -32,6 +32,24 @@ test.afterEach(async ({ page }, testInfo) => {
|
|||
await updateTestResults(testInfo.status, testInfo.retry)
|
||||
});
|
||||
|
||||
|
||||
mainTest(qase(1496,'PENPOT-1496 Undo deleted component'), async ({ browserName }) => {
|
||||
await mainPage.createDefaultRectangleByCoordinates(200, 300);
|
||||
await mainPage.createComponentViaRightClick();
|
||||
await mainPage.waitForChangeIsSaved();
|
||||
await mainPage.duplicateLayerViaRightClick();
|
||||
await mainPage.waitForChangeIsSaved();
|
||||
await layersPanelPage.clickCopyComponentOnLayersTab();
|
||||
await designPanelPage.changeAxisXandYForLayer('400', '300');
|
||||
await mainPage.waitForChangeIsSaved();
|
||||
await mainPage.pressDeleteKeyboardButton()
|
||||
await expect(mainPage.viewport).toHaveScreenshot('rectangle-copy-component-delete.png');
|
||||
await mainPage.clickShortcutCtrlZ(browserName);
|
||||
await expect(mainPage.viewport).toHaveScreenshot(
|
||||
'rectangle-copy-component-delete-undo.png',
|
||||
);
|
||||
});
|
||||
|
||||
mainTest(qase(1497,'PENPOT-1497 Delete copy component from DEL button'), async () => {
|
||||
await mainPage.createDefaultRectangleByCoordinates(200, 300);
|
||||
await mainPage.createComponentViaRightClick();
|
||||
|
|
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
@ -74,6 +74,15 @@ test.describe(() => {
|
|||
await layersPanelPage.isBoardNameDisplayed(renamedName);
|
||||
});
|
||||
|
||||
mainTest(qase(220,'CO-5 Rename board with empty field'), async ({ page }) => {
|
||||
const defaultBoardName = 'Board';
|
||||
const layersPanelPage = new LayersPanelPage(page);
|
||||
const mainPage = new MainPage(page);
|
||||
await mainPage.doubleClickCreatedBoardTitleOnCanvas();
|
||||
await layersPanelPage.clickOnBackspaceAndEnter();
|
||||
await layersPanelPage.isBoardNameDisplayed(defaultBoardName);
|
||||
});
|
||||
|
||||
mainTest(
|
||||
qase(224,'CO-9 Add, hide, unhide, change type and delete Shadow to board'),
|
||||
async ({ page }) => {
|
||||
|
@ -450,6 +459,22 @@ test.describe(() => {
|
|||
},
|
||||
);
|
||||
|
||||
mainTest(
|
||||
qase(251,'CO-36 Copy and Paste Board'),
|
||||
async ({ page }) => {
|
||||
const mainPage = new MainPage(page);
|
||||
const layersPanelPage = new LayersPanelPage(page);
|
||||
const board1 = 'Board #1';
|
||||
await mainPage.copyLayerViaRightClick();
|
||||
await mainPage.pasteLayerViaRightClick();
|
||||
await layersPanelPage.copyLayerViaRightClick(board1);
|
||||
await mainPage.pasteLayerViaRightClick();
|
||||
await mainPage.pressCopyShortcut();
|
||||
await mainPage.pressPasteShortcut();
|
||||
await expect(layersPanelPage.sidebarLayerItem).toHaveCount(5);
|
||||
},
|
||||
);
|
||||
|
||||
mainTest(
|
||||
qase(268,"CO-53 Click 'Focus on' board from right click"),
|
||||
async ({ page }) => {
|
||||
|
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
@ -62,6 +62,14 @@ mainTest(qase(59,'DA-5 Rename file in Drafts via right click'), async ({ page })
|
|||
await dashboardPage.renameFile('test');
|
||||
});
|
||||
|
||||
mainTest(qase(60,'DA-6 Rename file (in Drafts) via Options icon'), async ({ page }) => {
|
||||
const dashboardPage = new DashboardPage(page);
|
||||
const mainPage = new MainPage(page);
|
||||
await dashboardPage.createFileViaPlaceholder();
|
||||
await mainPage.clickPencilBoxButton();
|
||||
await dashboardPage.renameFile('test', false);
|
||||
});
|
||||
|
||||
mainTest(qase(61,'DA-7 Duplicate file in Drafts via right click'), async ({ page }) => {
|
||||
const dashboardPage = new DashboardPage(page);
|
||||
const mainPage = new MainPage(page);
|
||||
|
|
|
@ -62,3 +62,12 @@ mainTest(qase(1158,'DA-72 Delete font'), async ({ page }) => {
|
|||
'Custom fonts you upload will appear here.',
|
||||
);
|
||||
});
|
||||
|
||||
mainTest(qase(1159,'DA-73 Delete font - Cancel button check'), async ({ page }) => {
|
||||
const dashboardPage = new DashboardPage(page);
|
||||
await dashboardPage.openSidebarItem('Fonts');
|
||||
await dashboardPage.uploadFont('fonts/Pacifico.ttf');
|
||||
await dashboardPage.isFontExists('Pacifico', 'Regular');
|
||||
await dashboardPage.cancelDeleteFont();
|
||||
await dashboardPage.isFontExists('Pacifico', 'Regular');
|
||||
});
|
||||
|
|
|
@ -7,6 +7,9 @@ const { MainPage } = require('../../pages/workspace/main-page');
|
|||
const { random } = require('../../helpers/string-generator');
|
||||
const { updateTestResults } = require('./../../helpers/saveTestResults.js');
|
||||
const { qase } = require('playwright-qase-reporter/dist/playwright');
|
||||
const { getRegisterMessage, checkInviteText } = require('../../helpers/gmail');
|
||||
const { LoginPage } = require('../../pages/login-page');
|
||||
const { RegisterPage } = require('../../pages/register-page');
|
||||
|
||||
|
||||
test.describe(() => {
|
||||
|
@ -114,6 +117,59 @@ test.describe(() => {
|
|||
},
|
||||
);
|
||||
|
||||
// mainTest(
|
||||
// qase(1166,'DA-80 Team Invitations invite via owner single invitation, editor'),
|
||||
// async ({ page }) => {
|
||||
// const email = `${process.env.GMAIL_NAME}+${randomName}@gmail.com`;
|
||||
// const teamPage = new TeamPage(page);
|
||||
// const profilePage = new ProfilePage(page);
|
||||
// const loginPage = new LoginPage(page);
|
||||
// const dashboardPage = new DashboardPage(page);
|
||||
// await teamPage.createTeam(team);
|
||||
// await teamPage.isTeamSelected(team);
|
||||
// await teamPage.openInvitationsPageViaOptionsMenu();
|
||||
// await teamPage.clickInviteMembersToTeamButton();
|
||||
// await teamPage.isInviteMembersPopUpHeaderDisplayed(
|
||||
// 'Invite members to the team',
|
||||
// );
|
||||
// await teamPage.enterEmailToInviteMembersPopUp(email);
|
||||
// await teamPage.clickSendInvitationButton();
|
||||
// await teamPage.isSuccessMessageDisplayed('Invitation sent successfully');
|
||||
// await teamPage.isInvitationRecordDisplayed(
|
||||
// email,
|
||||
// 'Editor',
|
||||
// 'Pending',
|
||||
// );
|
||||
// await page.waitForTimeout(30000);
|
||||
// const invite = await getRegisterMessage(email);
|
||||
// await checkInviteText(invite.inviteText, team);
|
||||
// await profilePage.logout();
|
||||
// await loginPage.isLoginPageOpened();
|
||||
//
|
||||
// await page.goto(invite.inviteUrl);
|
||||
// await registerPage.isRegisterPageOpened();
|
||||
// await registerPage.enterEmail(email);
|
||||
// await registerPage.enterPassword(process.env.LOGIN_PWD);
|
||||
// await registerPage.clickOnCreateAccountBtn();
|
||||
// await registerPage.enterFullName(team);
|
||||
// await registerPage.clickOnAcceptTermsCheckbox();
|
||||
// await registerPage.clickOnCreateAccountSecondBtn();
|
||||
// await registerPage.isRegisterEmailCorrect(email);
|
||||
// await page.waitForTimeout(30000);
|
||||
// const confirm = await getRegisterMessage(email);
|
||||
// console.log(confirm.inviteUrl);
|
||||
// await page.goto(confirm.inviteUrl);
|
||||
// await teamPage.isTeamSelected(team);
|
||||
//
|
||||
// await profilePage.logout();
|
||||
// await loginPage.isLoginPageOpened();
|
||||
// await loginPage.enterEmail(process.env.LOGIN_EMAIL);
|
||||
// await loginPage.enterPwd(process.env.LOGIN_PWD);
|
||||
// await loginPage.clickLoginButton();
|
||||
// await dashboardPage.isDashboardOpenedAfterLogin();
|
||||
// },
|
||||
// );
|
||||
|
||||
test.afterEach(async ({ page }) => {
|
||||
const teamPage = new TeamPage(page);
|
||||
await teamPage.deleteTeam(team);
|
||||
|
@ -417,6 +473,244 @@ test.describe(() => {
|
|||
});
|
||||
});
|
||||
|
||||
test.describe(() => {
|
||||
const team = random().concat('autotest');
|
||||
const firstEditor = random().concat('autotest');
|
||||
const secondEditor = random().concat('autotest');
|
||||
|
||||
mainTest(
|
||||
qase(1168,'DA-82 Team. Invitations - invite via owner (multiple invitations, editor)'),
|
||||
async ({ page }) => {
|
||||
const firstEmail = `${process.env.GMAIL_NAME}+${firstEditor}@gmail.com`;
|
||||
const secondEmail = `${process.env.GMAIL_NAME}+${secondEditor}@gmail.com`;
|
||||
const profilePage = new ProfilePage(page);
|
||||
const dashboardPage = new DashboardPage(page);
|
||||
const loginPage = new LoginPage(page);
|
||||
const teamPage = new TeamPage(page);
|
||||
const registerPage = new RegisterPage(page);
|
||||
await teamPage.createTeam(team);
|
||||
await teamPage.isTeamSelected(team);
|
||||
await teamPage.openInvitationsPageViaOptionsMenu();
|
||||
await teamPage.clickInviteMembersToTeamButton();
|
||||
await teamPage.isInviteMembersPopUpHeaderDisplayed(
|
||||
'Invite members to the team',
|
||||
);
|
||||
await teamPage.enterEmailToInviteMembersPopUp(`${firstEmail}, ${secondEmail}`);
|
||||
await teamPage.clickSendInvitationButton();
|
||||
await teamPage.isSuccessMessageDisplayed('Invitation sent successfully');
|
||||
await teamPage.isMultipleInvitationRecordDisplayed(
|
||||
firstEmail,
|
||||
'Editor',
|
||||
'Pending',
|
||||
);
|
||||
await teamPage.isMultipleInvitationRecordDisplayed(
|
||||
secondEmail,
|
||||
'Editor',
|
||||
'Pending'
|
||||
);
|
||||
await page.waitForTimeout(30000);
|
||||
const firstInvite = await getRegisterMessage(firstEmail);
|
||||
const secondInvite = await getRegisterMessage(secondEmail);
|
||||
await checkInviteText(firstInvite.inviteText, team);
|
||||
await checkInviteText(secondInvite.inviteText, team);
|
||||
await profilePage.logout();
|
||||
await loginPage.isLoginPageOpened();
|
||||
|
||||
await page.goto(firstInvite.inviteUrl);
|
||||
await registerPage.isRegisterPageOpened();
|
||||
await registerPage.enterEmail(firstEmail);
|
||||
await registerPage.enterPassword(process.env.LOGIN_PWD);
|
||||
await registerPage.clickOnCreateAccountBtn();
|
||||
await registerPage.enterFullName(firstEditor);
|
||||
await registerPage.clickOnAcceptTermsCheckbox();
|
||||
await registerPage.clickOnCreateAccountSecondBtn();
|
||||
await dashboardPage.isOnboardingNextBtnDisplayed();
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.checkOnboardingWelcomeHeader('Before you start');
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.reloadPage();
|
||||
await teamPage.isTeamSelected(team);
|
||||
await profilePage.logout();
|
||||
await loginPage.isLoginPageOpened();
|
||||
await page.goto(secondInvite.inviteUrl);
|
||||
await registerPage.isRegisterPageOpened();
|
||||
await registerPage.enterEmail(secondEmail);
|
||||
await registerPage.enterPassword(process.env.LOGIN_PWD);
|
||||
await registerPage.clickOnCreateAccountBtn();
|
||||
await registerPage.enterFullName(secondEditor);
|
||||
await registerPage.clickOnAcceptTermsCheckbox();
|
||||
await registerPage.clickOnCreateAccountSecondBtn();
|
||||
await dashboardPage.isOnboardingNextBtnDisplayed();
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.checkOnboardingWelcomeHeader('Before you start');
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.reloadPage();
|
||||
await teamPage.isTeamSelected(team);
|
||||
|
||||
await teamPage.openMembersPageViaOptionsMenu();
|
||||
await teamPage.isMultipleMemberRecordDisplayed(
|
||||
firstEditor,
|
||||
firstEmail,
|
||||
'Editor'
|
||||
);
|
||||
await teamPage.isMultipleMemberRecordDisplayed(
|
||||
secondEditor,
|
||||
secondEmail,
|
||||
'Editor'
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
test.afterEach(async ({ page }) => {
|
||||
const teamPage = new TeamPage(page);
|
||||
const dashboardPage = new DashboardPage(page);
|
||||
const loginPage = new LoginPage(page);
|
||||
const profilePage = new ProfilePage(page);
|
||||
await profilePage.logout();
|
||||
await loginPage.isLoginPageOpened();
|
||||
await loginPage.enterEmail(process.env.LOGIN_EMAIL);
|
||||
await loginPage.enterPwd(process.env.LOGIN_PWD);
|
||||
await loginPage.clickLoginButton();
|
||||
await dashboardPage.isDashboardOpenedAfterLogin();
|
||||
await teamPage.switchTeam(team);
|
||||
await teamPage.deleteTeam(team);
|
||||
});
|
||||
});
|
||||
|
||||
test.describe(() => {
|
||||
const team = random().concat('autotest');
|
||||
const mainAdmin = random().concat('autotest');
|
||||
const firstAdmin = random().concat('autotest');
|
||||
const secondAdmin = random().concat('autotest');
|
||||
const mainEmail = `${process.env.GMAIL_NAME}+${mainAdmin}@gmail.com`;
|
||||
const firstEmail = `${process.env.GMAIL_NAME}+${firstAdmin}@gmail.com`;
|
||||
const secondEmail = `${process.env.GMAIL_NAME}+${secondAdmin}@gmail.com`;
|
||||
|
||||
mainTest(
|
||||
qase(1173,'DA-87 Team. Invitations - invite via admin (multiple invitations, admin)'),
|
||||
async ({ page }, testInfo) => {
|
||||
await testInfo.setTimeout(testInfo.timeout + 60000);
|
||||
const profilePage = new ProfilePage(page);
|
||||
const dashboardPage = new DashboardPage(page);
|
||||
const loginPage = new LoginPage(page);
|
||||
const teamPage = new TeamPage(page);
|
||||
const registerPage = new RegisterPage(page);
|
||||
|
||||
await teamPage.createTeam(team);
|
||||
await teamPage.isTeamSelected(team);
|
||||
await teamPage.openInvitationsPageViaOptionsMenu();
|
||||
await teamPage.clickInviteMembersToTeamButton();
|
||||
await teamPage.selectInvitationRoleInPopUp('Admin');
|
||||
await teamPage.enterEmailToInviteMembersPopUp(mainEmail);
|
||||
await teamPage.clickSendInvitationButton();
|
||||
await page.waitForTimeout(30000);
|
||||
const mainInvite = await getRegisterMessage(mainEmail);
|
||||
await profilePage.logout();
|
||||
await loginPage.isLoginPageOpened();
|
||||
|
||||
await page.goto(mainInvite.inviteUrl);
|
||||
await registerPage.isRegisterPageOpened();
|
||||
await registerPage.enterEmail(mainEmail);
|
||||
await registerPage.enterPassword(process.env.LOGIN_PWD);
|
||||
await registerPage.clickOnCreateAccountBtn();
|
||||
await registerPage.enterFullName(mainAdmin);
|
||||
await registerPage.clickOnAcceptTermsCheckbox();
|
||||
await registerPage.clickOnCreateAccountSecondBtn();
|
||||
await dashboardPage.isOnboardingNextBtnDisplayed();
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.checkOnboardingWelcomeHeader('Before you start');
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.reloadPage();
|
||||
await teamPage.isTeamSelected(team);
|
||||
|
||||
await teamPage.openInvitationsPageViaOptionsMenu();
|
||||
await teamPage.clickInviteMembersToTeamButton();
|
||||
await teamPage.isInviteMembersPopUpHeaderDisplayed(
|
||||
'Invite members to the team',
|
||||
);
|
||||
await teamPage.enterEmailToInviteMembersPopUp(`${firstEmail}, ${secondEmail}`);
|
||||
await teamPage.selectInvitationRoleInPopUp('Admin');
|
||||
await teamPage.clickSendInvitationButton();
|
||||
await teamPage.isSuccessMessageDisplayed('Invitation sent successfully');
|
||||
await teamPage.isMultipleInvitationRecordDisplayed(
|
||||
firstEmail,
|
||||
'Admin',
|
||||
'Pending',
|
||||
);
|
||||
await teamPage.isMultipleInvitationRecordDisplayed(
|
||||
secondEmail,
|
||||
'Admin',
|
||||
'Pending'
|
||||
);
|
||||
await page.waitForTimeout(30000);
|
||||
const firstInvite = await getRegisterMessage(firstEmail);
|
||||
const secondInvite = await getRegisterMessage(secondEmail);
|
||||
await checkInviteText(firstInvite.inviteText, team, mainAdmin);
|
||||
await checkInviteText(secondInvite.inviteText, team, mainAdmin);
|
||||
await profilePage.logout();
|
||||
await loginPage.isLoginPageOpened();
|
||||
|
||||
await page.goto(firstInvite.inviteUrl);
|
||||
await registerPage.isRegisterPageOpened();
|
||||
await registerPage.enterEmail(firstEmail);
|
||||
await registerPage.enterPassword(process.env.LOGIN_PWD);
|
||||
await registerPage.clickOnCreateAccountBtn();
|
||||
await registerPage.enterFullName(firstAdmin);
|
||||
await registerPage.clickOnAcceptTermsCheckbox();
|
||||
await registerPage.clickOnCreateAccountSecondBtn();
|
||||
await dashboardPage.isOnboardingNextBtnDisplayed();
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.checkOnboardingWelcomeHeader('Before you start');
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.reloadPage();
|
||||
await teamPage.isTeamSelected(team);
|
||||
await profilePage.logout();
|
||||
await loginPage.isLoginPageOpened();
|
||||
await page.goto(secondInvite.inviteUrl);
|
||||
await registerPage.isRegisterPageOpened();
|
||||
await registerPage.enterEmail(secondEmail);
|
||||
await registerPage.enterPassword(process.env.LOGIN_PWD);
|
||||
await registerPage.clickOnCreateAccountBtn();
|
||||
await registerPage.enterFullName(secondAdmin);
|
||||
await registerPage.clickOnAcceptTermsCheckbox();
|
||||
await registerPage.clickOnCreateAccountSecondBtn();
|
||||
await dashboardPage.isOnboardingNextBtnDisplayed();
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.checkOnboardingWelcomeHeader('Before you start');
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.reloadPage();
|
||||
await teamPage.isTeamSelected(team);
|
||||
|
||||
await teamPage.openMembersPageViaOptionsMenu();
|
||||
await teamPage.isMultipleMemberRecordDisplayed(
|
||||
firstAdmin,
|
||||
firstEmail,
|
||||
'Admin'
|
||||
);
|
||||
await teamPage.isMultipleMemberRecordDisplayed(
|
||||
secondAdmin,
|
||||
secondEmail,
|
||||
'Admin'
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
test.afterEach(async ({ page }) => {
|
||||
const teamPage = new TeamPage(page);
|
||||
const dashboardPage = new DashboardPage(page);
|
||||
const loginPage = new LoginPage(page);
|
||||
const profilePage = new ProfilePage(page);
|
||||
await profilePage.logout();
|
||||
await loginPage.isLoginPageOpened();
|
||||
await loginPage.enterEmail(process.env.LOGIN_EMAIL);
|
||||
await loginPage.enterPwd(process.env.LOGIN_PWD);
|
||||
await loginPage.clickLoginButton();
|
||||
await dashboardPage.isDashboardOpenedAfterLogin();
|
||||
await teamPage.switchTeam(team);
|
||||
await teamPage.deleteTeam(team);
|
||||
});
|
||||
});
|
||||
|
||||
test.afterEach(async ({ page }, testInfo) => {
|
||||
await updateTestResults(testInfo.status, testInfo.retry)
|
||||
});
|
||||
|
|
|
@ -5,6 +5,9 @@ const { LoginPage } = require('../pages/login-page');
|
|||
const { expect, test } = require('@playwright/test');
|
||||
const { updateTestResults } = require('./../helpers/saveTestResults.js');
|
||||
const { qase } = require('playwright-qase-reporter/dist/playwright');
|
||||
const { RegisterPage } = require('../pages/register-page');
|
||||
const { getRegisterMessage, checkNewEmailText } = require('../helpers/gmail');
|
||||
const { DashboardPage } = require('../pages/dashboard/dashboard-page');
|
||||
|
||||
mainTest(qase(187,'PR-1 Edit profile name'), async ({ page }) => {
|
||||
const newName = random();
|
||||
|
@ -103,6 +106,58 @@ mainTest(qase(208,'PR-22 Send feedback email with valid data'), async ({ page })
|
|||
await profilePage.isSuccessMessageDisplayed('Feedback sent');
|
||||
});
|
||||
|
||||
test.describe(() => {
|
||||
let randomName,email,invite;
|
||||
test.beforeEach(async ({ page }, testInfo) => {
|
||||
await testInfo.setTimeout(testInfo.timeout + 30000);
|
||||
randomName = random().concat('autotest');
|
||||
email = `${process.env.GMAIL_NAME}+${randomName}@gmail.com`;
|
||||
const loginPage = new LoginPage(page);
|
||||
const registerPage = new RegisterPage(page);
|
||||
await loginPage.goto();
|
||||
await loginPage.acceptCookie();
|
||||
await loginPage.clickOnCreateAccount();
|
||||
await registerPage.isRegisterPageOpened();
|
||||
await registerPage.enterEmail(email);
|
||||
await registerPage.enterPassword(process.env.LOGIN_PWD);
|
||||
await registerPage.clickOnCreateAccountBtn();
|
||||
|
||||
await registerPage.enterFullName(randomName);
|
||||
await registerPage.clickOnAcceptTermsCheckbox();
|
||||
await registerPage.clickOnCreateAccountSecondBtn();
|
||||
await registerPage.isRegisterEmailCorrect(email);
|
||||
await page.waitForTimeout(30000);
|
||||
invite = await getRegisterMessage(email);
|
||||
console.log(invite.inviteUrl);
|
||||
});
|
||||
|
||||
test(qase(190,'PR-4 Change email to valid'), async ({ page }) => {
|
||||
const newEmail = `${process.env.GMAIL_NAME}+${random().concat('autotest')}@gmail.com`;
|
||||
const dashboardPage = new DashboardPage(page);
|
||||
const loginPage = new LoginPage(page);
|
||||
const profilePage = new ProfilePage(page);
|
||||
await page.goto(invite.inviteUrl);
|
||||
await dashboardPage.isOnboardingNextBtnDisplayed();
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.checkOnboardingWelcomeHeader('Before you start');
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.reloadPage();
|
||||
await profilePage.changeEmail(newEmail);
|
||||
await page.waitForTimeout(30000);
|
||||
const changeEmail = await getRegisterMessage(email);
|
||||
console.log(changeEmail.inviteUrl);
|
||||
await checkNewEmailText(changeEmail.inviteText, randomName, newEmail);
|
||||
await page.goto(changeEmail.inviteUrl);
|
||||
await profilePage.logout();
|
||||
await loginPage.isLoginPageOpened();
|
||||
await loginPage.enterEmail(newEmail);
|
||||
await loginPage.enterPwd(process.env.LOGIN_PWD);
|
||||
await loginPage.clickLoginButton();
|
||||
await dashboardPage.isDashboardOpenedAfterLogin();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
test.afterEach(async ({ page }, testInfo) => {
|
||||
await updateTestResults(testInfo.status, testInfo.retry)
|
||||
});
|
||||
|
|
|
@ -3,6 +3,11 @@ const { LoginPage } = require('../pages/login-page');
|
|||
const { RegisterPage } = require('../pages/register-page');
|
||||
const { updateTestResults } = require('./../helpers/saveTestResults.js');
|
||||
const { qase } = require('playwright-qase-reporter/dist/playwright');
|
||||
const { random } = require('../helpers/string-generator');
|
||||
const { getRegisterMessage, checkRegisterText, checkRecoveryText } = require('../helpers/gmail');
|
||||
const { DashboardPage } = require('../pages/dashboard/dashboard-page');
|
||||
const { TeamPage } = require('../pages/dashboard/team-page');
|
||||
const { ProfilePage } = require('../pages/profile-page');
|
||||
|
||||
test(qase(32,'ON-5 Sign up with invalid email address'), async ({ page }) => {
|
||||
const loginPage = new LoginPage(page);
|
||||
|
@ -46,6 +51,118 @@ test(qase(34,'ON-7 Sign up with incorrect password'), async ({ page }) => {
|
|||
await registerPage.isCreateAccountBtnDisabled();
|
||||
});
|
||||
|
||||
test.describe(() => {
|
||||
let randomName,email,invite;
|
||||
test.beforeEach(async ({ page }, testInfo) => {
|
||||
await testInfo.setTimeout(testInfo.timeout + 30000);
|
||||
randomName = random().concat('autotest');
|
||||
email = `${process.env.GMAIL_NAME}+${randomName}@gmail.com`;
|
||||
const loginPage = new LoginPage(page);
|
||||
const registerPage = new RegisterPage(page);
|
||||
await loginPage.goto();
|
||||
await loginPage.acceptCookie();
|
||||
await loginPage.clickOnCreateAccount();
|
||||
await registerPage.isRegisterPageOpened();
|
||||
await registerPage.enterEmail(email);
|
||||
await registerPage.enterPassword(process.env.LOGIN_PWD);
|
||||
await registerPage.clickOnCreateAccountBtn();
|
||||
|
||||
await registerPage.enterFullName(randomName);
|
||||
await registerPage.clickOnAcceptTermsCheckbox();
|
||||
await registerPage.clickOnCreateAccountSecondBtn();
|
||||
await registerPage.isRegisterEmailCorrect(email);
|
||||
await page.waitForTimeout(30000);
|
||||
invite = await getRegisterMessage(email);
|
||||
console.log(invite.inviteUrl);
|
||||
});
|
||||
|
||||
test(qase(28,'ON-1 Sign up with an email address'), async ({ page }) => {
|
||||
const dashboardPage = new DashboardPage(page);
|
||||
await checkRegisterText(invite.inviteText, randomName);
|
||||
await page.goto(invite.inviteUrl);
|
||||
await dashboardPage.isOnboardingNextBtnDisplayed();
|
||||
});
|
||||
|
||||
test(qase([43,44],'ON-16,17 Onboarding questions flow'), async ({ page }) => {
|
||||
const dashboardPage = new DashboardPage(page);
|
||||
const teamPage = new TeamPage(page);
|
||||
await page.goto(invite.inviteUrl);
|
||||
await dashboardPage.isOnboardingNextBtnDisplayed();
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.checkOnboardingWelcomeHeader('Before you start');
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.selectPlaningToUsing('Start to work on my project');
|
||||
await dashboardPage.clickOnNextButton();
|
||||
await dashboardPage.fillSecondOnboardPage('none', 'some', 'a-lot');
|
||||
await dashboardPage.selectFigmaTool();
|
||||
await dashboardPage.clickOnNextButton();
|
||||
await dashboardPage.selectOnboardingOtherRole('QA');
|
||||
await dashboardPage.selectTeamSize('11-30');
|
||||
await dashboardPage.clickOnStartButton();
|
||||
await dashboardPage.isOnboardingNewsHeaderDisplayed();
|
||||
await dashboardPage.isOnboardingNewsUpdatesCheckboxDisplayed();
|
||||
await dashboardPage.isOnboardingNewsCheckboxDisplayed();
|
||||
await dashboardPage.clickOnOnboardingContinueBtn();
|
||||
await dashboardPage.enterOnboardingTeamName(randomName);
|
||||
await dashboardPage.clickOnOnboardingContinueCreateTeamButton();
|
||||
const rand1 = random().concat('autotest');
|
||||
const firstEmail = `${process.env.GMAIL_NAME}+${rand1}@gmail.com`;
|
||||
const rand2 = random().concat('autotest');
|
||||
const secondEmail = `${process.env.GMAIL_NAME}+${rand2}@gmail.com`;
|
||||
const emails = `${firstEmail}, ${secondEmail}`;
|
||||
await dashboardPage.enterOnboardingInviteEmails(emails);
|
||||
await dashboardPage.clickOnOnboardingCreateTeamButton();
|
||||
await teamPage.isTeamSelected(randomName);
|
||||
});
|
||||
|
||||
test(qase(49,'ON-22 Forgot password flow'), async ({ page }) => {
|
||||
const newPwd = 'TestForgotPassword123';
|
||||
const dashboardPage = new DashboardPage(page);
|
||||
const loginPage = new LoginPage(page);
|
||||
const profilePage = new ProfilePage(page);
|
||||
await page.goto(invite.inviteUrl);
|
||||
await dashboardPage.isOnboardingNextBtnDisplayed();
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.checkOnboardingWelcomeHeader('Before you start');
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.reloadPage();
|
||||
await profilePage.logout();
|
||||
await loginPage.isLoginPageOpened();
|
||||
await loginPage.clickOnForgotPasswordButton();
|
||||
await loginPage.enterEmail(email);
|
||||
await loginPage.clickOnRecoverySubmitButton();
|
||||
await page.waitForTimeout(30000);
|
||||
const forgotPass = await getRegisterMessage(email);
|
||||
await checkRecoveryText(forgotPass.inviteText, randomName);
|
||||
await page.goto(forgotPass.inviteUrl);
|
||||
await loginPage.enterNewPwd(newPwd);
|
||||
await loginPage.enterConfirmPwd(newPwd);
|
||||
await loginPage.clickOnChangePwdButton();
|
||||
await loginPage.isLoginPageOpened();
|
||||
await loginPage.enterEmail(email);
|
||||
await loginPage.enterPwd(newPwd);
|
||||
await loginPage.clickLoginButton();
|
||||
await dashboardPage.isDashboardOpenedAfterLogin();
|
||||
});
|
||||
});
|
||||
|
||||
test(qase(36,'ON-9 Create demo account'), async ({ page }) => {
|
||||
const loginPage = new LoginPage(page);
|
||||
const registerPage = new RegisterPage(page);
|
||||
const dashboardPage = new DashboardPage(page);
|
||||
await loginPage.goto();
|
||||
await loginPage.acceptCookie();
|
||||
await loginPage.clickOnCreateAccount();
|
||||
await registerPage.isRegisterPageOpened();
|
||||
await registerPage.clickOnCreateDemoAccountBtn();
|
||||
await dashboardPage.isOnboardingNextBtnDisplayed();
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.checkOnboardingWelcomeHeader('Before you start');
|
||||
await dashboardPage.clickOnOnboardingNextBtn();
|
||||
await dashboardPage.reloadPage();
|
||||
await dashboardPage.isHeaderDisplayed('Projects');
|
||||
});
|
||||
|
||||
test.afterEach(async ({ page }, testInfo) => {
|
||||
await updateTestResults(testInfo.status, testInfo.retry)
|
||||
});
|
||||
|
|