feat: обновления парсеров, тестов и миграций
Some checks failed
CI/CD Pipeline / Run Tests (push) Failing after 37s
CI/CD Pipeline / Code Quality Checks (push) Failing after 43s
CI/CD Pipeline / Build & Push Images (push) Has been skipped
CI/CD Pipeline / Deploy (dev) (push) Has been skipped
CI/CD Pipeline / Deploy (prod) (push) Has been skipped
CI/CD Pipeline / Code Quality Checks (pull_request) Failing after 0s
CI/CD Pipeline / Run Tests (pull_request) Failing after 0s
CI/CD Pipeline / Build & Push Images (pull_request) Has been skipped
CI/CD Pipeline / Deploy (dev) (pull_request) Has been skipped
CI/CD Pipeline / Deploy (prod) (pull_request) Has been skipped
Some checks failed
CI/CD Pipeline / Run Tests (push) Failing after 37s
CI/CD Pipeline / Code Quality Checks (push) Failing after 43s
CI/CD Pipeline / Build & Push Images (push) Has been skipped
CI/CD Pipeline / Deploy (dev) (push) Has been skipped
CI/CD Pipeline / Deploy (prod) (push) Has been skipped
CI/CD Pipeline / Code Quality Checks (pull_request) Failing after 0s
CI/CD Pipeline / Run Tests (pull_request) Failing after 0s
CI/CD Pipeline / Build & Push Images (pull_request) Has been skipped
CI/CD Pipeline / Deploy (dev) (pull_request) Has been skipped
CI/CD Pipeline / Deploy (prod) (pull_request) Has been skipped
- Обновлены клиенты парсеров (checko, fns, minpromtorg, proverki, zakupki) - Добавлены новые миграции для моделей - Расширено покрытие тестами - Обновлены конфигурации и настройки проекта - Добавлены утилиты для тестирования Co-Authored-By: Warp <agent@warp.dev>
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
from io import StringIO
|
||||
|
||||
from apps.core.management.commands.base import BaseAppCommand
|
||||
from django.core.management.base import CommandError
|
||||
from django.core.management.base import CommandError, OutputWrapper
|
||||
from django.test import TestCase
|
||||
|
||||
|
||||
@@ -18,6 +18,23 @@ class TestCommand(BaseAppCommand):
|
||||
return "Success"
|
||||
|
||||
|
||||
class TransactionCommand(BaseAppCommand):
|
||||
"""Команда для тестов транзакций и dry-run."""
|
||||
|
||||
use_transaction = True
|
||||
|
||||
def execute_command(self, *args, **options):
|
||||
from apps.core.models import BackgroundJob
|
||||
|
||||
BackgroundJob.objects.create(
|
||||
task_id=options.get("task_id", "tx-task"),
|
||||
task_name="test.command",
|
||||
)
|
||||
if options.get("fail"):
|
||||
raise ValueError("tx error")
|
||||
return "OK"
|
||||
|
||||
|
||||
class BaseAppCommandTest(TestCase):
|
||||
"""Тесты для BaseAppCommand."""
|
||||
|
||||
@@ -73,6 +90,14 @@ class BaseAppCommandTest(TestCase):
|
||||
result = cmd.confirm("Continue?")
|
||||
self.assertTrue(result)
|
||||
|
||||
def test_confirm_with_input_func(self):
|
||||
cmd = BaseAppCommand()
|
||||
cmd.stdout = OutputWrapper(StringIO())
|
||||
cmd.dry_run = False
|
||||
cmd.silent = True
|
||||
cmd.input_func = lambda: "y"
|
||||
self.assertTrue(cmd.confirm("Proceed?"))
|
||||
|
||||
def test_abort_raises_command_error(self):
|
||||
"""Тест прерывания команды."""
|
||||
cmd = BaseAppCommand()
|
||||
@@ -90,3 +115,51 @@ class BaseAppCommandTest(TestCase):
|
||||
pass # Операция
|
||||
|
||||
# Не должно падать
|
||||
|
||||
def test_handle_success(self):
|
||||
cmd = TestCommand()
|
||||
cmd.stdout = StringIO()
|
||||
cmd.stderr = StringIO()
|
||||
result = cmd.handle()
|
||||
self.assertEqual(result, "Success")
|
||||
|
||||
def test_handle_raises_command_error(self):
|
||||
cmd = TestCommand()
|
||||
cmd.stdout = StringIO()
|
||||
cmd.stderr = StringIO()
|
||||
with self.assertRaises(CommandError):
|
||||
cmd.handle(fail=True)
|
||||
|
||||
def test_handle_dry_run_rolls_back(self):
|
||||
cmd = TransactionCommand()
|
||||
cmd.stdout = StringIO()
|
||||
cmd.stderr = StringIO()
|
||||
cmd.handle(dry_run=True, silent=True)
|
||||
|
||||
from apps.core.models import BackgroundJob
|
||||
|
||||
self.assertEqual(BackgroundJob.objects.count(), 0)
|
||||
|
||||
def test_handle_transaction_persists(self):
|
||||
cmd = TransactionCommand()
|
||||
cmd.stdout = StringIO()
|
||||
cmd.stderr = StringIO()
|
||||
cmd.handle(dry_run=False, silent=True, task_id="persist-task")
|
||||
|
||||
from apps.core.models import BackgroundJob
|
||||
|
||||
self.assertTrue(
|
||||
BackgroundJob.objects.filter(task_id="persist-task").exists()
|
||||
)
|
||||
|
||||
def test_progress_iter_without_total(self):
|
||||
cmd = BaseAppCommand()
|
||||
cmd.stdout = StringIO()
|
||||
cmd.silent = True
|
||||
|
||||
def generator():
|
||||
for idx in range(3):
|
||||
yield idx
|
||||
|
||||
result = list(cmd.progress_iter(generator(), "Iter"))
|
||||
self.assertEqual(result, [0, 1, 2])
|
||||
|
||||
Reference in New Issue
Block a user