From 86c091f366f9bff2a5a7d26d2f3af755681ed14b Mon Sep 17 00:00:00 2001 From: Stepan Vladovskiy Date: Thu, 13 Jun 2024 08:38:43 -0300 Subject: [PATCH] feat: With auth e2e test scenarios, not fully done. With debug mode playwright in main yml for gitea --- .gitea/workflows/main.yml | 1 + tests/auth-user-test.spec.ts | 185 +++++++++++++++++++++++++++++++++++ 2 files changed, 186 insertions(+) create mode 100644 tests/auth-user-test.spec.ts diff --git a/.gitea/workflows/main.yml b/.gitea/workflows/main.yml index 20838496..0784a7ce 100644 --- a/.gitea/workflows/main.yml +++ b/.gitea/workflows/main.yml @@ -36,6 +36,7 @@ jobs: run: npm run e2e env: BASE_URL: ${{ github.event.deployment_status.target_url }} + DEBUG: pw:api email-templates: runs-on: ubuntu-latest diff --git a/tests/auth-user-test.spec.ts b/tests/auth-user-test.spec.ts new file mode 100644 index 00000000..ceaa3dd1 --- /dev/null +++ b/tests/auth-user-test.spec.ts @@ -0,0 +1,185 @@ +import { test, expect } from '@playwright/test'; + +const baseHost = process.env.BASE_HOST || 'https://localhost:3000' + +function generateRandomString(length = 10) { + let result = ''; + const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + const charactersLength = characters.length; + for (let i = 0; i < length; i++) { + result += characters.charAt(Math.floor(Math.random() * charactersLength)); + } + return result; +} + +async function login(page) { + 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(); +} + +/* Done */ +test('Open Page', async ({ page }) => { + await page.goto(`${baseHost}/`); + await expect(page.getByRole('link', { name: 'Дискурс', exact: true })).toBeVisible(); +}); + +/* Done */ +test('Login', async ({ page }) => { + await page.goto(`${baseHost}/`); + await login(page); + await expect(page.locator('div:nth-child(4) > a').first()).toBeVisible(); +}); + +test('Drafts - create article', async ({ page }) => { + await page.goto(`${baseHost}/`); + await login(page); + await expect(page.locator('div:nth-child(4) > a').first()).toBeVisible(); + 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(); + /* Fill the form */ + /* Save */ + /* Check is it created */ +}); + +test('Drafts - create literature', async ({ page }) => { + await page.goto(`${baseHost}/`); + await login(page); + await expect(page.locator('div:nth-child(4) > a').first()).toBeVisible(); + 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(); + /* Fill the form */ + /* Save */ + /* Check is it created */ +}); + +test('Drafts - create images', async ({ page }) => { + await page.goto(`${baseHost}/`); + await login(page);; + await expect(page.locator('div:nth-child(4) > a').first()).toBeVisible(); + 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(); + /* Fill the form */ + /* Save */ + /* Check is it created */ +}); + +test('Drafts - create music', async ({ page }) => { + await page.goto(`${baseHost}/`); + await login(page); + await expect(page.locator('div:nth-child(4) > a').first()).toBeVisible(); + 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(); + /* Fill the form */ + /* Save */ + /* Check is it created */ +}); + +test('Drafts - create video', async ({ page }) => { + await page.goto(`${baseHost}/`); + await login(page); + await expect(page.locator('div:nth-child(4) > a').first()).toBeVisible(); + 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(); + /* Fill the form */ + /* Save */ + /* Check is it created */ +}); + + +test('Post topic', async ({ page }) => { + await page.goto(`${baseHost}/`); + await login(page); + await expect(page.locator('div:nth-child(4) > a').first()).toBeVisible(); + /* Open Draft */ + /* Post */ +}); + +test('Subscribe to user', async ({ page }) => { + await page.goto(`${baseHost}/`); + await login(page); + await expect(page.locator('div:nth-child(4) > a').first()).toBeVisible(); + await page.goto(`${baseHost}/author/discours`); + await page.getByRole('main').getByRole('button', { name: 'Подписаться' }).click(); + /* Check is it subscribed */ +}); + +/* Done */ +test('Subscribe to topic', async ({ page }) => { + await page.goto(`${baseHost}/topic/society`); + await page.getByRole('button', { 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 expect(page.getByRole('button', { name: 'Подписаться на тему' })).toBeVisible(); + await page.getByRole('button', { name: 'Подписаться на тему' }).click(); +}); + +/* Done */ +test('Un - Subscribe to topic', async ({ page }) => { + await page.goto(`${baseHost}/topic/society`); + await login(page); + await expect(page.getByRole('button', { name: 'Отписаться от темы' })).toBeVisible(); + await page.getByRole('button', { name: 'Отписаться от темы' }).click(); +}); + +/* Done */ +test('Change user data', async ({ page }) => { + await page.goto(`${baseHost}/`); + await login(page); + await expect(page.locator('div:nth-child(4) > a').first()).toBeVisible(); + 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(); + } catch (error) { + console.log('Button has disappeared'); + } + await expect(page.getByText('test: ' + randomString + ' ' + currentDate)).toBeVisible(); +}); + +/* Done */ +test('Add comment to topic', async ({ page }) => { + await page.goto(`${baseHost}/v-peschere-u-tsiklopa/`); + await login(page); + const randomString = generateRandomString(); + const currentDate = new Date(); + 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(); +}); + +/* Done */ +test('Edit comment to topic', async ({ page }) => { + await page.goto(`${baseHost}/author/testdev/comments`); + await login(page); + const firstCommentEditButton = await page.locator('._32U0J.WXcGK').first(); + await firstCommentEditButton.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(); +}); \ No newline at end of file