feat: добавил тесты с использованием Playwright
Frontend CI / build-and-check (push) Failing after 19s
🚀 Create and publish a Docker image / Detect changes in backend and frontend (push) Successful in 8s
🚀 Create and publish a Docker image / Build & publish backend image (push) Successful in 8s
🚀 Create and publish a Docker image / Build & publish frontend image (push) Successful in 20s
🚀 Create and publish a Docker image / Update stack on Portainer (push) Successful in 3s
Frontend CI / build-and-check (push) Failing after 19s
🚀 Create and publish a Docker image / Detect changes in backend and frontend (push) Successful in 8s
🚀 Create and publish a Docker image / Build & publish backend image (push) Successful in 8s
🚀 Create and publish a Docker image / Build & publish frontend image (push) Successful in 20s
🚀 Create and publish a Docker image / Update stack on Portainer (push) Successful in 3s
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
import { test, expect } from '@playwright/test'
|
||||
import { mockApi } from './support/mockApi'
|
||||
|
||||
test('redirects unauthenticated user to login', async ({ page }) => {
|
||||
await mockApi(page, { authenticated: false })
|
||||
await page.goto('/catalog')
|
||||
await expect(page).toHaveURL(/\/login/)
|
||||
await expect(page.getByText('Войти через ЮФУ')).toBeVisible()
|
||||
})
|
||||
@@ -0,0 +1,23 @@
|
||||
import { expect, test } from '@playwright/test'
|
||||
import { mockApi } from './support/mockApi'
|
||||
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await mockApi(page, { authenticated: true })
|
||||
})
|
||||
|
||||
test('renders catalog items from mock api', async ({ page }) => {
|
||||
await page.goto('/catalog')
|
||||
|
||||
await expect(page.getByRole('heading', { name: 'Каталог открытых лекций' })).toBeVisible()
|
||||
await expect(page.getByText('Введение в ML')).toBeVisible()
|
||||
await expect(page.getByText('Квантовые вычисления')).toBeVisible()
|
||||
})
|
||||
|
||||
test('register button works for available lecture', async ({ page }) => {
|
||||
await page.goto('/catalog')
|
||||
|
||||
const firstRegisterButton = page.getByRole('button', { name: 'Записаться' }).first()
|
||||
await firstRegisterButton.click()
|
||||
|
||||
await expect(page.getByText('Вы записаны на лекцию.')).toBeVisible()
|
||||
})
|
||||
@@ -0,0 +1,74 @@
|
||||
import { Page } from '@playwright/test'
|
||||
import { mockAuthResponse, mockCurrentUser, mockLectures, mockUserStats } from '../../mocks/fixtures'
|
||||
|
||||
export async function mockApi(page: Page, options?: { authenticated?: boolean }) {
|
||||
const authenticated = options?.authenticated ?? false
|
||||
|
||||
await page.route('**/api/v1/auth/refresh', async (route) => {
|
||||
if (!authenticated) {
|
||||
await route.fulfill({
|
||||
status: 401,
|
||||
contentType: 'application/json',
|
||||
body: JSON.stringify({ message: 'Unauthorized' }),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
await route.fulfill({
|
||||
status: 200,
|
||||
contentType: 'application/json',
|
||||
body: JSON.stringify(mockAuthResponse),
|
||||
})
|
||||
})
|
||||
|
||||
await page.route('**/api/v1/auth/me', async (route) => {
|
||||
if (!authenticated) {
|
||||
await route.fulfill({
|
||||
status: 401,
|
||||
contentType: 'application/json',
|
||||
body: JSON.stringify({ message: 'Unauthorized' }),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
await route.fulfill({
|
||||
status: 200,
|
||||
contentType: 'application/json',
|
||||
body: JSON.stringify(mockCurrentUser),
|
||||
})
|
||||
})
|
||||
|
||||
await page.route('**/api/v1/users/me/stats', async (route) => {
|
||||
if (!authenticated) {
|
||||
await route.fulfill({
|
||||
status: 401,
|
||||
contentType: 'application/json',
|
||||
body: JSON.stringify({ message: 'Unauthorized' }),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
await route.fulfill({
|
||||
status: 200,
|
||||
contentType: 'application/json',
|
||||
body: JSON.stringify(mockUserStats),
|
||||
})
|
||||
})
|
||||
|
||||
await page.route('**/api/v1/lectures/*/enroll', async (route) => {
|
||||
await route.fulfill({ status: 204 })
|
||||
})
|
||||
|
||||
await page.route(/\/api\/v1\/lectures(\?.*)?$/, async (route) => {
|
||||
if (route.request().method() !== 'GET') {
|
||||
await route.continue()
|
||||
return
|
||||
}
|
||||
|
||||
await route.fulfill({
|
||||
status: 200,
|
||||
contentType: 'application/json',
|
||||
body: JSON.stringify({ items: mockLectures }),
|
||||
})
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user