From 9b0d963d1ae90c90c604e080c49f853f3a40597f Mon Sep 17 00:00:00 2001 From: Maria Khrustaleva Date: Fri, 2 Dec 2022 22:49:33 +0100 Subject: [PATCH] Fix REST API tests (#5416) Fixed REST API tests after merging #5408 and #5396 to develop Co-authored-by: Boris Sekachev Co-authored-by: Nikita Manovich --- cvat/apps/engine/views.py | 4 ++-- tests/cypress/support/commands_canvas3d.js | 11 +++++++++-- tests/python/rest_api/test_jobs.py | 1 - tests/python/rest_api/test_tasks.py | 2 +- tests/python/shared/assets/annotations.json | 6 ------ tests/python/shared/assets/jobs.json | 2 +- tests/python/shared/assets/projects.json | 4 ++-- tests/python/shared/assets/tasks.json | 4 ++-- tests/python/shared/assets/users.json | 2 +- tests/python/shared/fixtures/data.py | 6 ++++-- tests/python/shared/utils/dump_objects.py | 4 +++- 11 files changed, 25 insertions(+), 21 deletions(-) diff --git a/cvat/apps/engine/views.py b/cvat/apps/engine/views.py index 0d2f3673687d..d507d7e9adf2 100644 --- a/cvat/apps/engine/views.py +++ b/cvat/apps/engine/views.py @@ -1131,7 +1131,7 @@ def annotations(self, request, pk): get_data=dm.task.get_task_data, ) else: - return Response(data="Exporting a task without data is not allowed", + return Response(data="Exporting annotations from a task without data is not allowed", status=status.HTTP_400_BAD_REQUEST) elif request.method == 'POST' or request.method == 'OPTIONS': return self.import_annotations( @@ -1311,7 +1311,7 @@ def dataset_export(self, request, pk): export_func=_export_annotations, callback=dm.views.export_task_as_dataset) else: - return Response(data="Exporting a task without data is not allowed", + return Response(data="Exporting a dataset from a task without data is not allowed", status=status.HTTP_400_BAD_REQUEST) @extend_schema(tags=['jobs']) diff --git a/tests/cypress/support/commands_canvas3d.js b/tests/cypress/support/commands_canvas3d.js index 3abcccae3e43..3343429ed1ca 100644 --- a/tests/cypress/support/commands_canvas3d.js +++ b/tests/cypress/support/commands_canvas3d.js @@ -1,12 +1,19 @@ // Copyright (C) 2021-2022 Intel Corporation +// Copyright (C) 2022 CVAT.ai Corporation // // SPDX-License-Identifier: MIT +/* eslint-disable cypress/no-unnecessary-waiting */ + /// Cypress.Commands.add('compareImagesAndCheckResult', (baseImage, afterImage, noChangesExpected) => { cy.compareImages(baseImage, afterImage).then((diffPercent) => { - noChangesExpected ? expect(diffPercent).to.be.lt(0.01) : expect(diffPercent).to.be.gt(0); + if (noChangesExpected) { + expect(diffPercent).to.be.lt(0.02); + } else { + expect(diffPercent).to.be.gt(0); + } }); }); @@ -31,5 +38,5 @@ Cypress.Commands.add('customScreenshot', (element, screenshotName) => { getEl = cy.get(element).find('.cvat-canvas3d-fullsize'); padding = -40; } - getEl.screenshot(screenshotName, {padding: padding}); + getEl.screenshot(screenshotName, { padding }); }); diff --git a/tests/python/rest_api/test_jobs.py b/tests/python/rest_api/test_jobs.py index 1246b40d0c0c..0a8bb53c37ef 100644 --- a/tests/python/rest_api/test_jobs.py +++ b/tests/python/rest_api/test_jobs.py @@ -153,7 +153,6 @@ def _test_get_job_annotations_200(self, user, jid, data, **kwargs): assert response.status == HTTPStatus.OK response_data = json.loads(response.data) - response_data["shapes"] = sorted(response_data["shapes"], key=lambda a: a["id"]) assert ( DeepDiff(data, response_data, exclude_regex_paths=r"root\['version|updated_date'\]") == {} diff --git a/tests/python/rest_api/test_tasks.py b/tests/python/rest_api/test_tasks.py index af7591d50e6a..e85d86884b0d 100644 --- a/tests/python/rest_api/test_tasks.py +++ b/tests/python/rest_api/test_tasks.py @@ -375,7 +375,7 @@ def test_member_update_task_annotation( ): users = find_users(role=role, org=org) tasks = tasks_by_org[org] - username, tid = find_task_staff_user(tasks, users, task_staff, [14]) + username, tid = find_task_staff_user(tasks, users, task_staff, [12, 14]) data = request_data(tid) with make_api_client(username) as api_client: diff --git a/tests/python/shared/assets/annotations.json b/tests/python/shared/assets/annotations.json index f2a7dbe4d1e5..7cc496b2c239 100644 --- a/tests/python/shared/assets/annotations.json +++ b/tests/python/shared/assets/annotations.json @@ -1109,12 +1109,6 @@ "tracks": [], "version": 0 }, - "12": { - "shapes": [], - "tags": [], - "tracks": [], - "version": 0 - }, "13": { "shapes": [ { diff --git a/tests/python/shared/assets/jobs.json b/tests/python/shared/assets/jobs.json index 2df47bfa09f4..627bd2904070 100644 --- a/tests/python/shared/assets/jobs.json +++ b/tests/python/shared/assets/jobs.json @@ -38,7 +38,7 @@ "status": "annotation", "stop_frame": 24, "task_id": 15, - "updated_date": "2022-12-01T12:53:35.354431Z", + "updated_date": "2022-12-01T12:53:35.354000Z", "url": "http://localhost:8080/api/jobs/19" }, { diff --git a/tests/python/shared/assets/projects.json b/tests/python/shared/assets/projects.json index c21987f28aae..482b983a79aa 100644 --- a/tests/python/shared/assets/projects.json +++ b/tests/python/shared/assets/projects.json @@ -6,7 +6,7 @@ { "assignee": null, "bug_tracker": "", - "created_date": "2022-12-01T12:52:42.454308Z", + "created_date": "2022-12-01T12:52:42.454000Z", "dimension": "2d", "id": 8, "labels": [ @@ -53,7 +53,7 @@ "tasks": [ 15 ], - "updated_date": "2022-12-01T12:53:34.917451Z", + "updated_date": "2022-12-01T12:53:34.917000Z", "url": "http://localhost:8080/api/projects/8" }, { diff --git a/tests/python/shared/assets/tasks.json b/tests/python/shared/assets/tasks.json index 4a2113bb5cd4..d04e65d47d71 100644 --- a/tests/python/shared/assets/tasks.json +++ b/tests/python/shared/assets/tasks.json @@ -6,7 +6,7 @@ { "assignee": null, "bug_tracker": "", - "created_date": "2022-12-01T12:53:10.425141Z", + "created_date": "2022-12-01T12:53:10.425000Z", "data": 14, "data_chunk_size": 72, "data_compressed_chunk_type": "imageset", @@ -76,7 +76,7 @@ "id": 16, "location": "local" }, - "updated_date": "2022-12-01T12:53:35.028385Z", + "updated_date": "2022-12-01T12:53:35.028000Z", "url": "http://localhost:8080/api/tasks/15" }, { diff --git a/tests/python/shared/assets/users.json b/tests/python/shared/assets/users.json index bfd9abd562e4..af5d8066289f 100644 --- a/tests/python/shared/assets/users.json +++ b/tests/python/shared/assets/users.json @@ -310,7 +310,7 @@ "is_active": true, "is_staff": true, "is_superuser": true, - "last_login": "2022-12-01T12:52:15.631928Z", + "last_login": "2022-12-01T12:52:15.631000Z", "last_name": "First", "url": "http://localhost:8080/api/users/1", "username": "admin1" diff --git a/tests/python/shared/fixtures/data.py b/tests/python/shared/fixtures/data.py index 18b9c0f3904a..4f18cdd5e324 100644 --- a/tests/python/shared/fixtures/data.py +++ b/tests/python/shared/fixtures/data.py @@ -350,7 +350,7 @@ def find(issues, users, is_staff, is_admin): @pytest.fixture(scope="session") def filter_jobs_with_shapes(annotations): def find(jobs): - return list(filter(lambda j: annotations["job"][str(j["id"])]["shapes"], jobs)) + return list(filter(lambda j: annotations["job"].get(str(j["id"]), {}).get("shapes"), jobs)) return find @@ -358,7 +358,9 @@ def find(jobs): @pytest.fixture(scope="session") def filter_tasks_with_shapes(annotations): def find(tasks): - return list(filter(lambda t: annotations["task"][str(t["id"])]["shapes"], tasks)) + return list( + filter(lambda t: annotations["task"].get(str(t["id"]), {}).get("shapes"), tasks) + ) return find diff --git a/tests/python/shared/utils/dump_objects.py b/tests/python/shared/utils/dump_objects.py index 7a1bbc6a6939..fb9b2fcacecc 100644 --- a/tests/python/shared/utils/dump_objects.py +++ b/tests/python/shared/utils/dump_objects.py @@ -4,6 +4,7 @@ import json import os.path as osp +from http import HTTPStatus from config import ASSETS_DIR, get_method @@ -31,7 +32,8 @@ for _obj in response.json()["results"]: oid = _obj["id"] response = get_method("admin1", f"{obj}s/{oid}/annotations") - annotations[obj][oid] = response.json() + if response.status_code == HTTPStatus.OK: + annotations[obj][oid] = response.json() with open(osp.join(ASSETS_DIR, f"annotations.json"), "w") as f: json.dump(annotations, f, indent=2, sort_keys=True)