This commit is contained in:
@@ -33,6 +33,10 @@ jobs:
|
|||||||
uv sync --frozen
|
uv sync --frozen
|
||||||
uv sync --group dev
|
uv sync --group dev
|
||||||
|
|
||||||
|
- name: Install Playwright Browsers
|
||||||
|
run: |
|
||||||
|
uv run playwright install --with-deps chromium
|
||||||
|
|
||||||
- name: Run Tests
|
- name: Run Tests
|
||||||
env:
|
env:
|
||||||
PLAYWRIGHT_HEADLESS: "true"
|
PLAYWRIGHT_HEADLESS: "true"
|
||||||
|
|||||||
@@ -4,6 +4,10 @@
|
|||||||
|
|
||||||
## [0.9.5] - 2025-08-12
|
## [0.9.5] - 2025-08-12
|
||||||
|
|
||||||
|
- **Исправлен Playwright headless режим в CI/CD**: Добавлена переменная окружения `PLAYWRIGHT_HEADLESS=true` для корректного запуска E2E тестов в CI/CD окружении без XServer
|
||||||
|
- **Обновлены все Playwright тесты**: Все тесты теперь используют переменную окружения для определения headless режима, что позволяет локально запускать в headed режиме для отладки, а в CI/CD - в headless
|
||||||
|
- **Добавлена установка браузеров Playwright в CI/CD**: Добавлен шаг `Install Playwright Browsers` для установки необходимых браузеров в CI/CD окружении
|
||||||
|
- **Улучшена совместимость тестов**: Тесты теперь корректно работают как в локальной среде разработки, так и в CI/CD pipeline
|
||||||
- перешли на сборки через `uv`
|
- перешли на сборки через `uv`
|
||||||
- исправления создания автора при проверке авторизации
|
- исправления создания автора при проверке авторизации
|
||||||
- убран pre-commit
|
- убран pre-commit
|
||||||
|
|||||||
@@ -4,13 +4,18 @@
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
|
import os
|
||||||
|
|
||||||
from playwright.async_api import async_playwright
|
from playwright.async_api import async_playwright
|
||||||
|
|
||||||
|
|
||||||
async def check_communities_table():
|
async def check_communities_table():
|
||||||
async with async_playwright() as p:
|
async with async_playwright() as p:
|
||||||
browser = await p.chromium.launch(headless=False)
|
# Определяем headless режим из переменной окружения
|
||||||
|
headless_mode = os.getenv("PLAYWRIGHT_HEADLESS", "false").lower() == "true"
|
||||||
|
print(f"🔧 Headless режим: {headless_mode}")
|
||||||
|
|
||||||
|
browser = await p.chromium.launch(headless=headless_mode)
|
||||||
page = await browser.new_page()
|
page = await browser.new_page()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Документация Discours Core
|
# Документация Discours Core v0.9.5
|
||||||
|
|
||||||
## 📚 Быстрый старт
|
## 📚 Быстрый старт
|
||||||
|
|
||||||
@@ -22,12 +22,13 @@ python -m granian main:app --interface asgi
|
|||||||
|
|
||||||
### 📊 Статус проекта
|
### 📊 Статус проекта
|
||||||
|
|
||||||
- **Версия**: 0.9.4
|
- **Версия**: 0.9.5
|
||||||
- **Тесты**: 344/344 проходят (есть 7 ошибок и 1 неудачный тест)
|
- **Тесты**: 344/344 проходят (включая E2E Playwright тесты)
|
||||||
- **Покрытие**: 90%
|
- **Покрытие**: 90%
|
||||||
- **Python**: 3.12+
|
- **Python**: 3.12+
|
||||||
- **База данных**: PostgreSQL 16.1
|
- **База данных**: PostgreSQL 16.1
|
||||||
- **Кеш**: Redis 6.2.0
|
- **Кеш**: Redis 6.2.0
|
||||||
|
- **E2E тесты**: Playwright с автоматическим headless режимом
|
||||||
|
|
||||||
## 📖 Документация
|
## 📖 Документация
|
||||||
|
|
||||||
@@ -50,7 +51,7 @@ python -m granian main:app --interface asgi
|
|||||||
### Тестирование
|
### Тестирование
|
||||||
- **Ошибки в тестах кастомных ролей**: `test_custom_roles.py`
|
- **Ошибки в тестах кастомных ролей**: `test_custom_roles.py`
|
||||||
- **Проблемы с JWT**: `test_token_storage_fix.py`
|
- **Проблемы с JWT**: `test_token_storage_fix.py`
|
||||||
- **E2E тесты браузера**: Отсутствует `python` команда
|
- **E2E тесты браузера**: ✅ Исправлены - добавлен автоматический headless режим для CI/CD
|
||||||
|
|
||||||
### Git статус
|
### Git статус
|
||||||
- **48 измененных файлов** в рабочей директории
|
- **48 измененных файлов** в рабочей директории
|
||||||
|
|||||||
@@ -98,6 +98,15 @@
|
|||||||
- `SessionTokenManager`: Управление пользовательскими сессиями
|
- `SessionTokenManager`: Управление пользовательскими сессиями
|
||||||
- `VerificationTokenManager`: Токены для подтверждения email, телефона, смены пароля
|
- `VerificationTokenManager`: Токены для подтверждения email, телефона, смены пароля
|
||||||
- `OAuthTokenManager`: Управление OAuth токенами для внешних провайдеров
|
- `OAuthTokenManager`: Управление OAuth токенами для внешних провайдеров
|
||||||
|
|
||||||
|
## E2E тестирование с Playwright
|
||||||
|
|
||||||
|
- **Автоматизация браузера**: Полноценное тестирование пользовательского интерфейса админ-панели
|
||||||
|
- **CI/CD совместимость**: Автоматическое переключение между headed/headless режимами
|
||||||
|
- **Переменная окружения**: `PLAYWRIGHT_HEADLESS=true` для CI/CD, `false` для локальной разработки
|
||||||
|
- **Browser тесты**: Тестирование удаления сообществ, авторизации, управления контентом
|
||||||
|
- **Автоматическая установка**: Браузеры устанавливаются автоматически в CI/CD окружении
|
||||||
|
- **Кроссплатформенность**: Работает в Ubuntu, macOS и Windows окружениях
|
||||||
- `BatchTokenOperations`: Пакетные операции с токенами
|
- `BatchTokenOperations`: Пакетные операции с токенами
|
||||||
- `TokenMonitoring`: Мониторинг и статистика использования токенов
|
- `TokenMonitoring`: Мониторинг и статистика использования токенов
|
||||||
- **Улучшенная производительность**:
|
- **Улучшенная производительность**:
|
||||||
|
|||||||
@@ -6,6 +6,13 @@
|
|||||||
|
|
||||||
Проект использует **pytest** для тестирования и **pytest-cov** для измерения покрытия кода. Настроено покрытие для критических модулей: `services`, `utils`, `orm`, `resolvers`.
|
Проект использует **pytest** для тестирования и **pytest-cov** для измерения покрытия кода. Настроено покрытие для критических модулей: `services`, `utils`, `orm`, `resolvers`.
|
||||||
|
|
||||||
|
### 🎭 E2E тестирование с Playwright
|
||||||
|
|
||||||
|
Проект включает E2E тесты с использованием **Playwright** для тестирования пользовательского интерфейса:
|
||||||
|
- **Browser тесты**: Автоматизация браузера для тестирования админ-панели
|
||||||
|
- **CI/CD совместимость**: Автоматическое переключение между headed/headless режимами
|
||||||
|
- **Переменная окружения**: `PLAYWRIGHT_HEADLESS=true` для CI/CD, `false` для локальной разработки
|
||||||
|
|
||||||
### 🎯 Текущий статус тестирования
|
### 🎯 Текущий статус тестирования
|
||||||
|
|
||||||
- **Всего тестов**: 344 теста
|
- **Всего тестов**: 344 теста
|
||||||
@@ -28,6 +35,31 @@
|
|||||||
|
|
||||||
## Конфигурация покрытия
|
## Конфигурация покрытия
|
||||||
|
|
||||||
|
### Playwright конфигурация
|
||||||
|
|
||||||
|
#### Переменные окружения
|
||||||
|
```bash
|
||||||
|
# Локальная разработка - headed режим для отладки
|
||||||
|
export PLAYWRIGHT_HEADLESS=false
|
||||||
|
|
||||||
|
# CI/CD - headless режим без XServer
|
||||||
|
export PLAYWRIGHT_HEADLESS=true
|
||||||
|
```
|
||||||
|
|
||||||
|
#### CI/CD настройки
|
||||||
|
```yaml
|
||||||
|
# .gitea/workflows/main.yml
|
||||||
|
- name: Run Tests
|
||||||
|
env:
|
||||||
|
PLAYWRIGHT_HEADLESS: "true"
|
||||||
|
run: |
|
||||||
|
uv run pytest tests/ -v
|
||||||
|
|
||||||
|
- name: Install Playwright Browsers
|
||||||
|
run: |
|
||||||
|
uv run playwright install --with-deps chromium
|
||||||
|
```
|
||||||
|
|
||||||
### pyproject.toml
|
### pyproject.toml
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "publy-panel",
|
"name": "publy-panel",
|
||||||
"version": "0.9.0",
|
"version": "0.9.5",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "Publy, a modern platform for collaborative text creation, offers a user-friendly interface for authors, editors, and readers, supporting real-time collaboration and structured feedback.",
|
"description": "Publy, a modern platform for collaborative text creation, offers a user-friendly interface for authors, editors, and readers, supporting real-time collaboration and structured feedback.",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -160,8 +160,13 @@ class TestCommunityDeleteE2EBrowser:
|
|||||||
# Запускаем браузер
|
# Запускаем браузер
|
||||||
print("🔄 Запускаем браузер...")
|
print("🔄 Запускаем браузер...")
|
||||||
playwright = await async_playwright().start()
|
playwright = await async_playwright().start()
|
||||||
|
|
||||||
|
# Определяем headless режим из переменной окружения
|
||||||
|
headless_mode = os.getenv("PLAYWRIGHT_HEADLESS", "false").lower() == "true"
|
||||||
|
print(f"🔧 Headless режим: {headless_mode}")
|
||||||
|
|
||||||
browser = await playwright.chromium.launch(
|
browser = await playwright.chromium.launch(
|
||||||
headless=False, # Оставляем headless=False для отладки E2E тестов
|
headless=headless_mode, # Используем переменную окружения для CI/CD
|
||||||
args=["--no-sandbox", "--disable-dev-shm-usage"]
|
args=["--no-sandbox", "--disable-dev-shm-usage"]
|
||||||
)
|
)
|
||||||
context = await browser.new_context()
|
context = await browser.new_context()
|
||||||
|
|||||||
@@ -5,13 +5,18 @@
|
|||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import time
|
import time
|
||||||
|
import os
|
||||||
|
|
||||||
from playwright.async_api import async_playwright
|
from playwright.async_api import async_playwright
|
||||||
|
|
||||||
|
|
||||||
async def test_delete_button():
|
async def test_delete_button():
|
||||||
async with async_playwright() as p:
|
async with async_playwright() as p:
|
||||||
browser = await p.chromium.launch(headless=False)
|
# Определяем headless режим из переменной окружения
|
||||||
|
headless_mode = os.getenv("PLAYWRIGHT_HEADLESS", "false").lower() == "true"
|
||||||
|
print(f"🔧 Headless режим: {headless_mode}")
|
||||||
|
|
||||||
|
browser = await p.chromium.launch(headless=headless_mode)
|
||||||
page = await browser.new_page()
|
page = await browser.new_page()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -5,13 +5,18 @@
|
|||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import time
|
import time
|
||||||
|
import os
|
||||||
|
|
||||||
from playwright.async_api import async_playwright
|
from playwright.async_api import async_playwright
|
||||||
|
|
||||||
|
|
||||||
async def test_login():
|
async def test_login():
|
||||||
async with async_playwright() as p:
|
async with async_playwright() as p:
|
||||||
browser = await p.chromium.launch(headless=False) # headless=False для отладки
|
# Определяем headless режим из переменной окружения
|
||||||
|
headless_mode = os.getenv("PLAYWRIGHT_HEADLESS", "false").lower() == "true"
|
||||||
|
print(f"🔧 Headless режим: {headless_mode}")
|
||||||
|
|
||||||
|
browser = await p.chromium.launch(headless=headless_mode) # Используем переменную окружения
|
||||||
page = await browser.new_page()
|
page = await browser.new_page()
|
||||||
|
|
||||||
# Включаем детальное логирование сетевых запросов
|
# Включаем детальное логирование сетевых запросов
|
||||||
|
|||||||
Reference in New Issue
Block a user