11from pathlib import Path
22import time
3-
43import pytest
5-
64import superannotate as sa
5+ from superannotate .api import API
6+
7+ _api = API .get_instance ()
78
89PROJECT_NAME_VECTOR1 = "test assign images1"
910PROJECT_NAME_VECTOR2 = "test assign images2"
@@ -16,7 +17,7 @@ def test_assign_images(tmpdir):
1617 projects = sa .search_projects (PROJECT_NAME_VECTOR1 , return_metadata = True )
1718 for project in projects :
1819 sa .delete_project (project )
19-
20+ time . sleep ( 1 )
2021 project = sa .create_project (PROJECT_NAME_VECTOR1 , "test" , "Vector" )
2122 email = sa .get_team_metadata ()["users" ][0 ]["email" ]
2223 sa .share_project (project , email , "QA" )
@@ -70,7 +71,7 @@ def test_assign_images_folder(tmpdir):
7071 projects = sa .search_projects (PROJECT_NAME_VECTOR2 , return_metadata = True )
7172 for project in projects :
7273 sa .delete_project (project )
73-
74+ time . sleep ( 1 )
7475 project = sa .create_project (PROJECT_NAME_VECTOR2 , "test" , "Vector" )
7576 email = sa .get_team_metadata ()["users" ][0 ]["email" ]
7677 sa .share_project (project , email , "QA" )
@@ -118,4 +119,116 @@ def test_assign_images_folder(tmpdir):
118119 assert im1_metadata ["annotator_id" ] == email
119120 assert im2_metadata ["annotator_id" ] == email
120121 assert im1_metadata ["qa_id" ] is None
121- assert im2_metadata ["qa_id" ] is None
122+ assert im2_metadata ["qa_id" ] is None
123+
124+
125+ def test_unassign_images (tmpdir ):
126+ tmpdir = Path (tmpdir )
127+ projects = sa .search_projects (PROJECT_NAME_VECTOR1 , return_metadata = True )
128+ for project in projects :
129+ sa .delete_project (project )
130+ time .sleep (1 )
131+ project = sa .create_project (PROJECT_NAME_VECTOR1 , "test" , "Vector" )
132+ email = sa .get_team_metadata ()["users" ][0 ]["email" ]
133+ sa .share_project (project , email , "QA" )
134+ sa .upload_images_from_folder_to_project (
135+ project , "./tests/sample_project_vector"
136+ )
137+ sa .assign_images (
138+ project , ["example_image_1.jpg" , "example_image_2.jpg" ], email
139+ )
140+ sa .unassign_images (
141+ project ,
142+ ["example_image_1.jpg" , "example_image_2.jpg" ],
143+ )
144+
145+ im1_metadata = sa .get_image_metadata (project , "example_image_1.jpg" )
146+ im2_metadata = sa .get_image_metadata (project , "example_image_2.jpg" )
147+
148+ assert im1_metadata ["qa_id" ] == None
149+ assert im2_metadata ["qa_id" ] == None
150+
151+
152+ def test_assign_folder (tmpdir ):
153+ tmpdir = Path (tmpdir )
154+ projects = sa .search_projects (PROJECT_NAME_VECTOR1 , return_metadata = True )
155+ for project in projects :
156+ sa .delete_project (project )
157+ time .sleep (1 )
158+ project = sa .create_project (PROJECT_NAME_VECTOR1 , "test" , "Vector" )
159+ folder_name = "assign_folder"
160+ sa .create_folder (project , folder_name )
161+ email = sa .get_team_metadata ()["users" ][1 ]["email" ]
162+ sa .share_project (project , email , "QA" )
163+ sa .assign_folder (project , folder_name , [email ])
164+ folders = _search_folders (project , includeUsers = True )
165+ assert len (folders ["data" ][0 ]['folder_users' ]) > 0
166+
167+
168+ def test_unassign_folder (tmpdir ):
169+ tmpdir = Path (tmpdir )
170+ projects = sa .search_projects (PROJECT_NAME_VECTOR1 , return_metadata = True )
171+ for project in projects :
172+ sa .delete_project (project )
173+ time .sleep (1 )
174+ project = sa .create_project (PROJECT_NAME_VECTOR1 , "test" , "Vector" )
175+ folder_name = "assign_folder"
176+ sa .create_folder (project , folder_name )
177+ email = sa .get_team_metadata ()["users" ][1 ]["email" ]
178+ sa .share_project (project , email , "QA" )
179+ sa .assign_folder (project , folder_name , [email ])
180+ folders = _search_folders (project , includeUsers = True )
181+ assert len (folders ["data" ][0 ]['folder_users' ]) > 0
182+ sa .unassign_folder (project , folder_name )
183+ folders = _search_folders (project , includeUsers = True )
184+ assert len (folders ["data" ][0 ]['folder_users' ]) == 0
185+
186+
187+ def _search_folders (project , folder_name = None , includeUsers = False ):
188+ team_id , project_id = project ["team_id" ], project ["id" ]
189+ params = {
190+ 'team_id' : team_id ,
191+ 'project_id' : project_id ,
192+ 'offset' : 0 ,
193+ 'name' : folder_name ,
194+ 'is_root' : 0 ,
195+ 'includeUsers' : includeUsers
196+ }
197+
198+ response = _api .send_request (req_type = 'GET' , path = '/folders' , params = params )
199+ response = response .json ()
200+ return response
201+
202+
203+ def test_assign_folder_unverified_users (tmpdir , caplog ):
204+ tmpdir = Path (tmpdir )
205+ projects = sa .search_projects (PROJECT_NAME_VECTOR1 , return_metadata = True )
206+ for project in projects :
207+ sa .delete_project (project )
208+ time .sleep (1 )
209+ project = sa .create_project (PROJECT_NAME_VECTOR1 , "test" , "Vector" )
210+ folder_name = "assign_folder"
211+ sa .create_folder (project , folder_name )
212+ email = "unverified_user@mail.com"
213+ sa .assign_folder (project , folder_name , [email ])
214+ "Skipping unverified_user@mail.com from assignees." in caplog .text
215+
216+
217+ def test_assign_images_unverified_user (tmpdir , caplog ):
218+ tmpdir = Path (tmpdir )
219+
220+ projects = sa .search_projects (PROJECT_NAME_VECTOR2 , return_metadata = True )
221+ for project in projects :
222+ sa .delete_project (project )
223+ time .sleep (1 )
224+ project = sa .create_project (PROJECT_NAME_VECTOR2 , "test" , "Vector" )
225+ sa .create_folder (project , FOLDER2 )
226+ project_folder = project ["name" ] + "/" + FOLDER2
227+ sa .upload_images_from_folder_to_project (
228+ project_folder , "./tests/sample_project_vector"
229+ )
230+ email = "unverified_user@email.com"
231+ sa .assign_images (
232+ project_folder , ["example_image_1.jpg" , "example_image_2.jpg" ], email
233+ )
234+ "Skipping unverified_user@mail.com from assignees." in caplog .text
0 commit comments