e2e-merged
This commit is contained in:
parent
0a997bdcae
commit
3e8efdcae5
|
@ -11,7 +11,7 @@
|
|||
"codegen": "graphql-codegen",
|
||||
"e2e:tests": "npx playwright test --project=webkit",
|
||||
"e2e:install": "npx playwright install webkit && npx playwright install-deps ",
|
||||
"fix": "npm run check:code:fix && stylelint **/*.{scss,css} --fix",
|
||||
"fix": "npx @biomejs/biome check . --fix && stylelint **/*.{scss,css} --fix",
|
||||
"format": "npx @biomejs/biome format src/. --write",
|
||||
"postinstall": "npm run codegen && npx patch-package",
|
||||
"typecheck": "tsc --noEmit"
|
||||
|
@ -118,9 +118,6 @@
|
|||
"idb": "^8.0.0",
|
||||
"mailgun.js": "^10.2.1"
|
||||
},
|
||||
"trustedDependencies": [
|
||||
"@biomejs/biome"
|
||||
],
|
||||
"engines": {
|
||||
"node": "20.x"
|
||||
}
|
||||
|
|
|
@ -38,7 +38,6 @@ export default defineConfig({
|
|||
|
||||
/* Configure projects for major browsers */
|
||||
projects: [
|
||||
|
||||
{
|
||||
name: 'webkit',
|
||||
use: { ...devices['Desktop Safari'] }
|
||||
|
@ -63,7 +62,7 @@ export default defineConfig({
|
|||
// name: 'Google Chrome',
|
||||
// use: { ...devices['Desktop Chrome'], channel: 'chrome' },
|
||||
// },
|
||||
]
|
||||
],
|
||||
|
||||
/* Run local dev server before starting the tests */
|
||||
webServer: {
|
||||
|
@ -71,6 +70,6 @@ export default defineConfig({
|
|||
url: 'https://localhost:3000',
|
||||
ignoreHTTPSErrors: true,
|
||||
reuseExistingServer: !process.env.CI,
|
||||
timeout: 5 * 60 * 1000,
|
||||
},
|
||||
timeout: 5 * 60 * 1000
|
||||
}
|
||||
})
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
|
|
@ -1,76 +1,81 @@
|
|||
import { test, expect, type Page } from '@playwright/test';
|
||||
import https from 'https';
|
||||
|
||||
// biome-ignore lint/correctness/noNodejsModules: <explanation>
|
||||
import https from 'node:https'
|
||||
import { type Page, expect, test } from '@playwright/test'
|
||||
|
||||
/* Global starting test config */
|
||||
|
||||
let page: Page;
|
||||
let page: Page
|
||||
|
||||
function httpsGet(url: string): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
https.get(url, {
|
||||
rejectUnauthorized: false // Ignore SSL certificate errors
|
||||
}, (res) => {
|
||||
if (res.statusCode === 200) {
|
||||
resolve();
|
||||
} else {
|
||||
reject(new Error(`Request failed with status code ${res.statusCode}`));
|
||||
}
|
||||
}).on('error', (error) => {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
https
|
||||
.get(
|
||||
url,
|
||||
{
|
||||
rejectUnauthorized: false // Ignore SSL certificate errors
|
||||
},
|
||||
(res) => {
|
||||
if (res.statusCode === 200) {
|
||||
resolve()
|
||||
} else {
|
||||
reject(new Error(`Request failed with status code ${res.statusCode}`))
|
||||
}
|
||||
}
|
||||
)
|
||||
.on('error', (error) => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
}
|
||||
async function waitForServer(url: string, timeout: number = 150000) {
|
||||
const start = Date.now();
|
||||
async function waitForServer(url: string, timeout = 150000) {
|
||||
const start = Date.now()
|
||||
while (Date.now() - start < timeout) {
|
||||
try {
|
||||
await httpsGet(url);
|
||||
return true;
|
||||
await httpsGet(url)
|
||||
return true
|
||||
} catch (error) {
|
||||
// Ignore errors and try again
|
||||
console.log (`Error fetching ${url}: ${error.message}`);
|
||||
console.log(`Error fetching ${url}: ${error}`)
|
||||
}
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000))
|
||||
}
|
||||
throw new Error(`Server at ${url} did not start within ${timeout} ms`);
|
||||
throw new Error(`Server at ${url} did not start within ${timeout} ms`)
|
||||
}
|
||||
test.beforeAll(async ({ browser }) => {
|
||||
console.log('Waiting for the server to start...');
|
||||
await new Promise((resolve) => setTimeout(resolve, 5000));
|
||||
const baseURL = 'https://localhost:3000';
|
||||
await waitForServer(baseURL);
|
||||
page = await browser.newPage();
|
||||
test.setTimeout(150000);
|
||||
await page.goto(baseURL);
|
||||
await expect(page).toHaveTitle(/Дискурс/);
|
||||
console.log('Localhost server started successfully!');
|
||||
await page.close();
|
||||
});
|
||||
console.log('Waiting for the server to start...')
|
||||
await new Promise((resolve) => setTimeout(resolve, 5000))
|
||||
const baseURL = 'https://localhost:3000'
|
||||
await waitForServer(baseURL)
|
||||
page = await browser.newPage()
|
||||
test.setTimeout(150000)
|
||||
await page.goto(baseURL)
|
||||
await expect(page).toHaveTitle(/Дискурс/)
|
||||
console.log('Localhost server started successfully!')
|
||||
await page.close()
|
||||
})
|
||||
test.afterAll(async () => {
|
||||
await page.close();
|
||||
});
|
||||
|
||||
await page.close()
|
||||
})
|
||||
|
||||
/* TESTS section */
|
||||
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto(`/`);
|
||||
test.setTimeout(80000);
|
||||
await page.getByRole('link', { name: 'Войти' }).click();
|
||||
await page.getByPlaceholder('Почта').click();
|
||||
await page.getByPlaceholder('Почта').fill('guests@discours.io');
|
||||
await page.getByPlaceholder('Пароль').click();
|
||||
await page.getByPlaceholder('Пароль').fill('Gue$tP@ss');
|
||||
await page.getByRole('button', { name: 'Войти' }).click();
|
||||
});
|
||||
await page.goto('/')
|
||||
test.setTimeout(80000)
|
||||
await page.getByRole('link', { name: 'Войти' }).click()
|
||||
await page.getByPlaceholder('Почта').click()
|
||||
await page.getByPlaceholder('Почта').fill('guests@discours.io')
|
||||
await page.getByPlaceholder('Пароль').click()
|
||||
await page.getByPlaceholder('Пароль').fill('Gue$tP@ss')
|
||||
await page.getByRole('button', { name: 'Войти' }).click()
|
||||
})
|
||||
|
||||
test.describe('*****Undone***** Drafts - article', () => {
|
||||
test('Open /create', async ({ page }) => {
|
||||
await page.goto(`/create`);
|
||||
await expect(page).toHaveTitle('Выберите тип публикации');
|
||||
});
|
||||
});
|
||||
test('Open /edit/new', async ({ page }) => {
|
||||
await page.goto('/edit/new')
|
||||
await expect(page).toHaveTitle('Выберите тип публикации')
|
||||
})
|
||||
})
|
||||
|
||||
/* test('Create article', async ({ page }) => {
|
||||
await page.goto(`/create`);
|
||||
|
@ -121,7 +126,6 @@ test('Check Draft', async ({ page }) => {
|
|||
Check is it created
|
||||
}); */
|
||||
|
||||
|
||||
/* test('Post topic', async ({ page }) => {
|
||||
Open Draft
|
||||
Post
|
||||
|
|
|
@ -1,115 +1,128 @@
|
|||
import { test, expect, type Page } from '@playwright/test';
|
||||
import https from 'https';
|
||||
|
||||
// biome-ignore lint/correctness/noNodejsModules: <explanation>
|
||||
import https from 'node:https'
|
||||
import { type Page, expect, test } from '@playwright/test'
|
||||
|
||||
/* Global starting test config */
|
||||
|
||||
let page: Page;
|
||||
let page: Page
|
||||
|
||||
function httpsGet(url: string): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
https.get(url, {
|
||||
rejectUnauthorized: false // Ignore SSL certificate errors
|
||||
}, (res) => {
|
||||
if (res.statusCode === 200) {
|
||||
resolve();
|
||||
} else {
|
||||
reject(new Error(`Request failed with status code ${res.statusCode}`));
|
||||
}
|
||||
}).on('error', (error) => {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
https
|
||||
.get(
|
||||
url,
|
||||
{
|
||||
rejectUnauthorized: false // Ignore SSL certificate errors
|
||||
},
|
||||
(res) => {
|
||||
if (res.statusCode === 200) {
|
||||
resolve()
|
||||
} else {
|
||||
reject(new Error(`Request failed with status code ${res.statusCode}`))
|
||||
}
|
||||
}
|
||||
)
|
||||
.on('error', (error) => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
}
|
||||
async function waitForServer(url: string, timeout: number = 150000) {
|
||||
const start = Date.now();
|
||||
async function waitForServer(url: string, timeout = 150000) {
|
||||
const start = Date.now()
|
||||
while (Date.now() - start < timeout) {
|
||||
try {
|
||||
await httpsGet(url);
|
||||
return true;
|
||||
await httpsGet(url)
|
||||
return true
|
||||
} catch (error) {
|
||||
// Ignore errors and try again
|
||||
console.log (`Error fetching ${url}: ${error.message}`);
|
||||
console.log(`Error fetching ${url}: ${error}`)
|
||||
}
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000))
|
||||
}
|
||||
throw new Error(`Server at ${url} did not start within ${timeout} ms`);
|
||||
throw new Error(`Server at ${url} did not start within ${timeout} ms`)
|
||||
}
|
||||
test.beforeAll(async ({ browser }) => {
|
||||
console.log('Waiting for the server to start...');
|
||||
await new Promise((resolve) => setTimeout(resolve, 5000));
|
||||
const baseURL = 'https://localhost:3000';
|
||||
await waitForServer(baseURL);
|
||||
page = await browser.newPage();
|
||||
test.setTimeout(150000);
|
||||
await page.goto(baseURL);
|
||||
await expect(page).toHaveTitle(/Дискурс/);
|
||||
await page.getByRole('link', { name: 'Войти' }).click();
|
||||
console.log('Localhost server started successfully!');
|
||||
await page.close();
|
||||
});
|
||||
console.log('Waiting for the server to start...')
|
||||
await new Promise((resolve) => setTimeout(resolve, 5000))
|
||||
const baseURL = 'https://localhost:3000'
|
||||
await waitForServer(baseURL)
|
||||
page = await browser.newPage()
|
||||
test.setTimeout(150000)
|
||||
await page.goto(baseURL)
|
||||
await expect(page).toHaveTitle(/Дискурс/)
|
||||
await page.getByRole('link', { name: 'Войти' }).click()
|
||||
console.log('Localhost server started successfully!')
|
||||
await page.close()
|
||||
})
|
||||
test.afterAll(async () => {
|
||||
await page.close();
|
||||
});
|
||||
|
||||
await page.close()
|
||||
})
|
||||
|
||||
/* TESTS section */
|
||||
|
||||
/* Random Generator */
|
||||
function generateRandomString(length = 10) {
|
||||
let result = '';
|
||||
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||||
const charactersLength = characters.length;
|
||||
let result = ''
|
||||
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
|
||||
const charactersLength = characters.length
|
||||
for (let i = 0; i < length; i++) {
|
||||
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
||||
result += characters.charAt(Math.floor(Math.random() * charactersLength))
|
||||
}
|
||||
return result;
|
||||
return result
|
||||
}
|
||||
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto(`/`);
|
||||
await page.goto('/')
|
||||
/* test.setTimeout(80000); */
|
||||
await page.getByRole('link', { name: 'Войти' }).click();
|
||||
await page.getByPlaceholder('Почта').click();
|
||||
await page.getByPlaceholder('Почта').fill('guests@discours.io');
|
||||
await page.getByPlaceholder('Пароль').click();
|
||||
await page.getByPlaceholder('Пароль').fill('Gue$tP@ss');
|
||||
await page.getByRole('button', { name: 'Войти' }).click();
|
||||
});
|
||||
await page.getByRole('link', { name: 'Войти' }).click()
|
||||
await page.getByPlaceholder('Почта').click()
|
||||
await page.getByPlaceholder('Почта').fill('guests@discours.io')
|
||||
await page.getByPlaceholder('Пароль').click()
|
||||
await page.getByPlaceholder('Пароль').fill('Gue$tP@ss')
|
||||
await page.getByRole('button', { name: 'Войти' }).click()
|
||||
})
|
||||
|
||||
test.describe('Topic Actions', () => {
|
||||
test('Follow topic', async ({ page }) => {
|
||||
await page.getByRole('link', { name: 'темы', exact: true }).click();
|
||||
await page.getByRole('link', { name: 'Общество Статьи о политике, экономике и обществе, об актуальных событиях, людях, мнениях. Тексты про историю и современность, про то, что происходит в России и мире' }).click();
|
||||
await page.getByRole('button', { name: 'Подписаться на тему' }).click();
|
||||
await expect(page.getByRole('button', { name: 'Отписаться от темы' })).toBeVisible();
|
||||
});
|
||||
await page.getByRole('link', { name: 'темы', exact: true }).click()
|
||||
await page
|
||||
.getByRole('link', {
|
||||
name: 'Общество Статьи о политике, экономике и обществе, об актуальных событиях, людях, мнениях. Тексты про историю и современность, про то, что происходит в России и мире'
|
||||
})
|
||||
.click()
|
||||
await page.getByRole('button', { name: 'Подписаться на тему' }).click()
|
||||
await expect(page.getByRole('button', { name: 'Отписаться от темы' })).toBeVisible()
|
||||
})
|
||||
test('Unfollow topic', async ({ page }) => {
|
||||
await page.getByRole('link', { name: 'темы', exact: true }).click();
|
||||
await page.getByRole('link', { name: 'Общество Статьи о политике, экономике и обществе, об актуальных событиях, людях, мнениях. Тексты про историю и современность, про то, что происходит в России и мире' }).click();
|
||||
await page.getByRole('button', { name: 'Отписаться от темы' }).click();
|
||||
await expect(page.getByRole('button', { name: 'Подписаться на тему' })).toBeVisible();
|
||||
});
|
||||
await page.getByRole('link', { name: 'темы', exact: true }).click()
|
||||
await page
|
||||
.getByRole('link', {
|
||||
name: 'Общество Статьи о политике, экономике и обществе, об актуальных событиях, людях, мнениях. Тексты про историю и современность, про то, что происходит в России и мире'
|
||||
})
|
||||
.click()
|
||||
await page.getByRole('button', { name: 'Отписаться от темы' }).click()
|
||||
await expect(page.getByRole('button', { name: 'Подписаться на тему' })).toBeVisible()
|
||||
})
|
||||
test('Add comment to topic', async ({ page }) => {
|
||||
const randomString = generateRandomString();
|
||||
const currentDate = new Date();
|
||||
await page.getByRole('button', { name: 'Т.Р' }).click();
|
||||
await page.getByRole('link', { name: 'Профиль' }).click();
|
||||
await page.getByRole('link', { name: 'Тестируем функционал' }).first().click();
|
||||
await page.locator('.tiptap').click();
|
||||
await page.locator('.tiptap').fill('Проверка Комментариев: ' + randomString + ' ' + currentDate);
|
||||
await page.getByRole('button', { name: 'Отправить' }).click();
|
||||
await expect(page.getByText('Проверка Комментариев: ' + randomString + ' ' + currentDate)).toBeVisible();
|
||||
});
|
||||
const randomString = generateRandomString()
|
||||
const currentDate = new Date()
|
||||
await page.getByRole('button', { name: 'Т.Р' }).click()
|
||||
await page.getByRole('link', { name: 'Профиль' }).click()
|
||||
await page.getByRole('link', { name: 'Тестируем функционал' }).first().click()
|
||||
await page.locator('.tiptap').click()
|
||||
await page.locator('.tiptap').fill(`Проверка Комментариев: ${randomString} ${currentDate}`)
|
||||
await page.getByRole('button', { name: 'Отправить' }).click()
|
||||
await expect(page.getByText(`Проверка Комментариев: ${randomString} ${currentDate}`)).toBeVisible()
|
||||
})
|
||||
test('Edit comment to topic', async ({ page }) => {
|
||||
await page.getByRole('button', { name: 'Т.Р' }).click();
|
||||
await page.getByRole('link', { name: 'Комментарии' }).click();
|
||||
await page.locator('[id^="comment_"]').filter({ hasText: 'Проверка Комментариев' }).first().hover();
|
||||
await page.getByRole('button', { name: 'Редактировать', exact: true }).first().click();
|
||||
const randomString = generateRandomString();
|
||||
const currentDate = new Date();
|
||||
await page.locator('.tiptap').fill('Редактируемый Комментарий: ' + randomString + ' ' + currentDate);
|
||||
await page.getByRole('button', { name: 'Сохранить' }).click();
|
||||
await expect(page.getByText('Редактируемый Комментарий: ' + randomString + ' ' + currentDate)).toBeVisible();
|
||||
});
|
||||
});
|
||||
await page.getByRole('button', { name: 'Т.Р' }).click()
|
||||
await page.getByRole('link', { name: 'Комментарии' }).click()
|
||||
await page.locator('[id^="comment_"]').filter({ hasText: 'Проверка Комментариев' }).first().hover()
|
||||
await page.getByRole('button', { name: 'Редактировать', exact: true }).first().click()
|
||||
const randomString = generateRandomString()
|
||||
const currentDate = new Date()
|
||||
await page.locator('.tiptap').fill(`Редактируемый Комментарий: ${randomString} ${currentDate}`)
|
||||
await page.getByRole('button', { name: 'Сохранить' }).click()
|
||||
await expect(page.getByText(`Редактируемый Комментарий: ${randomString} ${currentDate}`)).toBeVisible()
|
||||
})
|
||||
})
|
||||
|
|
|
@ -1,111 +1,119 @@
|
|||
import { test, expect, type Page } from '@playwright/test';
|
||||
import https from 'https';
|
||||
// biome-ignore lint/correctness/noNodejsModules: <explanation>
|
||||
import https from 'node:https'
|
||||
import { type Page, expect, test } from '@playwright/test'
|
||||
|
||||
let context: any;
|
||||
let page: Page;
|
||||
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
||||
let context: any
|
||||
let page: Page
|
||||
|
||||
/* Global starting test config */
|
||||
|
||||
function httpsGet(url: string): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
https.get(url, {
|
||||
rejectUnauthorized: false // Ignore SSL certificate errors
|
||||
}, (res) => {
|
||||
if (res.statusCode === 200) {
|
||||
resolve();
|
||||
} else {
|
||||
reject(new Error(`Request failed with status code ${res.statusCode}`));
|
||||
}
|
||||
}).on('error', (error) => {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
https
|
||||
.get(
|
||||
url,
|
||||
{
|
||||
rejectUnauthorized: false // Ignore SSL certificate errors
|
||||
},
|
||||
(res) => {
|
||||
if (res.statusCode === 200) {
|
||||
resolve()
|
||||
} else {
|
||||
reject(new Error(`Request failed with status code ${res.statusCode}`))
|
||||
}
|
||||
}
|
||||
)
|
||||
.on('error', (error) => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
}
|
||||
async function waitForServer(url: string, timeout: number = 150000) {
|
||||
const start = Date.now();
|
||||
async function waitForServer(url: string, timeout = 150000) {
|
||||
const start = Date.now()
|
||||
while (Date.now() - start < timeout) {
|
||||
try {
|
||||
await httpsGet(url);
|
||||
return true;
|
||||
await httpsGet(url)
|
||||
return true
|
||||
} catch (error) {
|
||||
// Ignore errors and try again
|
||||
console.log (`Error fetching ${url}: ${error.message}`);
|
||||
console.log(`Error fetching ${url}: ${error}`)
|
||||
}
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000))
|
||||
}
|
||||
throw new Error(`Server at ${url} did not start within ${timeout} ms`);
|
||||
throw new Error(`Server at ${url} did not start within ${timeout} ms`)
|
||||
}
|
||||
test.beforeAll(async ({ browser }) => {
|
||||
console.log('Waiting for the server to start...');
|
||||
await new Promise((resolve) => setTimeout(resolve, 5000));
|
||||
const baseURL = 'https://localhost:3000';
|
||||
await waitForServer(baseURL);
|
||||
context = await browser.newContext();
|
||||
page = await context.newPage();
|
||||
test.setTimeout(150000);
|
||||
await page.goto(baseURL);
|
||||
await expect(page).toHaveTitle(/Дискурс/);
|
||||
await page.getByRole('link', { name: 'Войти' }).click();
|
||||
console.log('Localhost server started successfully!');
|
||||
await page.close();
|
||||
});
|
||||
console.log('Waiting for the server to start...')
|
||||
await new Promise((resolve) => setTimeout(resolve, 5000))
|
||||
const baseURL = 'https://localhost:3000'
|
||||
await waitForServer(baseURL)
|
||||
context = await browser.newContext()
|
||||
page = await context.newPage()
|
||||
test.setTimeout(150000)
|
||||
await page.goto(baseURL)
|
||||
await expect(page).toHaveTitle(/Дискурс/)
|
||||
await page.getByRole('link', { name: 'Войти' }).click()
|
||||
console.log('Localhost server started successfully!')
|
||||
await page.close()
|
||||
})
|
||||
|
||||
/* TESTS section */
|
||||
|
||||
/* Random Generator */
|
||||
function generateRandomString(length = 10) {
|
||||
let result = '';
|
||||
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||||
const charactersLength = characters.length;
|
||||
let result = ''
|
||||
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
|
||||
const charactersLength = characters.length
|
||||
for (let i = 0; i < length; i++) {
|
||||
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
||||
result += characters.charAt(Math.floor(Math.random() * charactersLength))
|
||||
}
|
||||
return result;
|
||||
return result
|
||||
}
|
||||
|
||||
test.beforeEach(async ({page}) => {
|
||||
await page.goto(`/`);
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto('/')
|
||||
/* test.setTimeout(80000); */
|
||||
await page.getByRole('link', { name: 'Войти' }).click();
|
||||
await page.getByPlaceholder('Почта').click();
|
||||
await page.getByPlaceholder('Почта').fill('guests@discours.io');
|
||||
await page.getByPlaceholder('Пароль').click();
|
||||
await page.getByPlaceholder('Пароль').fill('Gue$tP@ss');
|
||||
await page.getByRole('button', { name: 'Войти' }).click();
|
||||
});
|
||||
await page.getByRole('link', { name: 'Войти' }).click()
|
||||
await page.getByPlaceholder('Почта').click()
|
||||
await page.getByPlaceholder('Почта').fill('guests@discours.io')
|
||||
await page.getByPlaceholder('Пароль').click()
|
||||
await page.getByPlaceholder('Пароль').fill('Gue$tP@ss')
|
||||
await page.getByRole('button', { name: 'Войти' }).click()
|
||||
})
|
||||
|
||||
test.describe('User Actions', () => {
|
||||
test('User sandwitch menu', async ({page}) => {
|
||||
await page.getByRole('button', { name: 'Т.Р' }).click();
|
||||
await expect(page.getByRole('link', { name: 'Профиль' })).toBeVisible();
|
||||
await page.getByRole('button', { name: 'Т.Р' }).click();
|
||||
});
|
||||
test('Follow user', async ({page}) => {
|
||||
await page.getByRole('link', { name: 'авторы', exact: true }).click();
|
||||
await page.getByRole('link', { name: 'Дискурс На сайте c 16 июня' }).click();
|
||||
await page.getByRole('button', { name: 'Подписаться' }).click();
|
||||
await expect(page.getByRole('main').getByRole('button', { name: 'Вы подписаны' })).toBeVisible();
|
||||
});
|
||||
test('Unfollow user', async ({page}) => {
|
||||
await page.getByRole('link', { name: 'авторы', exact: true }).click();
|
||||
await page.getByRole('link', { name: 'Дискурс На сайте c 16 июня' }).click();
|
||||
await page.getByRole('button', { name: 'Вы подписаны' }).click();
|
||||
await expect(page.getByRole('main').getByRole('button', { name: 'Подписаться' })).toBeVisible();
|
||||
});
|
||||
test('Change user data', async ({page}) => {
|
||||
await page.getByRole('button', { name: 'Т.Р' }).click();
|
||||
await page.getByRole('link', { name: 'Профиль' }).click();
|
||||
await page.getByRole('button', { name: 'Редактировать профиль' }).click();
|
||||
await page.locator('.tiptap').click();
|
||||
const randomString = generateRandomString();
|
||||
const currentDate = new Date();
|
||||
await page.locator('.tiptap').fill('test: ' + randomString + ' ' + currentDate);
|
||||
test('User sandwitch menu', async ({ page }) => {
|
||||
await page.getByRole('button', { name: 'Т.Р' }).click()
|
||||
await expect(page.getByRole('link', { name: 'Профиль' })).toBeVisible()
|
||||
await page.getByRole('button', { name: 'Т.Р' }).click()
|
||||
})
|
||||
test('Follow user', async ({ page }) => {
|
||||
await page.getByRole('link', { name: 'авторы', exact: true }).click()
|
||||
await page.getByRole('link', { name: 'Дискурс На сайте c 16 июня' }).click()
|
||||
await page.getByRole('button', { name: 'Подписаться' }).click()
|
||||
await expect(page.getByRole('main').getByRole('button', { name: 'Вы подписаны' })).toBeVisible()
|
||||
})
|
||||
test('Unfollow user', async ({ page }) => {
|
||||
await page.getByRole('link', { name: 'авторы', exact: true }).click()
|
||||
await page.getByRole('link', { name: 'Дискурс На сайте c 16 июня' }).click()
|
||||
await page.getByRole('button', { name: 'Вы подписаны' }).click()
|
||||
await expect(page.getByRole('main').getByRole('button', { name: 'Подписаться' })).toBeVisible()
|
||||
})
|
||||
test('Change user data', async ({ page }) => {
|
||||
await page.getByRole('button', { name: 'Т.Р' }).click()
|
||||
await page.getByRole('link', { name: 'Профиль' }).click()
|
||||
await page.getByRole('button', { name: 'Редактировать профиль' }).click()
|
||||
await page.locator('.tiptap').click()
|
||||
const randomString = generateRandomString()
|
||||
const currentDate = new Date()
|
||||
await page.locator('.tiptap').fill(`test: ${randomString} ${currentDate}`)
|
||||
try {
|
||||
const button = await page.getByRole('button', { name: 'Сохранить настройки' });
|
||||
await button.click();
|
||||
const button = await page.getByRole('button', { name: 'Сохранить настройки' })
|
||||
await button.click()
|
||||
} catch (error) {
|
||||
console.log('Button has disappeared');
|
||||
console.warn('Button has disappeared', error)
|
||||
}
|
||||
await expect(page.getByText('test: ' + randomString + ' ' + currentDate)).toBeVisible();
|
||||
});
|
||||
});
|
||||
await expect(page.getByText(`test: ${randomString} ${currentDate}`)).toBeVisible()
|
||||
})
|
||||
})
|
||||
|
|
|
@ -1,71 +1,76 @@
|
|||
import { test, expect, type Page } from '@playwright/test';
|
||||
import https from 'https';
|
||||
// biome-ignore lint/correctness/noNodejsModules: <explanation>
|
||||
import https from 'node:https'
|
||||
import { type Page, expect, test } from '@playwright/test'
|
||||
|
||||
/* Global starting test config */
|
||||
|
||||
let page: Page;
|
||||
let page: Page
|
||||
|
||||
function httpsGet(url: string): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
https.get(url, {
|
||||
rejectUnauthorized: false // Ignore SSL certificate errors
|
||||
}, (res) => {
|
||||
if (res.statusCode === 200) {
|
||||
resolve();
|
||||
} else {
|
||||
reject(new Error(`Request failed with status code ${res.statusCode}`));
|
||||
}
|
||||
}).on('error', (error) => {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
https
|
||||
.get(
|
||||
url,
|
||||
{
|
||||
rejectUnauthorized: false // Ignore SSL certificate errors
|
||||
},
|
||||
(res) => {
|
||||
if (res.statusCode === 200) {
|
||||
resolve()
|
||||
} else {
|
||||
reject(new Error(`Request failed with status code ${res.statusCode}`))
|
||||
}
|
||||
}
|
||||
)
|
||||
.on('error', (error) => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
}
|
||||
async function waitForServer(url: string, timeout: number = 150000) {
|
||||
const start = Date.now();
|
||||
async function waitForServer(url: string, timeout = 150000) {
|
||||
const start = Date.now()
|
||||
while (Date.now() - start < timeout) {
|
||||
try {
|
||||
await httpsGet(url);
|
||||
return true;
|
||||
await httpsGet(url)
|
||||
return true
|
||||
} catch (error) {
|
||||
// Ignore errors and try again
|
||||
console.log (`Error fetching ${url}: ${error.message}`);
|
||||
console.log(`Error fetching ${url}: ${error}`)
|
||||
}
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000))
|
||||
}
|
||||
throw new Error(`Server at ${url} did not start within ${timeout} ms`);
|
||||
throw new Error(`Server at ${url} did not start within ${timeout} ms`)
|
||||
}
|
||||
test.beforeAll(async ({ browser }) => {
|
||||
console.log('Waiting for the server to start...');
|
||||
await new Promise((resolve) => setTimeout(resolve, 5000));
|
||||
const baseURL = 'https://localhost:3000';
|
||||
await waitForServer(baseURL);
|
||||
page = await browser.newPage();
|
||||
test.setTimeout(150000);
|
||||
await page.goto(baseURL);
|
||||
await expect(page).toHaveTitle(/Дискурс/);
|
||||
console.log('Localhost server started successfully!');
|
||||
});
|
||||
console.log('Waiting for the server to start...')
|
||||
await new Promise((resolve) => setTimeout(resolve, 5000))
|
||||
const baseURL = 'https://localhost:3000'
|
||||
await waitForServer(baseURL)
|
||||
page = await browser.newPage()
|
||||
test.setTimeout(150000)
|
||||
await page.goto(baseURL)
|
||||
await expect(page).toHaveTitle(/Дискурс/)
|
||||
console.log('Localhost server started successfully!')
|
||||
})
|
||||
test.afterAll(async () => {
|
||||
await page.close();
|
||||
});
|
||||
|
||||
await page.close()
|
||||
})
|
||||
|
||||
/* TESTS section */
|
||||
|
||||
const pagesTitles = {
|
||||
'/': /Дискурс/,
|
||||
'/feed': /Лента/,
|
||||
'/about/help': /Поддержите Дискурс/,
|
||||
'/authors': /Авторы/,
|
||||
'/topics': /Темы и сюжеты/,
|
||||
'/inbox': /Входящие/,
|
||||
'/guide/support': /Поддержите Дискурс/,
|
||||
'/author': /Авторы/,
|
||||
'/topic': /Темы и сюжеты/
|
||||
}
|
||||
test.describe('Pages open', () => {
|
||||
Object.keys(pagesTitles).forEach((res: string) => {
|
||||
test(`Open Page ${res}`, async ({ page }) => {
|
||||
await page.goto(`${res}`)
|
||||
const title = pagesTitles[res]
|
||||
const title = pagesTitles[res as keyof typeof pagesTitles] || ''
|
||||
await expect(page).toHaveTitle(title)
|
||||
})
|
||||
})
|
||||
});
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue
Block a user