Move tasks API tests
This commit is contained in:
parent
613df66004
commit
ec4262ba4f
@ -27,7 +27,6 @@ from documents.models import Document
|
|||||||
from documents.models import DocumentType
|
from documents.models import DocumentType
|
||||||
from documents.models import MatchingModel
|
from documents.models import MatchingModel
|
||||||
from documents.models import Note
|
from documents.models import Note
|
||||||
from documents.models import PaperlessTask
|
|
||||||
from documents.models import SavedView
|
from documents.models import SavedView
|
||||||
from documents.models import ShareLink
|
from documents.models import ShareLink
|
||||||
from documents.models import StoragePath
|
from documents.models import StoragePath
|
||||||
@ -2203,234 +2202,3 @@ class TestApiStoragePaths(DirectoriesMixin, APITestCase):
|
|||||||
args, _ = bulk_update_mock.call_args
|
args, _ = bulk_update_mock.call_args
|
||||||
|
|
||||||
self.assertCountEqual([document.pk], args[0])
|
self.assertCountEqual([document.pk], args[0])
|
||||||
|
|
||||||
|
|
||||||
class TestTasks(DirectoriesMixin, APITestCase):
|
|
||||||
ENDPOINT = "/api/tasks/"
|
|
||||||
ENDPOINT_ACKNOWLEDGE = "/api/acknowledge_tasks/"
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
super().setUp()
|
|
||||||
|
|
||||||
self.user = User.objects.create_superuser(username="temp_admin")
|
|
||||||
self.client.force_authenticate(user=self.user)
|
|
||||||
|
|
||||||
def test_get_tasks(self):
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- Attempted celery tasks
|
|
||||||
WHEN:
|
|
||||||
- API call is made to get tasks
|
|
||||||
THEN:
|
|
||||||
- Attempting and pending tasks are serialized and provided
|
|
||||||
"""
|
|
||||||
|
|
||||||
task1 = PaperlessTask.objects.create(
|
|
||||||
task_id=str(uuid.uuid4()),
|
|
||||||
task_file_name="task_one.pdf",
|
|
||||||
)
|
|
||||||
|
|
||||||
task2 = PaperlessTask.objects.create(
|
|
||||||
task_id=str(uuid.uuid4()),
|
|
||||||
task_file_name="task_two.pdf",
|
|
||||||
)
|
|
||||||
|
|
||||||
response = self.client.get(self.ENDPOINT)
|
|
||||||
|
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
||||||
self.assertEqual(len(response.data), 2)
|
|
||||||
returned_task1 = response.data[1]
|
|
||||||
returned_task2 = response.data[0]
|
|
||||||
|
|
||||||
self.assertEqual(returned_task1["task_id"], task1.task_id)
|
|
||||||
self.assertEqual(returned_task1["status"], celery.states.PENDING)
|
|
||||||
self.assertEqual(returned_task1["task_file_name"], task1.task_file_name)
|
|
||||||
|
|
||||||
self.assertEqual(returned_task2["task_id"], task2.task_id)
|
|
||||||
self.assertEqual(returned_task2["status"], celery.states.PENDING)
|
|
||||||
self.assertEqual(returned_task2["task_file_name"], task2.task_file_name)
|
|
||||||
|
|
||||||
def test_get_single_task_status(self):
|
|
||||||
"""
|
|
||||||
GIVEN
|
|
||||||
- Query parameter for a valid task ID
|
|
||||||
WHEN:
|
|
||||||
- API call is made to get task status
|
|
||||||
THEN:
|
|
||||||
- Single task data is returned
|
|
||||||
"""
|
|
||||||
|
|
||||||
id1 = str(uuid.uuid4())
|
|
||||||
task1 = PaperlessTask.objects.create(
|
|
||||||
task_id=id1,
|
|
||||||
task_file_name="task_one.pdf",
|
|
||||||
)
|
|
||||||
|
|
||||||
_ = PaperlessTask.objects.create(
|
|
||||||
task_id=str(uuid.uuid4()),
|
|
||||||
task_file_name="task_two.pdf",
|
|
||||||
)
|
|
||||||
|
|
||||||
response = self.client.get(self.ENDPOINT + f"?task_id={id1}")
|
|
||||||
|
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
||||||
self.assertEqual(len(response.data), 1)
|
|
||||||
returned_task1 = response.data[0]
|
|
||||||
|
|
||||||
self.assertEqual(returned_task1["task_id"], task1.task_id)
|
|
||||||
|
|
||||||
def test_get_single_task_status_not_valid(self):
|
|
||||||
"""
|
|
||||||
GIVEN
|
|
||||||
- Query parameter for a non-existent task ID
|
|
||||||
WHEN:
|
|
||||||
- API call is made to get task status
|
|
||||||
THEN:
|
|
||||||
- No task data is returned
|
|
||||||
"""
|
|
||||||
PaperlessTask.objects.create(
|
|
||||||
task_id=str(uuid.uuid4()),
|
|
||||||
task_file_name="task_one.pdf",
|
|
||||||
)
|
|
||||||
|
|
||||||
_ = PaperlessTask.objects.create(
|
|
||||||
task_id=str(uuid.uuid4()),
|
|
||||||
task_file_name="task_two.pdf",
|
|
||||||
)
|
|
||||||
|
|
||||||
response = self.client.get(self.ENDPOINT + "?task_id=bad-task-id")
|
|
||||||
|
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
||||||
self.assertEqual(len(response.data), 0)
|
|
||||||
|
|
||||||
def test_acknowledge_tasks(self):
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- Attempted celery tasks
|
|
||||||
WHEN:
|
|
||||||
- API call is made to get mark task as acknowledged
|
|
||||||
THEN:
|
|
||||||
- Task is marked as acknowledged
|
|
||||||
"""
|
|
||||||
task = PaperlessTask.objects.create(
|
|
||||||
task_id=str(uuid.uuid4()),
|
|
||||||
task_file_name="task_one.pdf",
|
|
||||||
)
|
|
||||||
|
|
||||||
response = self.client.get(self.ENDPOINT)
|
|
||||||
self.assertEqual(len(response.data), 1)
|
|
||||||
|
|
||||||
response = self.client.post(
|
|
||||||
self.ENDPOINT_ACKNOWLEDGE,
|
|
||||||
{"tasks": [task.id]},
|
|
||||||
)
|
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
||||||
|
|
||||||
response = self.client.get(self.ENDPOINT)
|
|
||||||
self.assertEqual(len(response.data), 0)
|
|
||||||
|
|
||||||
def test_task_result_no_error(self):
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- A celery task completed without error
|
|
||||||
WHEN:
|
|
||||||
- API call is made to get tasks
|
|
||||||
THEN:
|
|
||||||
- The returned data includes the task result
|
|
||||||
"""
|
|
||||||
PaperlessTask.objects.create(
|
|
||||||
task_id=str(uuid.uuid4()),
|
|
||||||
task_file_name="task_one.pdf",
|
|
||||||
status=celery.states.SUCCESS,
|
|
||||||
result="Success. New document id 1 created",
|
|
||||||
)
|
|
||||||
|
|
||||||
response = self.client.get(self.ENDPOINT)
|
|
||||||
|
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
||||||
self.assertEqual(len(response.data), 1)
|
|
||||||
|
|
||||||
returned_data = response.data[0]
|
|
||||||
|
|
||||||
self.assertEqual(returned_data["result"], "Success. New document id 1 created")
|
|
||||||
self.assertEqual(returned_data["related_document"], "1")
|
|
||||||
|
|
||||||
def test_task_result_with_error(self):
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- A celery task completed with an exception
|
|
||||||
WHEN:
|
|
||||||
- API call is made to get tasks
|
|
||||||
THEN:
|
|
||||||
- The returned result is the exception info
|
|
||||||
"""
|
|
||||||
PaperlessTask.objects.create(
|
|
||||||
task_id=str(uuid.uuid4()),
|
|
||||||
task_file_name="task_one.pdf",
|
|
||||||
status=celery.states.FAILURE,
|
|
||||||
result="test.pdf: Not consuming test.pdf: It is a duplicate.",
|
|
||||||
)
|
|
||||||
|
|
||||||
response = self.client.get(self.ENDPOINT)
|
|
||||||
|
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
||||||
self.assertEqual(len(response.data), 1)
|
|
||||||
|
|
||||||
returned_data = response.data[0]
|
|
||||||
|
|
||||||
self.assertEqual(
|
|
||||||
returned_data["result"],
|
|
||||||
"test.pdf: Not consuming test.pdf: It is a duplicate.",
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_task_name_webui(self):
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- Attempted celery task
|
|
||||||
- Task was created through the webui
|
|
||||||
WHEN:
|
|
||||||
- API call is made to get tasks
|
|
||||||
THEN:
|
|
||||||
- Returned data include the filename
|
|
||||||
"""
|
|
||||||
PaperlessTask.objects.create(
|
|
||||||
task_id=str(uuid.uuid4()),
|
|
||||||
task_file_name="test.pdf",
|
|
||||||
task_name="documents.tasks.some_task",
|
|
||||||
status=celery.states.SUCCESS,
|
|
||||||
)
|
|
||||||
|
|
||||||
response = self.client.get(self.ENDPOINT)
|
|
||||||
|
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
||||||
self.assertEqual(len(response.data), 1)
|
|
||||||
|
|
||||||
returned_data = response.data[0]
|
|
||||||
|
|
||||||
self.assertEqual(returned_data["task_file_name"], "test.pdf")
|
|
||||||
|
|
||||||
def test_task_name_consume_folder(self):
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- Attempted celery task
|
|
||||||
- Task was created through the consume folder
|
|
||||||
WHEN:
|
|
||||||
- API call is made to get tasks
|
|
||||||
THEN:
|
|
||||||
- Returned data include the filename
|
|
||||||
"""
|
|
||||||
PaperlessTask.objects.create(
|
|
||||||
task_id=str(uuid.uuid4()),
|
|
||||||
task_file_name="anothertest.pdf",
|
|
||||||
task_name="documents.tasks.some_task",
|
|
||||||
status=celery.states.SUCCESS,
|
|
||||||
)
|
|
||||||
|
|
||||||
response = self.client.get(self.ENDPOINT)
|
|
||||||
|
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
||||||
self.assertEqual(len(response.data), 1)
|
|
||||||
|
|
||||||
returned_data = response.data[0]
|
|
||||||
|
|
||||||
self.assertEqual(returned_data["task_file_name"], "anothertest.pdf")
|
|
||||||
|
240
src/documents/tests/test_api_tasks.py
Normal file
240
src/documents/tests/test_api_tasks.py
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
import uuid
|
||||||
|
|
||||||
|
import celery
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
from rest_framework import status
|
||||||
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
|
from documents.models import PaperlessTask
|
||||||
|
from documents.tests.utils import DirectoriesMixin
|
||||||
|
|
||||||
|
|
||||||
|
class TestTasks(DirectoriesMixin, APITestCase):
|
||||||
|
ENDPOINT = "/api/tasks/"
|
||||||
|
ENDPOINT_ACKNOWLEDGE = "/api/acknowledge_tasks/"
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super().setUp()
|
||||||
|
|
||||||
|
self.user = User.objects.create_superuser(username="temp_admin")
|
||||||
|
self.client.force_authenticate(user=self.user)
|
||||||
|
|
||||||
|
def test_get_tasks(self):
|
||||||
|
"""
|
||||||
|
GIVEN:
|
||||||
|
- Attempted celery tasks
|
||||||
|
WHEN:
|
||||||
|
- API call is made to get tasks
|
||||||
|
THEN:
|
||||||
|
- Attempting and pending tasks are serialized and provided
|
||||||
|
"""
|
||||||
|
|
||||||
|
task1 = PaperlessTask.objects.create(
|
||||||
|
task_id=str(uuid.uuid4()),
|
||||||
|
task_file_name="task_one.pdf",
|
||||||
|
)
|
||||||
|
|
||||||
|
task2 = PaperlessTask.objects.create(
|
||||||
|
task_id=str(uuid.uuid4()),
|
||||||
|
task_file_name="task_two.pdf",
|
||||||
|
)
|
||||||
|
|
||||||
|
response = self.client.get(self.ENDPOINT)
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
self.assertEqual(len(response.data), 2)
|
||||||
|
returned_task1 = response.data[1]
|
||||||
|
returned_task2 = response.data[0]
|
||||||
|
|
||||||
|
self.assertEqual(returned_task1["task_id"], task1.task_id)
|
||||||
|
self.assertEqual(returned_task1["status"], celery.states.PENDING)
|
||||||
|
self.assertEqual(returned_task1["task_file_name"], task1.task_file_name)
|
||||||
|
|
||||||
|
self.assertEqual(returned_task2["task_id"], task2.task_id)
|
||||||
|
self.assertEqual(returned_task2["status"], celery.states.PENDING)
|
||||||
|
self.assertEqual(returned_task2["task_file_name"], task2.task_file_name)
|
||||||
|
|
||||||
|
def test_get_single_task_status(self):
|
||||||
|
"""
|
||||||
|
GIVEN
|
||||||
|
- Query parameter for a valid task ID
|
||||||
|
WHEN:
|
||||||
|
- API call is made to get task status
|
||||||
|
THEN:
|
||||||
|
- Single task data is returned
|
||||||
|
"""
|
||||||
|
|
||||||
|
id1 = str(uuid.uuid4())
|
||||||
|
task1 = PaperlessTask.objects.create(
|
||||||
|
task_id=id1,
|
||||||
|
task_file_name="task_one.pdf",
|
||||||
|
)
|
||||||
|
|
||||||
|
_ = PaperlessTask.objects.create(
|
||||||
|
task_id=str(uuid.uuid4()),
|
||||||
|
task_file_name="task_two.pdf",
|
||||||
|
)
|
||||||
|
|
||||||
|
response = self.client.get(self.ENDPOINT + f"?task_id={id1}")
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
self.assertEqual(len(response.data), 1)
|
||||||
|
returned_task1 = response.data[0]
|
||||||
|
|
||||||
|
self.assertEqual(returned_task1["task_id"], task1.task_id)
|
||||||
|
|
||||||
|
def test_get_single_task_status_not_valid(self):
|
||||||
|
"""
|
||||||
|
GIVEN
|
||||||
|
- Query parameter for a non-existent task ID
|
||||||
|
WHEN:
|
||||||
|
- API call is made to get task status
|
||||||
|
THEN:
|
||||||
|
- No task data is returned
|
||||||
|
"""
|
||||||
|
PaperlessTask.objects.create(
|
||||||
|
task_id=str(uuid.uuid4()),
|
||||||
|
task_file_name="task_one.pdf",
|
||||||
|
)
|
||||||
|
|
||||||
|
_ = PaperlessTask.objects.create(
|
||||||
|
task_id=str(uuid.uuid4()),
|
||||||
|
task_file_name="task_two.pdf",
|
||||||
|
)
|
||||||
|
|
||||||
|
response = self.client.get(self.ENDPOINT + "?task_id=bad-task-id")
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
self.assertEqual(len(response.data), 0)
|
||||||
|
|
||||||
|
def test_acknowledge_tasks(self):
|
||||||
|
"""
|
||||||
|
GIVEN:
|
||||||
|
- Attempted celery tasks
|
||||||
|
WHEN:
|
||||||
|
- API call is made to get mark task as acknowledged
|
||||||
|
THEN:
|
||||||
|
- Task is marked as acknowledged
|
||||||
|
"""
|
||||||
|
task = PaperlessTask.objects.create(
|
||||||
|
task_id=str(uuid.uuid4()),
|
||||||
|
task_file_name="task_one.pdf",
|
||||||
|
)
|
||||||
|
|
||||||
|
response = self.client.get(self.ENDPOINT)
|
||||||
|
self.assertEqual(len(response.data), 1)
|
||||||
|
|
||||||
|
response = self.client.post(
|
||||||
|
self.ENDPOINT_ACKNOWLEDGE,
|
||||||
|
{"tasks": [task.id]},
|
||||||
|
)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
response = self.client.get(self.ENDPOINT)
|
||||||
|
self.assertEqual(len(response.data), 0)
|
||||||
|
|
||||||
|
def test_task_result_no_error(self):
|
||||||
|
"""
|
||||||
|
GIVEN:
|
||||||
|
- A celery task completed without error
|
||||||
|
WHEN:
|
||||||
|
- API call is made to get tasks
|
||||||
|
THEN:
|
||||||
|
- The returned data includes the task result
|
||||||
|
"""
|
||||||
|
PaperlessTask.objects.create(
|
||||||
|
task_id=str(uuid.uuid4()),
|
||||||
|
task_file_name="task_one.pdf",
|
||||||
|
status=celery.states.SUCCESS,
|
||||||
|
result="Success. New document id 1 created",
|
||||||
|
)
|
||||||
|
|
||||||
|
response = self.client.get(self.ENDPOINT)
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
self.assertEqual(len(response.data), 1)
|
||||||
|
|
||||||
|
returned_data = response.data[0]
|
||||||
|
|
||||||
|
self.assertEqual(returned_data["result"], "Success. New document id 1 created")
|
||||||
|
self.assertEqual(returned_data["related_document"], "1")
|
||||||
|
|
||||||
|
def test_task_result_with_error(self):
|
||||||
|
"""
|
||||||
|
GIVEN:
|
||||||
|
- A celery task completed with an exception
|
||||||
|
WHEN:
|
||||||
|
- API call is made to get tasks
|
||||||
|
THEN:
|
||||||
|
- The returned result is the exception info
|
||||||
|
"""
|
||||||
|
PaperlessTask.objects.create(
|
||||||
|
task_id=str(uuid.uuid4()),
|
||||||
|
task_file_name="task_one.pdf",
|
||||||
|
status=celery.states.FAILURE,
|
||||||
|
result="test.pdf: Not consuming test.pdf: It is a duplicate.",
|
||||||
|
)
|
||||||
|
|
||||||
|
response = self.client.get(self.ENDPOINT)
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
self.assertEqual(len(response.data), 1)
|
||||||
|
|
||||||
|
returned_data = response.data[0]
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
returned_data["result"],
|
||||||
|
"test.pdf: Not consuming test.pdf: It is a duplicate.",
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_task_name_webui(self):
|
||||||
|
"""
|
||||||
|
GIVEN:
|
||||||
|
- Attempted celery task
|
||||||
|
- Task was created through the webui
|
||||||
|
WHEN:
|
||||||
|
- API call is made to get tasks
|
||||||
|
THEN:
|
||||||
|
- Returned data include the filename
|
||||||
|
"""
|
||||||
|
PaperlessTask.objects.create(
|
||||||
|
task_id=str(uuid.uuid4()),
|
||||||
|
task_file_name="test.pdf",
|
||||||
|
task_name="documents.tasks.some_task",
|
||||||
|
status=celery.states.SUCCESS,
|
||||||
|
)
|
||||||
|
|
||||||
|
response = self.client.get(self.ENDPOINT)
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
self.assertEqual(len(response.data), 1)
|
||||||
|
|
||||||
|
returned_data = response.data[0]
|
||||||
|
|
||||||
|
self.assertEqual(returned_data["task_file_name"], "test.pdf")
|
||||||
|
|
||||||
|
def test_task_name_consume_folder(self):
|
||||||
|
"""
|
||||||
|
GIVEN:
|
||||||
|
- Attempted celery task
|
||||||
|
- Task was created through the consume folder
|
||||||
|
WHEN:
|
||||||
|
- API call is made to get tasks
|
||||||
|
THEN:
|
||||||
|
- Returned data include the filename
|
||||||
|
"""
|
||||||
|
PaperlessTask.objects.create(
|
||||||
|
task_id=str(uuid.uuid4()),
|
||||||
|
task_file_name="anothertest.pdf",
|
||||||
|
task_name="documents.tasks.some_task",
|
||||||
|
status=celery.states.SUCCESS,
|
||||||
|
)
|
||||||
|
|
||||||
|
response = self.client.get(self.ENDPOINT)
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
self.assertEqual(len(response.data), 1)
|
||||||
|
|
||||||
|
returned_data = response.data[0]
|
||||||
|
|
||||||
|
self.assertEqual(returned_data["task_file_name"], "anothertest.pdf")
|
Loading…
x
Reference in New Issue
Block a user