--- test_name: image_upload strict: false marks: - usefixtures: - django_live_url stages: - id: signup type: ref - name: stage request: data: label_config: title: Image upload method: POST url: '{django_live_url}/api/projects' response: save: json: project_pk: id status_code: 201 - name: stage request: files: image_0: tests/test_suites/samples/test_image.jpg image_1: tests/test_suites/samples/test_image.png headers: content-type: multipart/form-data method: POST url: '{django_live_url}/api/projects/{project_pk}/import' response: json: annotation_count: 0 prediction_count: 0 task_count: 2 status_code: 201 - name: stage request: method: GET url: '{django_live_url}/api/projects/{project_pk}/tasks' response: status_code: 200 --- test_name: consistency_of_data_columns strict: false marks: - usefixtures: - django_live_url stages: - id: signup type: ref - name: stage request: data: label_config: title: Check consistency of imported data columns method: POST url: '{django_live_url}/api/projects' response: save: json: project_pk: id status_code: 201 - name: stage request: files: csv_0: tests/test_suites/samples/test_1.csv headers: content-type: multipart/form-data method: POST url: '{django_live_url}/api/projects/{project_pk}/tasks/bulk' response: json: annotation_count: 0 prediction_count: 0 task_count: 2 status_code: 201 - name: stage request: files: csv_0: tests/test_suites/samples/test_2.csv headers: content-type: multipart/form-data method: POST url: '{django_live_url}/api/projects/{project_pk}/tasks/bulk' response: json: annotation_count: 0 prediction_count: 0 task_count: 3 status_code: 201 - name: stage request: method: GET url: '{django_live_url}/api/projects/{project_pk}/summary' response: json: all_data_columns: key1: 5 key2: 5 value1: 5 value100: 3 value2: 2 common_data_columns: - key1 - key2 - value1 status_code: 200 --- test_name: import_time_series_with_predictions strict: false marks: - usefixtures: - django_live_url stages: - id: signup type: ref - name: stage request: data: label_config: title: Check consistency of imported data columns method: POST url: '{django_live_url}/api/projects' response: save: json: project_pk: id status_code: 201 - name: stage request: files: csv_0: tests/test_suites/samples/random-with-predictions.json headers: content-type: multipart/form-data method: POST url: '{django_live_url}/api/projects/{project_pk}/tasks/bulk' response: json: annotation_count: 0 prediction_count: 1 task_count: 1 status_code: 201 --- test_name: import_from_url strict: false marks: - usefixtures: - import_from_url - django_live_url stages: - id: signup type: ref - name: stage request: data: label_config: title: Check consistency of imported data columns method: POST url: '{django_live_url}/api/projects' response: save: json: project_pk: id status_code: 201 - name: stage request: data: url: https://data.heartex.net/q/fffeaf81f4.json headers: content-type: application/x-www-form-urlencoded method: POST url: '{django_live_url}/api/projects/{project_pk}/tasks/bulk' response: status_code: 201 - name: stage request: data: url: http://data.heartextest.net/test_1.csv headers: content-type: application/x-www-form-urlencoded method: POST url: '{django_live_url}/api/projects/{project_pk}/import?commit_to_project=false' response: json: could_be_tasks_list: True status_code: 201 --- test_name: full_step_project_creation strict: false marks: - usefixtures: - django_live_url stages: - id: signup type: ref - name: stage request: data: is_draft: true method: POST url: '{django_live_url}/api/projects' response: save: json: project_pk: id status_code: 201 - name: stage request: files: image_0: tests/test_suites/samples/first.jpg image_1: tests/test_suites/samples/second.jpg headers: content-type: multipart/form-data method: POST url: '{django_live_url}/api/projects/{project_pk}/tasks/bulk' response: json: annotation_count: 0 prediction_count: 0 task_count: 2 status_code: 201 - name: stage request: method: GET url: '{django_live_url}/api/projects/{project_pk}/file-uploads' response: status_code: 200 - name: check_list_of_file_uploads request: method: GET url: '{django_live_url}/api/projects/{project_pk}/file-uploads' params: all: true response: status_code: 200 json: - id: !anyint - id: !anyint - name: stage request: method: GET url: '{django_live_url}/api/projects/{project_pk}/summary' response: json: all_data_columns: $undefined$: 2 common_data_columns: - $undefined$ status_code: 200 - name: stage request: headers: content-type: application/json json: is_draft: false method: PATCH url: '{django_live_url}/api/projects/{project_pk}' response: json: is_draft: false status_code: 200 - name: stage request: method: GET url: '{django_live_url}/api/projects' response: status_code: 200 - name: stage request: method: GET url: '{django_live_url}/api/projects/{project_pk}' response: json: created_by: avatar: null email: test_suites_user@heartex.com first_name: '' last_name: '' task_number: 2 title: '' total_predictions_number: 0 status_code: 200 - name: stage request: method: DELETE url: '{django_live_url}/api/projects/{project_pk}' response: status_code: 204 --- test_name: interpert_as_time_series strict: false marks: - usefixtures: - django_live_url stages: - id: signup type: ref - name: stage request: data: label_config: title: Interpert as time series method: POST url: '{django_live_url}/api/projects' response: save: json: project_pk: id status_code: 201 - name: stage request: files: csv_1: tests/test_suites/samples/test_3.csv csv_2: tests/test_suites/samples/test_4.csv headers: content-type: multipart/form-data method: POST url: '{django_live_url}/api/projects/{project_pk}/import?commit_to_project=false' response: json: annotation_count: null could_be_tasks_list: true prediction_count: null task_count: 5 save: json: file_upload_ids: file_upload_ids status_code: 201 - name: stage request: headers: content-type: application/json json: file_upload_ids: !force_format_include '{file_upload_ids}' files_as_tasks_list: false method: POST url: '{django_live_url}/api/projects/{project_pk}/reimport' response: json: task_count: 2 status_code: 201 - name: stage request: method: GET url: '{django_live_url}/api/projects/{project_pk}/tasks' response: status_code: 200 - name: stage request: headers: content-type: application/json json: file_upload_ids: !force_format_include '{file_upload_ids}' method: DELETE url: '{django_live_url}/api/projects/{project_pk}/file-uploads' response: json: deleted: 2 status_code: 200 --- test_name: import_previous_export strict: false marks: - usefixtures: - django_live_url stages: - id: signup type: ref - name: stage request: data: label_config: title: Image Classification Project method: POST url: '{django_live_url}/api/projects' response: save: json: project_pk: id status_code: 201 - name: stage request: files: json: tests/test_suites/samples/previous_export.json headers: content-type: multipart/form-data method: POST url: '{django_live_url}/api/projects/{project_pk}/import' response: status_code: 400 json: validation_errors: non_field_errors: - "Unknown annotator's email annotator_from_past@project.com" # Now let's create missed user and try again... - id: logout type: ref - id: signup name: Sign up request: url: "{django_live_url}/user/signup" data: email: annotator_from_past@project.com password: 12345678 method: POST response: status_code: 302 - id: login type: ref - name: stage request: files: json: tests/test_suites/samples/previous_export.json headers: content-type: multipart/form-data method: POST url: '{django_live_url}/api/projects/{project_pk}/import' response: status_code: 201 json: task_count: 1 annotation_count: 1 prediction_count: 0 could_be_tasks_list: false found_formats: {'.json': 1} data_columns: ['image'] - name: stage request: files: json: tests/test_suites/samples/previous_export_unknown_completed_by.json headers: content-type: multipart/form-data method: POST url: '{django_live_url}/api/projects/{project_pk}/import' response: status_code: 400 json: validation_errors: non_field_errors: - "Import data contains completed_by=99999 which is not a valid annotator's email or ID" --- test_name: import_minified_preannotations_classification strict: false marks: - usefixtures: - django_live_url stages: - id: signup type: ref - name: Create project request: data: label_config: title: Image Classification Project method: POST url: '{django_live_url}/api/projects' response: save: json: project_pk: id status_code: 201 - name: Import images with preannotations request: files: csv: tests/test_suites/samples/image_urls_with_classes.csv headers: content-type: multipart/form-data method: POST url: '{django_live_url}/api/projects/{project_pk}/import?return_task_ids=true&preannotated_from_fields=label' response: status_code: 201 save: json: first_task: "task_ids[0]" second_task: "task_ids[1]" - name: Check 1st task with prediction request: method: GET url: '{django_live_url}/api/tasks/{first_task}' response: status_code: 200 json: id: !int '{first_task}' annotations: [] drafts: [] predictions: - result: - from_name: label to_name: image type: choices value: choices: - Cat - name: Check 2nd task with prediction request: method: GET url: '{django_live_url}/api/tasks/{second_task}' response: status_code: 200 json: id: !int '{second_task}' annotations: [] drafts: [] predictions: - result: - from_name: label to_name: image type: choices value: choices: - Dog --- test_name: import_minified_preannotations_object_detection strict: false marks: - usefixtures: - django_live_url stages: - id: signup type: ref - name: Create project request: data: label_config: title: Image Classification Project method: POST url: '{django_live_url}/api/projects' response: save: json: project_pk: id status_code: 201 - name: Import images with preannotations request: files: csv: tests/test_suites/samples/image_urls_with_bboxes.json headers: content-type: multipart/form-data method: POST url: '{django_live_url}/api/projects/{project_pk}/import?return_task_ids=true&preannotated_from_fields=bbox' response: status_code: 201 save: json: first_task: "task_ids[0]" second_task: "task_ids[1]" - name: Check 1st task with prediction request: method: GET url: '{django_live_url}/api/tasks/{first_task}' response: status_code: 200 json: id: !int '{first_task}' annotations: [] drafts: [] predictions: - result: - from_name: bbox to_name: image type: rectanglelabels value: x: 10 y: 20 width: 30 height: 40 rectanglelabels: - Cat - Dog --- test_name: import_bulk_predictions strict: false marks: - usefixtures: - django_live_url stages: - id: signup type: ref - name: Create project request: data: label_config: title: Image Classification Project method: POST url: '{django_live_url}/api/projects' response: save: json: project_pk: id status_code: 201 - name: Import images request: files: csv: tests/test_suites/samples/image_urls.csv headers: content-type: multipart/form-data method: POST url: '{django_live_url}/api/projects/{project_pk}/import?return_task_ids=true' response: status_code: 201 save: json: first_task: "task_ids[0]" second_task: "task_ids[1]" third_task: "task_ids[2]" - name: Import bulk predictions request: method: POST url: '{django_live_url}/api/projects/{project_pk}/import/predictions' json: - task: !int '{first_task}' result: - from_name: label to_name: image type: choices value: choices: - AAA score: 0.123 - task: !int '{third_task}' result: - from_name: label to_name: image type: choices value: choices: - BBB model_version: abcdefgh response: status_code: 201 json: created: 2 - name: Check 1st task with prediction request: method: GET url: '{django_live_url}/api/tasks/{first_task}' response: status_code: 200 json: id: !int '{first_task}' annotations: [] drafts: [] predictions: - result: - from_name: label to_name: image type: choices value: choices: - AAA score: 0.123 model_version: undefined - name: Check 2nd task with prediction request: method: GET url: '{django_live_url}/api/tasks/{second_task}' response: status_code: 200 json: id: !int '{second_task}' annotations: [] drafts: [] predictions: [] - name: Check 3rd task with prediction request: method: GET url: '{django_live_url}/api/tasks/{third_task}' response: status_code: 200 json: id: !int '{third_task}' annotations: [] drafts: [] predictions: - result: - from_name: label to_name: image type: choices value: choices: - BBB score: null model_version: abcdefgh --- test_name: import_groud_truth_preannotations strict: false marks: - usefixtures: - django_live_url stages: - id: signup type: ref - name: Create project request: data: label_config: title: Image Classification Project method: POST url: '{django_live_url}/api/projects' response: save: json: project_pk: id status_code: 201 - name: Import images with preannotations request: files: csv: tests/test_suites/samples/image_urls_with_bboxes_gt.json headers: content-type: multipart/form-data method: POST url: '{django_live_url}/api/projects/{project_pk}/import?return_task_ids=true' response: status_code: 201 save: json: first_task: "task_ids[0]" second_task: "task_ids[1]" - name: Check 1st task with prediction request: method: GET url: '{django_live_url}/api/tasks/{first_task}' response: status_code: 200 json: id: !int '{first_task}' is_labeled: true --- test_name: extension_check strict: false marks: - usefixtures: - django_live_url stages: - id: signup type: ref - name: stage request: data: label_config: title: Check consistency of imported data columns method: POST url: '{django_live_url}/api/projects' response: save: json: project_pk: id status_code: 201 - name: stage request: files: file: tests/test_suites/samples/test.wrong_ext headers: content-type: multipart/form-data method: POST url: '{django_live_url}/api/projects/{project_pk}/import?commit_to_project=false' response: json: validation_errors: non_field_errors: - '.wrong_ext extension is not supported' status_code: 400 --- test_name: extension_check_empty strict: false marks: - usefixtures: - django_live_url stages: - id: signup type: ref - name: stage request: data: label_config: title: Check consistency of imported data columns method: POST url: '{django_live_url}/api/projects' response: save: json: project_pk: id status_code: 201 - name: stage request: files: file: tests/test_suites/samples/test_file_without_extension headers: content-type: multipart/form-data method: POST url: '{django_live_url}/api/projects/{project_pk}/import?commit_to_project=false' response: json: validation_errors: non_field_errors: - ' extension is not supported' status_code: 400