diff --git a/page-objects/NewsAdminPage.ts b/page-objects/NewsAdminPage.ts index 4a453ad..d04c405 100644 --- a/page-objects/NewsAdminPage.ts +++ b/page-objects/NewsAdminPage.ts @@ -27,6 +27,7 @@ export class NewsAdminPage { // Ошибки readonly emptyTitleError: Locator; readonly emptyContentError: Locator; + readonly noNewsMessage: Locator; constructor(page: Page) { this.page = page; @@ -54,6 +55,7 @@ export class NewsAdminPage { // Ошибки валидации this.emptyTitleError = page.getByText('Заголовок новости не может быть пустым.'); this.emptyContentError = page.getByText('Текст новости не может быть пустым.'); + this.noNewsMessage = page.getByText('Новости отсутствуют'); } async loginAsAdmin() { @@ -111,7 +113,12 @@ export class NewsAdminPage { await this.page.locator('tr', { hasText: title }).getByRole('button', { name: 'Удалить' }).click(); } -async deleteExistingImage() { -await this.deleteFileButton.click(); + async deleteExistingImage() { + await this.deleteFileButton.click(); } + + async searchNews(query: string) { + await this.page.getByPlaceholder('Поиск').fill(query); +} + } diff --git a/tests/ui/admin/news/admin-news-delete.spec.ts b/tests/ui/admin/news/admin-news-delete.spec.ts new file mode 100644 index 0000000..46232b0 --- /dev/null +++ b/tests/ui/admin/news/admin-news-delete.spec.ts @@ -0,0 +1,48 @@ +import { test, expect } from '@playwright/test'; +import path from 'path'; +import { NewsAdminPage } from '../../../../page-objects/NewsAdminPage'; + +test.describe('Панель администратора — Новости (удаление)', () => { + + test('Удаление новости сразу после создания', async ({ page }) => { + const newsPage = new NewsAdminPage(page); + await newsPage.loginAsAdmin(); + await newsPage.goto(); + + const title = `Новость для удаления ${Date.now()}`; + const content = 'Это текст новости для удаления'; + const imagePath = path.resolve(__dirname, '../../../../utils/test-data/image_1mb.png'); + + await newsPage.addNews({ title, content, imagePath }); + await expect(newsPage.newsTable).toContainText(title); + + // Удаляем через таблицу + await newsPage.clickDeleteButtonForNews(title); + + // Проверяем, что новость исчезла + await expect(newsPage.newsTable).not.toContainText(title); + }); + + test('Удаление новости при редактировании', async ({ page }) => { + const newsPage = new NewsAdminPage(page); + await newsPage.loginAsAdmin(); + await newsPage.goto(); + + const title = `Новость для удаления при редактировании ${Date.now()}`; + const content = 'Новость для редактирования и последующего удаления'; + const imagePath = path.resolve(__dirname, '../../../../utils/test-data/image_1mb.png'); + + await newsPage.addNews({ title, content, imagePath }); + await expect(newsPage.newsTable).toContainText(title); + + // Открываем на редактирование + await newsPage.clickEditButtonForNews(title); + + // Нажимаем кнопку "Удалить" в форме редактирования + await page.getByRole('button', { name: 'Удалить' }).click(); + + // Проверяем, что новости больше нет + await expect(newsPage.newsTable).not.toContainText(title); + }); + +}); diff --git a/tests/ui/admin/news/admin-news-search.spec.ts b/tests/ui/admin/news/admin-news-search.spec.ts new file mode 100644 index 0000000..efa7823 --- /dev/null +++ b/tests/ui/admin/news/admin-news-search.spec.ts @@ -0,0 +1,37 @@ +import { test, expect } from '@playwright/test'; +import path from 'path'; +import { NewsAdminPage } from '../../../../page-objects/NewsAdminPage'; + +test.describe('Панель администратора — Новости (поиск)', () => { + + test('Поиск новости по заголовку', async ({ page }) => { + const newsPage = new NewsAdminPage(page); + await newsPage.loginAsAdmin(); + await newsPage.goto(); + + const title = `Новость для поиска ${Date.now()}`; + const content = 'Текст для проверки поиска'; + const imagePath = path.resolve(__dirname, '../../../../utils/test-data/image_1mb.png'); + + await newsPage.addNews({ title, content, imagePath }); + await expect(newsPage.newsTable).toContainText(title); + + // Используем твой PageObject метод + await newsPage.searchNews(title); + + // Проверяем что таблица отфильтровалась и содержит только нужный текст + await expect(newsPage.newsTable).toContainText(title); + }); + + test('Поиск по несуществующей строке', async ({ page }) => { + const newsPage = new NewsAdminPage(page); + await newsPage.loginAsAdmin(); + await newsPage.goto(); + + await newsPage.searchNews('Такой новости точно нет'); + + await expect(newsPage.noNewsMessage).toBeVisible(); +}); + + +});