Как протестировать создание задачи в django_q
Задача протестить, что в задачах всегда только 1 такой планировщик
settings.py
Q_CLUSTER = {
'name': 'Testname',
'workers': 2,
'timeout': 90,
'retry': 120,
'queue_limit': 50,
'bulk': 10,
'orm': 'default',
'sync': True, # для тестов на локалке синхронно
}
app_batches.apps.py
from django.apps import AppConfig
class AppBatchesConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'app_batches'
def ready(self):
from . import schedules
app_batches.schedules.py
from .models import Batches
from django.utils import timezone
from django_q.models import Schedule
from django_q.tasks import schedule
'''Создаёт задачу планировщику раз в день проверять срок годности партий в 01:00 '''
if not Schedule.objects.filter(func='app_batches.schedules.check_expiration_of_batches'):
schedule('app_batches.schedules.check_expiration_of_batches',
name='Check expiration of Batches',
schedule_type=Schedule.DAILY,
next_run=timezone.now().replace(hour=1,minute=0),
)
print('scheduler=',Schedule.objects.filter(func='app_batches.schedules.check_expiration_of_batches').count())
def check_expiration_of_batches():
'''Раз в день проверяет, не истёк ли срок годности партий'''
expirated_batches = Batches.objects.exclude(status='expiration').filter(storages__amount__gt=0,
expiration_date__lte=timezone.now())
for batch in expirated_batches:
batch.status = 'expiration'
batch.save(update_fields=['status'])
app_batches.tests_scheduler.py
from django.test import TestCase
from django_q.models import Schedule
class SchedulersTestCase(TestCase):
def test_task(self):
schedules = Schedule.objects.filter(func='app_batches.schedules.check_expiration_of_batches')
self.assertEqual(schedules.count(),1)
schedule = schedules.first()
self.assertEqual(schedule.name,'Check expiration of Batches')
self.assertEqual(schedule.schedule_type, Schedule.DAILY)
self.assertEqual(schedule.next_run.hour, 1)
self.assertEqual(schedule.next_run.minute, 0)
При запуске теста даёт ошибку, хотя показывает, что 1 планировщик таки есть. И в админке он показывается и тоже в 1 экземпляре, то есть код работает, но почему на тесте его уже нет?
PS D:\Python310\qms_env\qms> py manage.py test app_batches.tests_scheduler
scheduler= 1
Found 1 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
F
======================================================================
FAIL: test_task (app_batches.tests_scheduler.SchedulersTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:\Python310\qms_env\qms\app_batches\tests_scheduler.py", line 29, in test_task
self.assertEqual(schedules.count(),1)
AssertionError: 0 != 1
----------------------------------------------------------------------
Ran 1 test in 0.003s
FAILED (failures=1)