0.2.3 #99
2 changed files with 57 additions and 11 deletions
|
|
@ -61,24 +61,29 @@ class User(AbstractUser):
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
if self._original_interval != self.task_interval:
|
if self._original_interval != self.task_interval:
|
||||||
|
|
||||||
if self.task_interval and self.task:
|
if self.task_interval and self.task:
|
||||||
self.task.interval = self.task_interval
|
self.task.interval = self.task_interval
|
||||||
self.task.enabled = True
|
self.task.enabled = True
|
||||||
self.task.save()
|
self.task.save()
|
||||||
|
|
||||||
elif self.task_interval and not self.task:
|
|
||||||
self.task = PeriodicTask.objects.create(
|
|
||||||
enabled=True,
|
|
||||||
interval=self.task_interval,
|
|
||||||
name=f"{self.email}-collection-task",
|
|
||||||
task="newsreader.news.collection.tasks",
|
|
||||||
args=json.dumps([self.pk]),
|
|
||||||
kwargs=None,
|
|
||||||
)
|
|
||||||
|
|
||||||
elif not self.task_interval and self.task:
|
elif not self.task_interval and self.task:
|
||||||
self.task.enabled = False
|
self.task.enabled = False
|
||||||
self.task.save()
|
self.task.save()
|
||||||
|
|
||||||
|
if not self.task:
|
||||||
|
self.task_interval, _ = IntervalSchedule.objects.get_or_create(
|
||||||
|
every=1, period=IntervalSchedule.HOURS
|
||||||
|
)
|
||||||
|
|
||||||
|
self.task = PeriodicTask.objects.create(
|
||||||
|
enabled=True,
|
||||||
|
interval=self.task_interval,
|
||||||
|
name=f"{self.email}-collection-task",
|
||||||
|
task="newsreader.news.collection.tasks",
|
||||||
|
args=json.dumps([self.pk]),
|
||||||
|
kwargs={},
|
||||||
|
)
|
||||||
|
|
||||||
|
self._original_interval = self.task_interval
|
||||||
|
|
||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
|
|
||||||
41
src/newsreader/accounts/tests/tests.py
Normal file
41
src/newsreader/accounts/tests/tests.py
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
from django_celery_beat.models import IntervalSchedule, PeriodicTask
|
||||||
|
|
||||||
|
from newsreader.accounts.models import User
|
||||||
|
|
||||||
|
|
||||||
|
class UserTestCase(TestCase):
|
||||||
|
def test_task_is_created(self):
|
||||||
|
user = User.objects.create(email="durp@burp.nl", task=None, task_interval=None)
|
||||||
|
|
||||||
|
task = PeriodicTask.objects.get(name=f"{user.email}-collection-task")
|
||||||
|
expected_interval = IntervalSchedule.objects.get(
|
||||||
|
every=1, period=IntervalSchedule.HOURS
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEquals(task.interval, expected_interval)
|
||||||
|
self.assertEquals(PeriodicTask.objects.count(), 1)
|
||||||
|
|
||||||
|
def test_task_is_updated(self):
|
||||||
|
user = User.objects.create(email="durp@burp.nl", task=None, task_interval=None)
|
||||||
|
|
||||||
|
new_interval = IntervalSchedule.objects.create(
|
||||||
|
every=2, period=IntervalSchedule.HOURS
|
||||||
|
)
|
||||||
|
user.task_interval = new_interval
|
||||||
|
user.save()
|
||||||
|
|
||||||
|
task = PeriodicTask.objects.get(name=f"{user.email}-collection-task")
|
||||||
|
|
||||||
|
self.assertEquals(task.interval, new_interval)
|
||||||
|
|
||||||
|
def test_task_is_disabled(self):
|
||||||
|
user = User.objects.create(email="durp@burp.nl", task=None, task_interval=None)
|
||||||
|
|
||||||
|
user.task_interval = None
|
||||||
|
user.save()
|
||||||
|
|
||||||
|
task = PeriodicTask.objects.get(name=f"{user.email}-collection-task")
|
||||||
|
|
||||||
|
self.assertEquals(task.enabled, False)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue