import json
|
|
import pytest
|
from tasks.models import Task
|
from tests.conftest import project_choices
|
from tests.utils import make_project
|
|
pytestmark = pytest.mark.django_db
|
|
|
def test_reset_summary_empty_project(business_client):
|
project = make_project(project_choices(), business_client.user, use_ml_backend=False)
|
s = project.summary
|
|
for field in ['created_labels', 'created_labels_drafts', 'created_annotations']:
|
setattr(s, field, {'garbled': field})
|
s.save()
|
|
r = business_client.post(f'/api/projects/{project.id}/summary/reset')
|
assert r.status_code == 200
|
|
s.refresh_from_db()
|
for field in ['created_labels', 'created_labels_drafts', 'created_annotations']:
|
assert getattr(s, field) == {}
|
|
|
def test_reset_summary_project_has_drafts(business_client):
|
project = make_project(project_choices(), business_client.user, use_ml_backend=False)
|
|
r = business_client.post(
|
f'/api/projects/{project.id}/import',
|
data=json.dumps({'data': {'image': 'kittens.jpg'}}),
|
content_type='application/json',
|
)
|
assert r.status_code == 201
|
task = Task.objects.filter(project=project).first()
|
assert task
|
|
s = project.summary
|
r = business_client.post(
|
f'/api/tasks/{task.id}/drafts',
|
data=json.dumps(
|
{'result': [{'from_name': 'some', 'to_name': 'x', 'type': 'none', 'value': {'none': ['Opossum']}}]}
|
),
|
content_type='application/json',
|
)
|
assert r.status_code == 201
|
|
for field in ['created_labels', 'created_labels_drafts', 'created_annotations']:
|
setattr(s, field, {'garbled': field})
|
s.save()
|
|
r = business_client.post(f'/api/projects/{project.id}/summary/reset')
|
assert r.status_code == 200
|
|
s.refresh_from_db()
|
for field in ['created_labels', 'created_annotations']:
|
assert getattr(s, field) == {}
|
|
assert s.created_labels_drafts == {'some': {'Opossum': 1}}
|
|
|
def test_reset_summary_project_has_annotations(business_client):
|
project = make_project(project_choices(), business_client.user, use_ml_backend=False)
|
|
r = business_client.post(
|
f'/api/projects/{project.id}/import',
|
data=json.dumps({'data': {'image': 'kittens.jpg'}}),
|
content_type='application/json',
|
)
|
assert r.status_code == 201
|
task = Task.objects.filter(project=project).first()
|
assert task
|
|
s = project.summary
|
r = business_client.post(
|
f'/api/tasks/{task.id}/annotations',
|
data=json.dumps(
|
{'result': [{'from_name': 'some', 'to_name': 'x', 'type': 'none', 'value': {'none': ['Opossum']}}]}
|
),
|
content_type='application/json',
|
)
|
assert r.status_code == 201
|
|
for field in ['created_labels', 'created_labels_drafts', 'created_annotations']:
|
setattr(s, field, {'garbled': field})
|
s.save()
|
|
r = business_client.post(f'/api/projects/{project.id}/summary/reset')
|
assert r.status_code == 200
|
|
s.refresh_from_db()
|
assert s.created_labels_drafts == {}
|
assert s.created_annotations == {'some|x|none': 1}
|
assert s.created_labels == {'some': {'Opossum': 1}}
|
|
|
def test_delete_tasks_and_annotations_clears_created_drafts_annotations_and_labels(business_client):
|
project = make_project(project_choices(), business_client.user, use_ml_backend=False)
|
|
r = business_client.post(
|
f'/api/projects/{project.id}/import',
|
data=json.dumps({'data': {'image': 'kittens.jpg'}}),
|
content_type='application/json',
|
)
|
assert r.status_code == 201
|
task = Task.objects.filter(project=project).first()
|
assert task
|
|
s = project.summary
|
|
r = business_client.post(
|
f'/api/tasks/{task.id}/drafts',
|
data=json.dumps(
|
{'result': [{'from_name': 'some', 'to_name': 'x', 'type': 'none', 'value': {'none': ['Mouse']}}]}
|
),
|
content_type='application/json',
|
)
|
assert r.status_code == 201
|
r = business_client.post(
|
f'/api/tasks/{task.id}/annotations',
|
data=json.dumps(
|
{'result': [{'from_name': 'some', 'to_name': 'x', 'type': 'none', 'value': {'none': ['Opossum']}}]}
|
),
|
content_type='application/json',
|
)
|
assert r.status_code == 201
|
|
for field in ['created_labels', 'created_labels_drafts', 'created_annotations']:
|
setattr(s, field, {'garbled': field})
|
s.save()
|
|
r = business_client.post(f'/api/dm/actions?id=delete_tasks_annotations&project={project.id}')
|
assert r.status_code == 200
|
|
s.refresh_from_db()
|
for field in ['created_labels', 'created_labels_drafts', 'created_annotations']:
|
assert getattr(s, field) == {}
|
|
|
def test_logged_out_user_cannot_reset_summary(business_client):
|
project = make_project(project_choices(), business_client.user, use_ml_backend=False)
|
r = business_client.get('/logout')
|
assert r.status_code == 302
|
r = business_client.post(f'/api/projects/{project.id}/summary/reset')
|
assert r.status_code == 401
|
assert 'detail' in (r_json := r.json())
|
assert r_json['detail'] == 'Authentication credentials were not provided.'
|