mirror of https://github.com/doccano/doccano.git
pythonannotation-tooldatasetsactive-learningtext-annotationdatasetnatural-language-processingdata-labelingmachine-learning
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
3.5 KiB
80 lines
3.5 KiB
from model_mommy import mommy
|
|
from rest_framework import status
|
|
from rest_framework.reverse import reverse
|
|
|
|
from api.tests.utils import CRUDMixin
|
|
from examples.tests.utils import make_doc
|
|
from label_types.tests.utils import make_label
|
|
from projects.models import ProjectType
|
|
from projects.tests.utils import prepare_project
|
|
|
|
|
|
class TestMemberProgress(CRUDMixin):
|
|
def setUp(self):
|
|
self.project = prepare_project(ProjectType.DOCUMENT_CLASSIFICATION)
|
|
self.example = make_doc(self.project.item)
|
|
self.url = reverse(viewname="member_progress", args=[self.project.item.id])
|
|
|
|
def test_fetch_initial_progress(self):
|
|
response = self.assert_fetch(self.project.admin, status.HTTP_200_OK)
|
|
expected_progress = [{"user": member.username, "done": 0} for member in self.project.members]
|
|
self.assertEqual(response.data, {"total": 1, "progress": expected_progress})
|
|
|
|
def test_fetch_progress(self):
|
|
mommy.make("ExampleState", example=self.example, confirmed_by=self.project.admin)
|
|
response = self.assert_fetch(self.project.admin, status.HTTP_200_OK)
|
|
expected_progress = [{"user": member.username, "done": 0} for member in self.project.members]
|
|
expected_progress[0]["done"] = 1
|
|
self.assertEqual(response.data, {"total": 1, "progress": expected_progress})
|
|
|
|
|
|
class TestProgressHelper(CRUDMixin):
|
|
collaborative_annotation = False
|
|
|
|
def setUp(self):
|
|
self.project = prepare_project(
|
|
ProjectType.DOCUMENT_CLASSIFICATION, collaborative_annotation=self.collaborative_annotation
|
|
)
|
|
self.example = make_doc(self.project.item)
|
|
mommy.make("ExampleState", example=self.example, confirmed_by=self.project.admin)
|
|
self.url = reverse(viewname="progress", args=[self.project.item.id])
|
|
|
|
|
|
class TestProgress(TestProgressHelper):
|
|
collaborative_annotation = False
|
|
|
|
def test_fetch_progress(self):
|
|
response = self.assert_fetch(self.project.admin, status.HTTP_200_OK)
|
|
expected = {"total": 1, "remaining": 0, "complete": 1}
|
|
self.assertEqual(response.data, expected)
|
|
|
|
def test_cannot_affect_others_progress(self):
|
|
for member in self.project.staffs:
|
|
response = self.assert_fetch(member, status.HTTP_200_OK)
|
|
expected = {"total": 1, "remaining": 1, "complete": 0}
|
|
self.assertEqual(response.data, expected)
|
|
|
|
|
|
class TestProgressOnCollaborativeAnnotation(TestProgressHelper):
|
|
collaborative_annotation = True
|
|
|
|
def test_fetch_progress(self):
|
|
for member in self.project.members:
|
|
response = self.assert_fetch(member, status.HTTP_200_OK)
|
|
expected = {"total": 1, "remaining": 0, "complete": 1}
|
|
self.assertEqual(response.data, expected)
|
|
|
|
|
|
class TestCategoryDistribution(CRUDMixin):
|
|
def setUp(self):
|
|
self.project = prepare_project(ProjectType.DOCUMENT_CLASSIFICATION)
|
|
self.example = make_doc(self.project.item)
|
|
self.label = make_label(self.project.item, text="label")
|
|
mommy.make("Category", example=self.example, label=self.label, user=self.project.admin)
|
|
self.url = reverse(viewname="category_distribution", args=[self.project.item.id])
|
|
|
|
def test_fetch_distribution(self):
|
|
response = self.assert_fetch(self.project.admin, status.HTTP_200_OK)
|
|
expected = {member.username: {self.label.text: 0} for member in self.project.members}
|
|
expected[self.project.admin.username][self.label.text] = 1
|
|
self.assertEqual(response.data, expected)
|