Skip to content

Commit b2b1b42

Browse files
Narek MkhitaryanNarek Mkhitaryan
authored andcommitted
added annotations check in copy/move items tests
1 parent 5e32e03 commit b2b1b42

File tree

2 files changed

+85
-18
lines changed

2 files changed

+85
-18
lines changed

tests/integration/items/test_copy_items.py

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
import json
12
import os
3+
import tempfile
24
from collections import Counter
5+
from os.path import join
36
from pathlib import Path
47

58
from src.superannotate import AppException
@@ -13,12 +16,13 @@ class TestCopyItems(BaseTestCase):
1316
PROJECT_NAME = "TestCopyItemsVector"
1417
PROJECT_DESCRIPTION = "TestCopyItemsVector"
1518
PROJECT_TYPE = "Vector"
16-
IMAGE_NAME = "test_image"
17-
IMAGE_NAME_2 = "test_image_2"
19+
IMAGE_NAME = "example_image_1.jpg"
20+
IMAGE_NAME_2 = "example_image_2.jpg"
1821
FOLDER_1 = "folder_1"
1922
FOLDER_2 = "folder_2"
2023
CSV_PATH = "data_set/attach_urls.csv"
21-
Attachment = [
24+
TEST_FOLDER_PATH = "data_set/sample_project_vector"
25+
ATTACHMENT = [
2226
{
2327
"url": "https://drive.google.com/uc?export=download&id=1vwfCpTzcjxoEA4hhDxqapPOVvLVeS7ZS",
2428
"name": IMAGE_NAME,
@@ -29,6 +33,10 @@ class TestCopyItems(BaseTestCase):
2933
},
3034
]
3135

36+
@property
37+
def folder_path(self):
38+
return os.path.join(Path(__file__).parent.parent.parent, self.TEST_FOLDER_PATH)
39+
3240
@property
3341
def scv_path(self):
3442
return os.path.join(Path(__file__).parent.parent.parent, self.CSV_PATH)
@@ -43,6 +51,28 @@ def test_copy_items_from_root(self):
4351
assert len(skipped_items) == 0
4452
assert len(sa.search_items(f"{self.PROJECT_NAME}/{self.FOLDER_1}")) == 7
4553

54+
def test_copy_items_from_root_with_annotations(self):
55+
uploaded, _, _ = sa.attach_items(self.PROJECT_NAME, self.ATTACHMENT)
56+
assert len(uploaded) == 2
57+
annotation_path = join(self.folder_path, f"{self.IMAGE_NAME}___objects.json")
58+
sa.upload_image_annotations(self.PROJECT_NAME, self.IMAGE_NAME, annotation_path)
59+
sa.create_folder(self.PROJECT_NAME, self.FOLDER_1)
60+
skipped_items = sa.copy_items(
61+
self.PROJECT_NAME, f"{self.PROJECT_NAME}/{self.FOLDER_1}"
62+
)
63+
assert len(skipped_items) == 0
64+
assert len(sa.search_items(f"{self.PROJECT_NAME}/{self.FOLDER_1}")) == 2
65+
with tempfile.TemporaryDirectory() as tmp_dir:
66+
sa.download_image_annotations(
67+
f"{self.PROJECT_NAME}/{self.FOLDER_1}", self.IMAGE_NAME, tmp_dir
68+
)
69+
origin_annotation = json.load(open(annotation_path))
70+
annotation = json.load(open(join(tmp_dir, f"{self.IMAGE_NAME}.json")))
71+
self.assertEqual(
72+
len([i["attributes"] for i in annotation["instances"]]),
73+
len([i["attributes"] for i in origin_annotation["instances"]]),
74+
)
75+
4676
def test_copy_items_from_not_existing_folder(self):
4777
with self.assertRaisesRegexp(AppException, "Folder not found."):
4878
sa.copy_items(f"{self.PROJECT_NAME}/{self.FOLDER_1}", self.PROJECT_NAME)
@@ -79,7 +109,7 @@ def test_skipped_count(self):
79109
def test_copy_items_wrong_items_list(self):
80110
uploaded, _, _ = sa.attach_items(
81111
self.PROJECT_NAME,
82-
self.Attachment,
112+
self.ATTACHMENT,
83113
)
84114
sa.set_approval_statuses(self.PROJECT_NAME, "Approved", items=[self.IMAGE_NAME])
85115
sa.set_annotation_statuses(
@@ -102,7 +132,7 @@ def test_copy_duplicated_items_without_data_with_replace_strategy(self):
102132
sa.create_folder(self.PROJECT_NAME, self.FOLDER_1)
103133
sa.create_folder(self.PROJECT_NAME, self.FOLDER_2)
104134
uploaded, _, _ = sa.attach_items(
105-
f"{self.PROJECT_NAME}/{self.FOLDER_1}", self.Attachment
135+
f"{self.PROJECT_NAME}/{self.FOLDER_1}", self.ATTACHMENT
106136
)
107137
assert len(uploaded) == 2
108138
sa.set_approval_statuses(
@@ -117,7 +147,7 @@ def test_copy_duplicated_items_without_data_with_replace_strategy(self):
117147
)
118148

119149
uploaded_2, _, _ = sa.attach_items(
120-
f"{self.PROJECT_NAME}/{self.FOLDER_2}", self.Attachment
150+
f"{self.PROJECT_NAME}/{self.FOLDER_2}", self.ATTACHMENT
121151
)
122152
assert len(uploaded_2) == 2
123153

tests/integration/items/test_move_items.py

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
import json
12
import os
3+
import tempfile
4+
from os.path import join
25
from pathlib import Path
36

47
from src.superannotate import SAClient
@@ -11,13 +14,14 @@ class TestMoveItems(BaseTestCase):
1114
PROJECT_NAME = "TestMoveItemsVector"
1215
PROJECT_DESCRIPTION = "TestCopyItemsVector"
1316
PROJECT_TYPE = "Vector"
14-
IMAGE_NAME = "test_image"
15-
IMAGE_NAME_2 = "test_image_2"
17+
IMAGE_NAME = "example_image_1.jpg"
18+
IMAGE_NAME_2 = "example_image_2.jpg"
1619
FOLDER_1 = "folder_1"
1720
FOLDER_2 = "folder_2"
1821
CSV_PATH = "data_set/attach_urls.csv"
22+
TEST_FOLDER_PATH = "data_set/sample_project_vector"
1923

20-
Attachment = [
24+
ATTACHMENT = [
2125
{
2226
"url": "https://drive.google.com/uc?export=download&id=1vwfCpTzcjxoEA4hhDxqapPOVvLVeS7ZS",
2327
"name": IMAGE_NAME,
@@ -28,6 +32,10 @@ class TestMoveItems(BaseTestCase):
2832
},
2933
]
3034

35+
@property
36+
def folder_path(self):
37+
return os.path.join(Path(__file__).parent.parent.parent, self.TEST_FOLDER_PATH)
38+
3139
@property
3240
def scv_path(self):
3341
return os.path.join(Path(__file__).parent.parent.parent, self.CSV_PATH)
@@ -46,22 +54,37 @@ def test_move_items_from_folder(self):
4654
sa.create_folder(self.PROJECT_NAME, self.FOLDER_1)
4755
sa.create_folder(self.PROJECT_NAME, self.FOLDER_2)
4856
uploaded, _, _ = sa.attach_items(
49-
f"{self.PROJECT_NAME}/{self.FOLDER_1}", self.scv_path
57+
f"{self.PROJECT_NAME}/{self.FOLDER_1}", self.ATTACHMENT
5058
)
51-
assert len(uploaded) == 7
59+
annotation_path = join(self.folder_path, f"{self.IMAGE_NAME}___objects.json")
60+
sa.upload_image_annotations(
61+
f"{self.PROJECT_NAME}/{self.FOLDER_1}", self.IMAGE_NAME, annotation_path
62+
)
63+
64+
assert len(uploaded) == 2
5265
skipped_items = sa.move_items(
5366
f"{self.PROJECT_NAME}/{self.FOLDER_1}",
5467
f"{self.PROJECT_NAME}/{self.FOLDER_2}",
5568
)
5669
assert len(skipped_items) == 0
57-
assert len(sa.search_items(f"{self.PROJECT_NAME}/{self.FOLDER_2}")) == 7
70+
assert len(sa.search_items(f"{self.PROJECT_NAME}/{self.FOLDER_2}")) == 2
5871
assert len(sa.search_items(f"{self.PROJECT_NAME}/{self.FOLDER_1}")) == 0
72+
with tempfile.TemporaryDirectory() as tmp_dir:
73+
sa.download_image_annotations(
74+
f"{self.PROJECT_NAME}/{self.FOLDER_2}", self.IMAGE_NAME, tmp_dir
75+
)
76+
origin_annotation = json.load(open(annotation_path))
77+
annotation = json.load(open(join(tmp_dir, f"{self.IMAGE_NAME}.json")))
78+
self.assertEqual(
79+
len([i["attributes"] for i in annotation["instances"]]),
80+
len([i["attributes"] for i in origin_annotation["instances"]]),
81+
)
5982

6083
def test_move_items_from_folder_with_replace(self):
6184
sa.create_folder(self.PROJECT_NAME, self.FOLDER_1)
6285
sa.create_folder(self.PROJECT_NAME, self.FOLDER_2)
6386
uploaded, _, _ = sa.attach_items(
64-
f"{self.PROJECT_NAME}/{self.FOLDER_1}", self.Attachment
87+
f"{self.PROJECT_NAME}/{self.FOLDER_1}", self.ATTACHMENT
6588
)
6689
assert len(uploaded) == 2
6790
sa.set_approval_statuses(
@@ -76,7 +99,7 @@ def test_move_items_from_folder_with_replace(self):
7699
)
77100

78101
uploaded_2, _, _ = sa.attach_items(
79-
f"{self.PROJECT_NAME}/{self.FOLDER_2}", self.Attachment
102+
f"{self.PROJECT_NAME}/{self.FOLDER_2}", self.ATTACHMENT
80103
)
81104
assert len(uploaded_2) == 2
82105
folder_2_items = sa.search_items(f"{self.PROJECT_NAME}/{self.FOLDER_2}")
@@ -102,7 +125,7 @@ def test_move_items_from_folder_with_replace_annotations_only(self):
102125
sa.create_folder(self.PROJECT_NAME, self.FOLDER_1)
103126
sa.create_folder(self.PROJECT_NAME, self.FOLDER_2)
104127
uploaded, _, _ = sa.attach_items(
105-
f"{self.PROJECT_NAME}/{self.FOLDER_1}", self.Attachment
128+
f"{self.PROJECT_NAME}/{self.FOLDER_1}", self.ATTACHMENT
106129
)
107130
assert len(uploaded) == 2
108131
sa.set_approval_statuses(
@@ -115,9 +138,13 @@ def test_move_items_from_folder_with_replace_annotations_only(self):
115138
"Completed",
116139
items=[self.IMAGE_NAME, self.IMAGE_NAME_2],
117140
)
141+
annotation_path = join(self.folder_path, f"{self.IMAGE_NAME}___objects.json")
142+
sa.upload_image_annotations(
143+
f"{self.PROJECT_NAME}/{self.FOLDER_1}", self.IMAGE_NAME, annotation_path
144+
)
118145

119146
uploaded_2, _, _ = sa.attach_items(
120-
f"{self.PROJECT_NAME}/{self.FOLDER_2}", self.Attachment
147+
f"{self.PROJECT_NAME}/{self.FOLDER_2}", self.ATTACHMENT
121148
)
122149
assert len(uploaded_2) == 2
123150
folder_2_items = sa.search_items(f"{self.PROJECT_NAME}/{self.FOLDER_2}")
@@ -138,17 +165,27 @@ def test_move_items_from_folder_with_replace_annotations_only(self):
138165
folder_2_items = sa.search_items(f"{self.PROJECT_NAME}/{self.FOLDER_2}")
139166
assert folder_2_items[0]["annotation_status"] == "NotStarted"
140167
assert not folder_2_items[0]["approval_status"]
168+
with tempfile.TemporaryDirectory() as tmp_dir:
169+
sa.download_image_annotations(
170+
f"{self.PROJECT_NAME}/{self.FOLDER_2}", self.IMAGE_NAME, tmp_dir
171+
)
172+
origin_annotation = json.load(open(annotation_path))
173+
annotation = json.load(open(join(tmp_dir, f"{self.IMAGE_NAME}.json")))
174+
self.assertEqual(
175+
len([i["attributes"] for i in annotation["instances"]]),
176+
len([i["attributes"] for i in origin_annotation["instances"]]),
177+
)
141178

142179
def test_move_items_from_folder_with_skip(self):
143180
sa.create_folder(self.PROJECT_NAME, self.FOLDER_1)
144181
sa.create_folder(self.PROJECT_NAME, self.FOLDER_2)
145182
uploaded, _, _ = sa.attach_items(
146-
f"{self.PROJECT_NAME}/{self.FOLDER_1}", self.Attachment
183+
f"{self.PROJECT_NAME}/{self.FOLDER_1}", self.ATTACHMENT
147184
)
148185
assert len(uploaded) == 2
149186

150187
uploaded_2, _, _ = sa.attach_items(
151-
f"{self.PROJECT_NAME}/{self.FOLDER_2}", self.Attachment
188+
f"{self.PROJECT_NAME}/{self.FOLDER_2}", self.ATTACHMENT
152189
)
153190
assert len(uploaded_2) == 2
154191

0 commit comments

Comments
 (0)