webapp/tests/3-auth-drafts-actions.spec.ts
2024-10-04 12:03:48 +03:00

193 lines
8.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// biome-ignore lint/correctness/noNodejsModules: тесты
import https from 'node:https'
import { type Page, expect, test } from '@playwright/test'
/* Global starting test config */
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)
})
})
}
async function waitForServer(url: string, timeout = 150000) {
const start = Date.now()
while (Date.now() - start < timeout) {
try {
await httpsGet(url)
return true
} catch (error) {
// Ignore errors and try again
console.log(`Error fetching ${url}: ${error}`)
}
await new Promise((resolve) => setTimeout(resolve, 1000))
}
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 = process.env.BASE_URL || 'https://localhost:3000'
console.log('Base URL:', baseURL)
await waitForServer(baseURL)
page = await browser.newPage()
test.setTimeout(150000)
await page.goto(baseURL)
// biome-ignore lint/performance/useTopLevelRegex: <explanation>
await expect(page).toHaveTitle(/Дискурс/)
console.log('Localhost server started successfully!')
await page.close()
})
test.afterAll(async () => {
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()
})
test.describe('Создание новых материалов', () => {
test('Открытие /edit/new', async ({ page }) => {
await page.goto('/edit/new')
await expect(page).toHaveTitle('Discours :: Выберите тип публикации')
await expect(page.getByRole('heading', { name: 'Выберите тип публикации' })).toBeVisible()
})
test('Создание статьи', async ({ page }) => {
await page.goto('/edit/new')
await page.locator('li').filter({ hasText: 'статья' }).locator('img').click()
// biome-ignore lint/performance/useTopLevelRegex: тесты
await expect(page).toHaveURL(/\/edit\/[a-zA-Z0-9-]+/)
await expect(page.getByRole('heading', { name: 'Новая статья' })).toBeVisible()
})
test('Литература', async ({ page }) => {
await page.getByRole('button', { name: 'Т.Р' }).click()
await page.getByRole('link', { name: 'Черновики' }).click()
await page.getByRole('link', { name: 'Создать публикацию' }).click()
await page
.locator('li')
// biome-ignore lint/performance/useTopLevelRegex: тесты
.filter({ hasText: /^литература$/ })
.locator('img')
.click()
// biome-ignore lint/performance/useTopLevelRegex: тесты
await expect(page).toHaveURL(/\/edit\/[a-zA-Z0-9-]+/)
await expect(page.getByRole('heading', { name: 'Новая литература' })).toBeVisible()
})
test('Галерея', async ({ page }) => {
await page.getByRole('button', { name: 'Т.Р' }).click()
await page.getByRole('link', { name: 'Черновики' }).click()
await page.getByRole('link', { name: 'Создать публикацию' }).click()
await page.locator('li').filter({ hasText: 'изображения' }).locator('img').click()
// biome-ignore lint/performance/useTopLevelRegex: тесты
await expect(page).toHaveURL(/\/edit\/[a-zA-Z0-9-]+/)
await expect(page.getByRole('heading', { name: 'Новые изображения' })).toBeVisible()
// Заполнение формы
await page.getByLabel('Заголовок').fill('Тестовая галерея')
await page.getByLabel('Описание').fill('Это тестовая галерея изображений')
// Загрузка изображения (предполагается, что есть кнопка для загрузки)
await page.setInputFiles('input[type="file"]', 'path/to/test/image.jpg')
// Сохранение
await page.getByRole('button', { name: 'Сохранить' }).click()
// Проверка создания
await expect(page.getByText('Черновик сохранен')).toBeVisible()
})
test('Audio', async ({ page }) => {
await page.getByRole('button', { name: 'Т.Р.' }).click()
await page.getByRole('link', { name: 'Черновики' }).click()
await page.getByRole('link', { name: 'Создать публикацию' }).click()
await page.locator('li').filter({ hasText: 'музыка' }).locator('img').click()
// biome-ignore lint/performance/useTopLevelRegex: тесты
await expect(page).toHaveURL(/\/edit\/[a-zA-Z0-9-]+/)
await expect(page.getByRole('heading', { name: 'Новая музыка' })).toBeVisible()
// Заполнение формы
await page.getByLabel('Название трека').fill('Тестовый трек')
await page.getByLabel('Исполнитель').fill('Тестовый исполнитель')
// Загрузка аудио файла (предполагается, что есть кнопка для загрузки)
await page.setInputFiles('input[type="file"]', 'path/to/test/audio.mp3')
// Сохранение
await page.getByRole('button', { name: 'Сохранить' }).click()
// Проверка создания
await expect(page.getByText('Черновик сохранен')).toBeVisible()
})
test('Video', async ({ page }) => {
await page.getByRole('button', { name: 'Т.Р' }).click()
await page.getByRole('link', { name: 'Черновики' }).click()
await page.getByRole('link', { name: 'Создать публикацию' }).click()
await page.locator('li').filter({ hasText: 'видео' }).locator('img').click()
// biome-ignore lint/performance/useTopLevelRegex: тесты
await expect(page).toHaveURL(/\/edit\/[a-zA-Z0-9-]+/)
await expect(page.getByRole('heading', { name: 'Новое видео' })).toBeVisible()
// Заполнение формы
await page.getByLabel('Название видео').fill('Тестовое видео')
await page.getByLabel('Описание').fill('Это тестовое видео')
// Вставка ссылки на видео (предполагается, что есть поле для ввода ссылки)
await page.getByLabel('Ссылка на видео').fill('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
// Сохранение
await page.getByRole('button', { name: 'Сохранить' }).click()
// Проверка создания
await expect(page.getByText('Черновик сохранен')).toBeVisible()
})
})
test('Публикация темы', async ({ page }) => {
await page.getByRole('button', { name: 'Т.Р.' }).click()
await page.getByRole('link', { name: 'Черновики' }).click()
await page.getByRole('link', { name: 'Создать публикацию' }).click()
await page.locator('li').filter({ hasText: 'статья' }).locator('img').click()
// Заполнение формы
await page.getByLabel('Заголовок').fill('Тестовая тема')
await page.getByLabel('Текст').fill('Это тестовая тема для проверки публикации')
// Публикация
await page.getByRole('button', { name: 'Опубликовать' }).click()
// Проверка публикации
// biome-ignore lint/performance/useTopLevelRegex: тесты
await expect(page).toHaveURL(/\/[a-zA-Z0-9-]+/)
await expect(page.getByText('Тестовая тема')).toBeVisible()
})