Skip to content

Commit 6d7427f

Browse files
committed
chore: enhance GitHub Actions for testing and dependency management
chore: add PostgreSQL service configuration to GitHub Actions for testing chore: remove unnecessary blank lines in tests.py and urls.py chore: update flake8 configuration to ignore specific warnings and add isort integration chore: remove unnecessary blank line in tests.py and urls.py chore: update flake8 command in GitHub Actions to use configuration file chore: refine flake8 configuration and improve isort compatibility
1 parent 99c91f4 commit 6d7427f

4 files changed

Lines changed: 80 additions & 28 deletions

File tree

.github/workflows/main.yml

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
# .github/workflows/main.yml
21
name: Main Taski workflow
32

43
on:
@@ -8,27 +7,47 @@ on:
87

98
jobs:
109
tests:
11-
# Разворачиваем окружение:
1210
runs-on: ubuntu-latest
13-
11+
# Блок services аналогичен docker-compose.yml
12+
services:
13+
postgres:
14+
image: postgres:13.10
15+
# Указываем имя тестовой базы, имя и пароль пользователя в открытом виде,
16+
# ведь эта база будет работать только во время прогона тестов
17+
env:
18+
POSTGRES_USER: django_user
19+
POSTGRES_PASSWORD: django_password
20+
POSTGRES_DB: django_db
21+
ports:
22+
- 5432:5432
23+
# Эта конструкция описывает проверку готовности сервиса postgres
24+
# Если её не будет, то тесты могут запуститься раньше, чем сервер PostgreSQL
25+
# В результате тесты опять решат, что базы нет, — и упадут
26+
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
1427
steps:
15-
# Копируем код проекта
16-
- name: Check out code
17-
uses: actions/checkout@v3
18-
# Устанавливаем Python с помощью action
28+
- uses: actions/checkout@v3
1929
- name: Set up Python
2030
uses: actions/setup-python@v4
21-
# В action setup-python@v4 передаём параметр — версию Python
2231
with:
2332
python-version: 3.12
24-
# Обновляем pip, устанавливаем flake8 и flake8-isort,
25-
# устанавливаем зависимости проекта
33+
2634
- name: Install dependencies
2735
run: |
2836
python -m pip install --upgrade pip setuptools
2937
pip install flake8==6.0.0 flake8-isort==6.0.0
30-
# Запускаем flake8
31-
- name: Test with flake8
32-
# Вызываем flake8 и указываем ему,
33-
# что нужно проверить файлы только в папке backend/
34-
run: python -m flake8 backend/
38+
pip install -r ./backend/requirements.txt
39+
# Этот шаг дополним переменными для доступа к БД
40+
- name: Test with flake8 and django tests
41+
# Добавляем env-переменные для доступа к БД
42+
env:
43+
POSTGRES_USER: django_user
44+
POSTGRES_PASSWORD: django_password
45+
POSTGRES_DB: django_db
46+
# Сервер БД запущен в Docker, но его порт проброшен на хост
47+
# Поэтому подключаемся к 127.0.0.1:5432
48+
DB_HOST: 127.0.0.1
49+
DB_PORT: 5432
50+
run: |
51+
flake8 --config=setup.cfg backend/
52+
cd backend/
53+
python manage.py test

backend/api/tests.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from http import HTTPStatus
2+
3+
from django.test import Client, TestCase
4+
5+
from api import models
6+
7+
8+
class TaskiAPITestCase(TestCase):
9+
def setUp(self):
10+
self.guest_client = Client()
11+
12+
def test_list_exists(self):
13+
"""Проверка доступности списка задач."""
14+
response = self.guest_client.get('/api/tasks/')
15+
self.assertEqual(response.status_code, HTTPStatus.OK)
16+
17+
def test_task_creation(self):
18+
"""Проверка создания задачи."""
19+
data = {'title': 'Test', 'description': 'Test'}
20+
response = self.guest_client.post('/api/tasks/', data=data)
21+
self.assertEqual(response.status_code, HTTPStatus.CREATED)
22+
self.assertTrue(models.Task.objects.filter(title='Test').exists())

backend/backend/urls.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
from api import views
21
from django.contrib import admin
32
from django.urls import include, path
43
from rest_framework import routers
54

5+
from api import views
6+
67
router = routers.DefaultRouter()
78
router.register('tasks', views.TaskView, 'task')
89

setup.cfg

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
11
[flake8]
2-
# Не проверять код на соответствие стандартам W503 и F811
3-
ignore =
4-
W503,
5-
F811
6-
# Не проверять код в перечисленных директориях:
2+
# Игнорируем очевидные и неважные предупреждения
3+
ignore = W503, F811
4+
5+
# Исключаем служебные и виртуальные директории из проверки
76
exclude =
8-
tests/,
9-
*/migrations/,
10-
venv/,
11-
*/venv/,
12-
env/,
13-
*/env/,
14-
# Не проверять указанные файлы на соответствие определённым правилам:
7+
migrations,
8+
venv,
9+
env,
10+
__pycache__,
11+
.git,
12+
.github
13+
14+
# Игнорируем длину строк только в settings.py
1515
per-file-ignores =
1616
*/settings.py:E501
17+
18+
# Интеграция с isort
19+
import-order-style = google
20+
application-import-names = api, backend
21+
22+
[isort]
23+
# Настройки для совместимости с Black
24+
profile = black
25+
known_first_party = api, backend
26+
line_length = 88

0 commit comments

Comments
 (0)