1919 decode_token_data ,
2020 TokenError ,
2121 ServerType ,
22+ ErrorCode ,
2223)
2324from ..client_push import push_project_async , push_project_cancel
2425from ..client_pull import (
@@ -224,10 +225,9 @@ def test_create_remote_project_from_local(mc):
224225 assert project_info ["namespace" ] == API_USER
225226 assert project_info ["id" ] == source_mp .project_id ()
226227
227- versions = mc .project_versions (project )
228- assert len (versions ) == 1
229- assert versions [0 ]["name" ] == "v1"
230- assert any (f for f in versions [0 ]["changes" ]["added" ] if f ["path" ] == "test.qgs" )
228+ version = mc .project_version_info (project_info .get ("id" ), "v1" )
229+ assert version ["name" ] == "v1"
230+ assert any (f for f in version ["changes" ]["added" ] if f ["path" ] == "test.qgs" )
231231
232232 # check we can fully download remote project
233233 mc .download_project (project , download_dir )
@@ -305,13 +305,9 @@ def test_push_pull_changes(mc):
305305 assert generate_checksum (os .path .join (project_dir , f_updated )) == f_remote_checksum
306306 assert project_info ["id" ] == mp .project_id ()
307307 assert len (project_info ["files" ]) == len (mp .inspect_files ())
308- project_versions = mc .project_versions (project )
309- assert len (project_versions ) == 2
310- f_change = next (
311- (f for f in project_versions [- 1 ]["changes" ]["updated" ] if f ["path" ] == f_updated ),
312- None ,
313- )
314- assert "origin_checksum" not in f_change # internal client info
308+ project_version = mc .project_version_info (project_info ["id" ], "v2" )
309+ updated_file = [f for f in project_version ["changes" ]["updated" ] if f ["path" ] == f_updated ][0 ]
310+ assert "origin_checksum" not in updated_file # internal client info
315311
316312 # test parallel changes
317313 with open (os .path .join (project_dir_2 , f_updated ), "w" ) as f :
@@ -796,7 +792,7 @@ def test_available_storage_validation(mcStorage):
796792 assert got_right_err
797793
798794 # Expecting empty project
799- project_info = get_project_info (mcStorage , API_USER , test_project )
795+ project_info = get_project_info (mcStorage , STORAGE_WORKSPACE , test_project )
800796 assert project_info ["version" ] == "v0"
801797 assert project_info ["disk_usage" ] == 0
802798
@@ -2018,7 +2014,7 @@ def test_report(mc):
20182014 ]
20192015 )
20202016 assert headers in content
2021- assert "base.gpkg,simple,test_plugin " in content
2017+ assert f "base.gpkg,simple,{ API_USER } " in content
20222018 assert "v3,update,,,2" in content
20232019 # files not edited are not in reports
20242020 assert "inserted_1_A.gpkg" not in content
@@ -2163,7 +2159,7 @@ def test_version_info(mc):
21632159 project = API_USER + "/" + test_project
21642160 project_dir = os .path .join (TMP_DIR , test_project ) # primary project dir
21652161 test_gpkg = "test.gpkg"
2166- file_path = os .path .join (project_dir , "test.gpkg" )
2162+ file_path = os .path .join (project_dir , test_gpkg )
21672163
21682164 cleanup (mc , project , [project_dir ])
21692165
@@ -2176,8 +2172,8 @@ def test_version_info(mc):
21762172
21772173 shutil .copy (os .path .join (TEST_DATA_DIR , "inserted_1_A_mod.gpkg" ), file_path )
21782174 mc .push_project (project_dir )
2179-
2180- info = mc .project_version_info (project , 2 )[ 0 ]
2175+ project_info = mc . project_info ( project )
2176+ info = mc .project_version_info (project_info . get ( "id" ), "v2" )
21812177 assert info ["namespace" ] == API_USER
21822178 assert info ["project_name" ] == test_project
21832179 assert info ["name" ] == "v2"
@@ -2344,9 +2340,14 @@ def test_project_metadata(mc):
23442340
23452341 # copy metadata in old format
23462342 os .makedirs (os .path .join (project_dir , ".mergin" ), exist_ok = True )
2347- project_metadata = os .path .join (project_dir , ".mergin" , "mergin.json" )
23482343 metadata_file = os .path .join (project_dir , "old_metadata.json" )
2349- shutil .copyfile (metadata_file , project_metadata )
2344+ # rewrite metadata nemespace to prevent failing tests with other user than test_plugin
2345+ with open (metadata_file , "r" ) as f :
2346+ metadata = json .load (f )
2347+ metadata ["name" ] = f"{ API_USER } /{ test_project } "
2348+ project_metadata_file = os .path .join (project_dir , ".mergin" , "mergin.json" )
2349+ with open (project_metadata_file , "w" ) as f :
2350+ json .dump (metadata , f , indent = 2 )
23502351
23512352 # verify we have correct metadata
23522353 mp = MerginProject (project_dir )
@@ -2357,7 +2358,12 @@ def test_project_metadata(mc):
23572358
23582359 # copy metadata in new format
23592360 metadata_file = os .path .join (project_dir , "new_metadata.json" )
2360- shutil .copyfile (metadata_file , project_metadata )
2361+ # rewrite metadata nemespace to prevent failing tests with other user than test_plugin
2362+ with open (metadata_file , "r" ) as f :
2363+ metadata = json .load (f )
2364+ metadata ["namespace" ] = API_USER
2365+ with open (project_metadata_file , "w" ) as f :
2366+ json .dump (metadata , f , indent = 2 )
23612367
23622368 # verify we have correct metadata
23632369 mp = MerginProject (project_dir )
@@ -2629,3 +2635,33 @@ def test_editor_push(mc: MerginClient, mc2: MerginClient):
26292635 conflicted_file = project_file
26302636 # There is no conflicted qgs file
26312637 assert conflicted_file is None
2638+
2639+
2640+ def test_error_push_already_named_project (mc : MerginClient ):
2641+ test_project = "test_push_already_existing"
2642+ project_dir = os .path .join (TMP_DIR , test_project )
2643+
2644+ with pytest .raises (ClientError ) as e :
2645+ mc .create_project_and_push (test_project , project_dir )
2646+ assert e .value .detail == "Project with the same name already exists"
2647+ assert e .value .http_error == 409
2648+ assert e .value .http_method == "POST"
2649+ assert e .value .url == f"{ mc .url } v1/project/{ API_USER } "
2650+
2651+
2652+ def test_error_projects_limit_hit (mcStorage : MerginClient ):
2653+ test_project = "test_another_project_above_projects_limit"
2654+ test_project_fullname = STORAGE_WORKSPACE + "/" + test_project
2655+
2656+ project_dir = os .path .join (TMP_DIR , test_project , API_USER )
2657+
2658+ with pytest .raises (ClientError ) as e :
2659+ mcStorage .create_project_and_push (test_project_fullname , project_dir )
2660+ assert e .value .server_code == ErrorCode .ProjectsLimitHit .value
2661+ assert (
2662+ e .value .detail
2663+ == "Maximum number of projects is reached. Please upgrade your subscription to create new projects (ProjectsLimitHit)"
2664+ )
2665+ assert e .value .http_error == 422
2666+ assert e .value .http_method == "POST"
2667+ assert e .value .url == f"{ mcStorage .url } v1/project/testpluginstorage"
0 commit comments