""" This module provides tests for the :py:mod:`taskresults.management.commands.fetch_taskresults` Django management command. """ from __future__ import unicode_literals try: from unittest.mock import patch, MagicMock except ImportError: from mock import patch, MagicMock from django.test import TestCase from taskresults.models import TaskResult from taskresults.management.commands.fetch_taskresults import Command TEST_TASK_UUID = '3120f6a8-2665-4fa3-a785-79efd28bfe92' TEST_TASK_NAME = 'test.task' TEST_TASK_RESULT = '4ll y0ur b453 4r3 b3l0ng t0 u5' @patch('taskresults.models.app.AsyncResult') class FetchTaskResultsCommandTest(TestCase): def test_handle_unfinished(self, asyncresult): resultmock = MagicMock(task_id=TEST_TASK_UUID) sigmock = MagicMock() sigmock.apply_async.return_value = resultmock tr = TaskResult.objects.create_task_result(TEST_TASK_NAME, sigmock) self.assertFalse(tr.finished) self.assertEqual(tr.result, '') self.assertEqual(tr.state, '') aresult = asyncresult.return_value aresult.state = 'PENDING' aresult.ready.return_value = False Command().handle() tr = TaskResult.objects.get(task_id=TEST_TASK_UUID) self.assertTrue(asyncresult.called_with(TEST_TASK_UUID)) self.assertTrue(aresult.ready.called_with()) self.assertFalse(tr.finished) self.assertEqual(tr.result, '') self.assertEqual(tr.state, 'PENDING') def test_handle_finished(self, asyncresult): resultmock = MagicMock(task_id=TEST_TASK_UUID) sigmock = MagicMock() sigmock.apply_async.return_value = resultmock tr = TaskResult.objects.create_task_result(TEST_TASK_NAME, sigmock) self.assertFalse(tr.finished) self.assertEqual(tr.result, '') self.assertEqual(tr.state, '') aresult = asyncresult.return_value aresult.state = 'SUCCESS' aresult.ready.return_value = True aresult.get.return_value = TEST_TASK_RESULT Command().handle() tr = TaskResult.objects.get(task_id=TEST_TASK_UUID) self.assertTrue(asyncresult.called_with(TEST_TASK_UUID)) self.assertTrue(aresult.ready.called_with()) self.assertTrue(aresult.get.called_with()) self.assertTrue(tr.finished) self.assertEqual(tr.result, TEST_TASK_RESULT) self.assertEqual(tr.state, 'SUCCESS')