"""This file and its contents are licensed under the Apache License 2.0. Please see the included NOTICE for copyright information and LICENSE for a copy of the license. """ import json import pytest from projects.models import Project from ..utils import make_annotation, make_prediction, make_task, project_id # noqa @pytest.mark.django_db def test_views_tasks_api(business_client, project_id): # create payload = dict(project=project_id, data={'test': 1}) response = business_client.post( '/api/dm/views/', data=json.dumps(payload), content_type='application/json', ) assert response.status_code == 201, response.content view_id = response.json()['id'] # no tasks response = business_client.get(f'/api/tasks?fields=all&view={view_id}') assert response.status_code == 200, response.content assert response.json()['total'] == 0 assert len(response.json()['tasks']) == 0 project = Project.objects.get(pk=project_id) task_data = {'text': 'bbb'} task_id = make_task({'data': task_data}, project).id annotation_result = {'from_name': 'my_class', 'to_name': 'text', 'type': 'choices', 'value': {'choices': ['pos']}} make_annotation({'result': [annotation_result]}, task_id) make_annotation( { 'result': [annotation_result], 'was_cancelled': True, }, task_id, ) prediction_result = {'from_name': 'my_class', 'to_name': 'text', 'type': 'choices', 'value': {'choices': ['pos']}} make_prediction( { 'result': [prediction_result], }, task_id, ) response = business_client.get(f'/api/tasks?fields=all&view={view_id}') assert response.status_code == 200, response.content response_data = response.json() assert response_data['total'] == 1 assert len(response_data['tasks']) == 1 assert response_data['tasks'][0]['id'] == task_id assert response_data['tasks'][0]['data'] == task_data assert response_data['tasks'][0]['total_annotations'] == 1 assert 'annotations_results' in response_data['tasks'][0] assert response_data['tasks'][0]['cancelled_annotations'] == 1 assert response_data['tasks'][0]['total_predictions'] == 1 assert 'predictions_results' in response_data['tasks'][0] num_anno1 = response_data['tasks'][0]['annotations'][0]['id'] num_anno2 = response_data['tasks'][0]['annotations'][1]['id'] num_pred = response_data['tasks'][0]['predictions'][0]['id'] # delete annotations and check counters business_client.delete(f'/api/annotations/{num_anno1}') business_client.delete(f'/api/annotations/{num_anno2}') response = business_client.get(f'/api/tasks?fields=all&view={view_id}') assert response.status_code == 200, response.content response_data = response.json() assert response_data['tasks'][0]['cancelled_annotations'] == 0 assert response_data['tasks'][0]['total_annotations'] == 0 # delete prediction and check counters business_client.delete(f'/api/predictions/{num_pred}') response = business_client.get(f'/api/tasks?fields=all&view={view_id}') assert response.status_code == 200, response.content response_data = response.json() assert response_data['tasks'][0]['cancelled_annotations'] == 0 assert response_data['tasks'][0]['total_annotations'] == 0 assert response_data['tasks'][0]['total_predictions'] == 0 @pytest.mark.parametrize( 'tasks_count, annotations_count, predictions_count', [ [0, 0, 0], [1, 0, 0], [1, 1, 1], [2, 2, 2], ], ) @pytest.mark.django_db def test_views_total_counters(tasks_count, annotations_count, predictions_count, business_client, project_id): # create payload = dict(project=project_id, data={'test': 1}) response = business_client.post( '/api/dm/views/', data=json.dumps(payload), content_type='application/json', ) assert response.status_code == 201, response.content view_id = response.json()['id'] project = Project.objects.get(pk=project_id) for _ in range(0, tasks_count): task_id = make_task({'data': {}}, project).id print('TASK_ID: %s' % task_id) for _ in range(0, annotations_count): make_annotation({'result': []}, task_id) for _ in range(0, predictions_count): make_prediction({'result': []}, task_id) response = business_client.get(f'/api/tasks?fields=all&view={view_id}') response_data = response.json() assert response_data['total'] == tasks_count, response_data assert response_data['total_annotations'] == tasks_count * annotations_count, response_data assert response_data['total_predictions'] == tasks_count * predictions_count, response_data