from data_manager.actions.basic import delete_tasks_annotations, delete_tasks_annotations_form from django.http import HttpRequest from django.test import TestCase from projects.tests.factories import ProjectFactory from tasks.models import Annotation, AnnotationDraft, Task from tasks.tests.factories import AnnotationDraftFactory, AnnotationFactory, TaskFactory from users.tests.factories import UserFactory class TestDeleteTasksAnnotations(TestCase): @classmethod def setUpTestData(cls): cls.project = ProjectFactory() cls.user_1 = cls.project.created_by cls.user_2 = UserFactory(active_organization=cls.project.organization) cls.task_1 = TaskFactory(project=cls.project) cls.task_2 = TaskFactory(project=cls.project) def test_form(self): AnnotationFactory(task=self.task_1, completed_by=self.user_1) AnnotationDraftFactory(task=self.task_1, user=self.user_2) form = delete_tasks_annotations_form(self.user_1, self.project) option_ids = [option['value'] for option in form[0]['fields'][0]['options']] assert str(self.user_1.id) in option_ids assert str(self.user_2.id) in option_ids def test_no_annotations(self): request = HttpRequest() request.user = self.user_1 request.data = {'annotator': ''} result = delete_tasks_annotations(self.project, Task.objects.all(), request=request) assert result['processed_items'] == 0 def test_no_annotator(self): AnnotationFactory(task=self.task_1, completed_by=self.user_1) AnnotationDraftFactory(task=self.task_1, user=self.user_2) AnnotationFactory(task=self.task_2, completed_by=self.user_1) AnnotationFactory(task=self.task_2, completed_by=self.user_2) request = HttpRequest() request.user = self.user_1 request.data = {'annotator': ''} result = delete_tasks_annotations(self.project, Task.objects.all(), request=request) assert result['processed_items'] == 3 # 3 annotations assert Annotation.objects.count() == 0 assert AnnotationDraft.objects.count() == 0 def test_with_annotator(self): AnnotationFactory(task=self.task_1, completed_by=self.user_1) AnnotationDraftFactory(task=self.task_1, user=self.user_2) AnnotationFactory(task=self.task_2, completed_by=self.user_1) AnnotationFactory(task=self.task_2, completed_by=self.user_2) request = HttpRequest() request.user = self.user_1 request.data = {'annotator': str(self.user_2.id)} result = delete_tasks_annotations(self.project, Task.objects.all(), request=request) assert result['processed_items'] == 1 # 1 annotations assert Annotation.objects.count() == 2 assert AnnotationDraft.objects.count() == 0 assert not Annotation.objects.filter(task=self.task_2, completed_by=self.user_2).exists() assert not AnnotationDraft.objects.filter(task=self.task_2, user=self.user_2).exists() def test_with_annotator_and_task(self): AnnotationFactory(task=self.task_1, completed_by=self.user_1) AnnotationDraftFactory(task=self.task_1, user=self.user_2) AnnotationFactory(task=self.task_2, completed_by=self.user_1) AnnotationFactory(task=self.task_2, completed_by=self.user_2) request = HttpRequest() request.user = self.user_1 request.data = {'annotator': str(self.user_1.id)} result = delete_tasks_annotations(self.project, Task.objects.filter(id=self.task_1.id), request=request) assert result['processed_items'] == 1 # 1 annotations assert Annotation.objects.count() == 2 assert AnnotationDraft.objects.count() == 1 assert not Annotation.objects.filter(task=self.task_1, completed_by=self.user_1).exists()