Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions contentcuration/contentcuration/tests/test_asynctask.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
from __future__ import absolute_import

import json
import threading
import uuid

from celery import states
from celery.result import allow_join_result
Expand Down Expand Up @@ -191,17 +189,19 @@ def test_only_create_async_task_creates_task_entry(self):
self.assertEquals(result, 42)
self.assertEquals(TaskResult.objects.filter(task_id=async_result.task_id).count(), 0)

def test_fetch_or_enqueue_task(self):
expected_task = TaskResult.objects.create(
task_id=uuid.uuid4().hex,
task_name=test_task.name,
status=states.PENDING,
user=self.user,
task_kwargs=json.dumps({
"is_test": True
}),
)
def test_enqueue_task_adds_result_with_necessary_info(self):
async_result = test_task.enqueue(self.user, is_test=True)
try:
task_result = TaskResult.objects.get(task_id=async_result.task_id)
except TaskResult.DoesNotExist:
self.fail('Missing task result')

self.assertEqual(task_result.task_name, test_task.name)
_, _, encoded_kwargs = test_task.backend.encode_content(dict(is_test=True))
self.assertEqual(task_result.task_kwargs, encoded_kwargs)

def test_fetch_or_enqueue_task(self):
expected_task = test_task.enqueue(self.user, is_test=True)
async_result = test_task.fetch_or_enqueue(self.user, is_test=True)
self.assertEqual(expected_task.task_id, async_result.task_id)

Expand Down
4 changes: 4 additions & 0 deletions contentcuration/contentcuration/utils/celery/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,10 +185,14 @@ def enqueue(self, user, **kwargs):
task_id=task_id,
kwargs=kwargs,
)

# ensure the result is saved to the backend (database)
self.backend.add_pending_result(async_result)

# after calling apply, we should have task result model, so get it and set our custom fields
task_result = get_task_model(self, task_id)
task_result.task_name = self.name
task_result.task_kwargs = self.backend.encode_content(kwargs)[2]
task_result.user = user
task_result.channel_id = channel_id
task_result.save()
Expand Down