---
|
test_name: image_upload
|
strict: false
|
marks:
|
- usefixtures:
|
- django_live_url
|
stages:
|
- id: signup
|
type: ref
|
- name: stage
|
request:
|
data:
|
label_config: <View></View>
|
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: <View></View>
|
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: <View><TimeSeriesLabels name="label" toName="ts"><Label value="Run"/><Label value="Walk"/></TimeSeriesLabels> <TimeSeries name="ts" valueType="url" value="$csv" timeColumn="time"><Channel column="sensorone" /><Channel column="sensortwo" /></TimeSeries></View>
|
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: <View></View>
|
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: <View></View>
|
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: <View><Image name="image" value="$image"/><Choices name="label" toName="image"><Choice
|
value="Cat"/><Choice value="Dog"/></Choices></View>
|
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: <View><Image name="image" value="$image"/><Choices name="label" toName="image"><Choice
|
value="Cat"/><Choice value="Dog"/></Choices></View>
|
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: <View><Image name="image" value="$image"/><RectangleLabels name="bbox" toName="image" choices="multiple"><Label
|
value="Cat"/><Label value="Dog"/></RectangleLabels></View>
|
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: <View><Image name="image" value="$image"/><Choices name="label" toName="image"><Choice
|
value="AAA"/><Choice value="BBB"/></Choices></View>
|
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: <View><Image name="image" value="$image"/><RectangleLabels name="objects" toName="image" choices="multiple"><Label
|
value="Cat"/><Label value="Dog"/></RectangleLabels></View>
|
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: <View></View>
|
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: <View></View>
|
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
|