|
|
|
|
@ -297,47 +297,47 @@ class JobUpdateAPITestCase(APITestCase):
|
|
|
|
|
self.assertEqual(response.data["id"], self.job.id)
|
|
|
|
|
self.assertEqual(response.data["status"], data.get('status', self.job.status))
|
|
|
|
|
assignee = self.job.assignee.id if self.job.assignee else None
|
|
|
|
|
self.assertEqual(response.data["assignee"], data.get('assignee', assignee))
|
|
|
|
|
self.assertEqual(response.data["assignee"]["id"], data.get('assignee_id', assignee))
|
|
|
|
|
self.assertEqual(response.data["start_frame"], self.job.segment.start_frame)
|
|
|
|
|
self.assertEqual(response.data["stop_frame"], self.job.segment.stop_frame)
|
|
|
|
|
|
|
|
|
|
def test_api_v1_jobs_id_admin(self):
|
|
|
|
|
data = {"status": StatusChoice.COMPLETED, "assignee": self.owner.id}
|
|
|
|
|
data = {"status": StatusChoice.COMPLETED, "assignee_id": self.owner.id}
|
|
|
|
|
response = self._run_api_v1_jobs_id(self.job.id, self.admin, data)
|
|
|
|
|
self._check_request(response, data)
|
|
|
|
|
response = self._run_api_v1_jobs_id(self.job.id + 10, self.admin, data)
|
|
|
|
|
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
|
|
|
|
|
|
|
|
|
def test_api_v1_jobs_id_owner(self):
|
|
|
|
|
data = {"status": StatusChoice.VALIDATION, "assignee": self.annotator.id}
|
|
|
|
|
data = {"status": StatusChoice.VALIDATION, "assignee_id": self.annotator.id}
|
|
|
|
|
response = self._run_api_v1_jobs_id(self.job.id, self.owner, data)
|
|
|
|
|
self._check_request(response, data)
|
|
|
|
|
response = self._run_api_v1_jobs_id(self.job.id + 10, self.owner, data)
|
|
|
|
|
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
|
|
|
|
|
|
|
|
|
def test_api_v1_jobs_id_annotator(self):
|
|
|
|
|
data = {"status": StatusChoice.ANNOTATION, "assignee": self.user.id}
|
|
|
|
|
data = {"status": StatusChoice.ANNOTATION, "assignee_id": self.user.id}
|
|
|
|
|
response = self._run_api_v1_jobs_id(self.job.id, self.annotator, data)
|
|
|
|
|
self._check_request(response, data)
|
|
|
|
|
response = self._run_api_v1_jobs_id(self.job.id + 10, self.annotator, data)
|
|
|
|
|
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
|
|
|
|
|
|
|
|
|
def test_api_v1_jobs_id_observer(self):
|
|
|
|
|
data = {"status": StatusChoice.ANNOTATION, "assignee": self.admin.id}
|
|
|
|
|
data = {"status": StatusChoice.ANNOTATION, "assignee_id": self.admin.id}
|
|
|
|
|
response = self._run_api_v1_jobs_id(self.job.id, self.observer, data)
|
|
|
|
|
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
|
|
|
|
|
response = self._run_api_v1_jobs_id(self.job.id + 10, self.observer, data)
|
|
|
|
|
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
|
|
|
|
|
|
|
|
|
def test_api_v1_jobs_id_user(self):
|
|
|
|
|
data = {"status": StatusChoice.ANNOTATION, "assignee": self.user.id}
|
|
|
|
|
data = {"status": StatusChoice.ANNOTATION, "assignee_id": self.user.id}
|
|
|
|
|
response = self._run_api_v1_jobs_id(self.job.id, self.user, data)
|
|
|
|
|
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
|
|
|
|
|
response = self._run_api_v1_jobs_id(self.job.id + 10, self.user, data)
|
|
|
|
|
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
|
|
|
|
|
|
|
|
|
def test_api_v1_jobs_id_no_auth(self):
|
|
|
|
|
data = {"status": StatusChoice.ANNOTATION, "assignee": self.user.id}
|
|
|
|
|
data = {"status": StatusChoice.ANNOTATION, "assignee_id": self.user.id}
|
|
|
|
|
response = self._run_api_v1_jobs_id(self.job.id, None, data)
|
|
|
|
|
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
|
|
|
|
|
response = self._run_api_v1_jobs_id(self.job.id + 10, None, data)
|
|
|
|
|
@ -356,7 +356,7 @@ class JobPartialUpdateAPITestCase(JobUpdateAPITestCase):
|
|
|
|
|
self._check_request(response, data)
|
|
|
|
|
|
|
|
|
|
def test_api_v1_jobs_id_admin_partial(self):
|
|
|
|
|
data = {"assignee": self.user.id}
|
|
|
|
|
data = {"assignee_id": self.user.id}
|
|
|
|
|
response = self._run_api_v1_jobs_id(self.job.id, self.owner, data)
|
|
|
|
|
self._check_request(response, data)
|
|
|
|
|
|
|
|
|
|
@ -1073,9 +1073,11 @@ class TaskGetAPITestCase(APITestCase):
|
|
|
|
|
self.assertEqual(response.data["size"], db_task.data.size)
|
|
|
|
|
self.assertEqual(response.data["mode"], db_task.mode)
|
|
|
|
|
owner = db_task.owner.id if db_task.owner else None
|
|
|
|
|
self.assertEqual(response.data["owner"], owner)
|
|
|
|
|
response_owner = response.data["owner"]["id"] if response.data["owner"] else None
|
|
|
|
|
self.assertEqual(response_owner, owner)
|
|
|
|
|
assignee = db_task.assignee.id if db_task.assignee else None
|
|
|
|
|
self.assertEqual(response.data["assignee"], assignee)
|
|
|
|
|
response_assignee = response.data["assignee"]["id"] if response.data["assignee"] else None
|
|
|
|
|
self.assertEqual(response_assignee, assignee)
|
|
|
|
|
self.assertEqual(response.data["overlap"], db_task.overlap)
|
|
|
|
|
self.assertEqual(response.data["segment_size"], db_task.segment_size)
|
|
|
|
|
self.assertEqual(response.data["image_quality"], db_task.data.image_quality)
|
|
|
|
|
@ -1179,11 +1181,13 @@ class TaskUpdateAPITestCase(APITestCase):
|
|
|
|
|
mode = data.get("mode", db_task.mode)
|
|
|
|
|
self.assertEqual(response.data["mode"], mode)
|
|
|
|
|
owner = db_task.owner.id if db_task.owner else None
|
|
|
|
|
owner = data.get("owner", owner)
|
|
|
|
|
self.assertEqual(response.data["owner"], owner)
|
|
|
|
|
owner = data.get("owner_id", owner)
|
|
|
|
|
response_owner = response.data["owner"]["id"] if response.data["owner"] else None
|
|
|
|
|
self.assertEqual(response_owner, owner)
|
|
|
|
|
assignee = db_task.assignee.id if db_task.assignee else None
|
|
|
|
|
assignee = data.get("assignee", assignee)
|
|
|
|
|
self.assertEqual(response.data["assignee"], assignee)
|
|
|
|
|
assignee = data.get("assignee_id", assignee)
|
|
|
|
|
response_assignee = response.data["assignee"]["id"] if response.data["assignee"] else None
|
|
|
|
|
self.assertEqual(response_assignee, assignee)
|
|
|
|
|
self.assertEqual(response.data["overlap"], db_task.overlap)
|
|
|
|
|
self.assertEqual(response.data["segment_size"], db_task.segment_size)
|
|
|
|
|
image_quality = data.get("image_quality", db_task.data.image_quality)
|
|
|
|
|
@ -1213,7 +1217,7 @@ class TaskUpdateAPITestCase(APITestCase):
|
|
|
|
|
def test_api_v1_tasks_id_admin(self):
|
|
|
|
|
data = {
|
|
|
|
|
"name": "new name for the task",
|
|
|
|
|
"owner": self.owner.id,
|
|
|
|
|
"owner_id": self.owner.id,
|
|
|
|
|
"labels": [{
|
|
|
|
|
"name": "non-vehicle",
|
|
|
|
|
"attributes": [{
|
|
|
|
|
@ -1229,7 +1233,7 @@ class TaskUpdateAPITestCase(APITestCase):
|
|
|
|
|
def test_api_v1_tasks_id_user(self):
|
|
|
|
|
data = {
|
|
|
|
|
"name": "new name for the task",
|
|
|
|
|
"owner": self.assignee.id,
|
|
|
|
|
"owner_id": self.assignee.id,
|
|
|
|
|
"labels": [{
|
|
|
|
|
"name": "car",
|
|
|
|
|
"attributes": [{
|
|
|
|
|
@ -1277,7 +1281,7 @@ class TaskPartialUpdateAPITestCase(TaskUpdateAPITestCase):
|
|
|
|
|
|
|
|
|
|
data = {
|
|
|
|
|
"name": "new name for the task",
|
|
|
|
|
"owner": self.owner.id
|
|
|
|
|
"owner_id": self.owner.id
|
|
|
|
|
}
|
|
|
|
|
self._check_api_v1_tasks_id(self.admin, data)
|
|
|
|
|
# Now owner is updated, but self.db_tasks are obsolete
|
|
|
|
|
@ -1300,8 +1304,8 @@ class TaskPartialUpdateAPITestCase(TaskUpdateAPITestCase):
|
|
|
|
|
self._check_api_v1_tasks_id(self.user, data)
|
|
|
|
|
|
|
|
|
|
data = {
|
|
|
|
|
"owner": self.observer.id,
|
|
|
|
|
"assignee": self.annotator.id
|
|
|
|
|
"owner_id": self.observer.id,
|
|
|
|
|
"assignee_id": self.annotator.id
|
|
|
|
|
}
|
|
|
|
|
self._check_api_v1_tasks_id(self.user, data)
|
|
|
|
|
|
|
|
|
|
@ -1339,8 +1343,9 @@ class TaskCreateAPITestCase(APITestCase):
|
|
|
|
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
|
|
|
|
self.assertEqual(response.data["name"], data["name"])
|
|
|
|
|
self.assertEqual(response.data["mode"], "")
|
|
|
|
|
self.assertEqual(response.data["owner"], data.get("owner", user.id))
|
|
|
|
|
self.assertEqual(response.data["assignee"], data.get("assignee"))
|
|
|
|
|
self.assertEqual(response.data["owner"]["id"], data.get("owner_id", user.id))
|
|
|
|
|
assignee = response.data["assignee"]["id"] if response.data["assignee"] else None
|
|
|
|
|
self.assertEqual(assignee, data.get("assignee_id", None))
|
|
|
|
|
self.assertEqual(response.data["bug_tracker"], data.get("bug_tracker", ""))
|
|
|
|
|
self.assertEqual(response.data["overlap"], data.get("overlap", None))
|
|
|
|
|
self.assertEqual(response.data["segment_size"], data.get("segment_size", 0))
|
|
|
|
|
@ -1377,7 +1382,7 @@ class TaskCreateAPITestCase(APITestCase):
|
|
|
|
|
def test_api_v1_tasks_user(self):
|
|
|
|
|
data = {
|
|
|
|
|
"name": "new name for the task",
|
|
|
|
|
"owner": self.assignee.id,
|
|
|
|
|
"owner_id": self.assignee.id,
|
|
|
|
|
"labels": [{
|
|
|
|
|
"name": "car",
|
|
|
|
|
"attributes": [{
|
|
|
|
|
@ -1653,8 +1658,8 @@ class TaskDataAPITestCase(APITestCase):
|
|
|
|
|
response = self._get_task(user, task_id)
|
|
|
|
|
|
|
|
|
|
expected_status_code = status.HTTP_200_OK
|
|
|
|
|
if user == self.user and "owner" in spec and spec["owner"] != user.id and \
|
|
|
|
|
"assignee" in spec and spec["assignee"] != user.id:
|
|
|
|
|
if user == self.user and "owner_id" in spec and spec["owner_id"] != user.id and \
|
|
|
|
|
"assignee_id" in spec and spec["assignee_id"] != user.id:
|
|
|
|
|
expected_status_code = status.HTTP_403_FORBIDDEN
|
|
|
|
|
self.assertEqual(response.status_code, expected_status_code)
|
|
|
|
|
|
|
|
|
|
@ -1736,8 +1741,8 @@ class TaskDataAPITestCase(APITestCase):
|
|
|
|
|
def _test_api_v1_tasks_id_data(self, user):
|
|
|
|
|
task_spec = {
|
|
|
|
|
"name": "my task #1",
|
|
|
|
|
"owner": self.owner.id,
|
|
|
|
|
"assignee": self.assignee.id,
|
|
|
|
|
"owner_id": self.owner.id,
|
|
|
|
|
"assignee_id": self.assignee.id,
|
|
|
|
|
"overlap": 0,
|
|
|
|
|
"segment_size": 100,
|
|
|
|
|
"labels": [
|
|
|
|
|
@ -2034,8 +2039,8 @@ class TaskDataAPITestCase(APITestCase):
|
|
|
|
|
def test_api_v1_tasks_id_data_no_auth(self):
|
|
|
|
|
data = {
|
|
|
|
|
"name": "my task #3",
|
|
|
|
|
"owner": self.owner.id,
|
|
|
|
|
"assignee": self.assignee.id,
|
|
|
|
|
"owner_id": self.owner.id,
|
|
|
|
|
"assignee_id": self.assignee.id,
|
|
|
|
|
"overlap": 0,
|
|
|
|
|
"segment_size": 100,
|
|
|
|
|
"labels": [
|
|
|
|
|
@ -2080,8 +2085,8 @@ class JobAnnotationAPITestCase(APITestCase):
|
|
|
|
|
def _create_task(self, owner, assignee):
|
|
|
|
|
data = {
|
|
|
|
|
"name": "my task #1",
|
|
|
|
|
"owner": owner.id,
|
|
|
|
|
"assignee": assignee.id,
|
|
|
|
|
"owner_id": owner.id,
|
|
|
|
|
"assignee_id": assignee.id,
|
|
|
|
|
"overlap": 0,
|
|
|
|
|
"segment_size": 100,
|
|
|
|
|
"labels": [
|
|
|
|
|
|