@@ -472,3 +472,28 @@ def test_tables_to_skip_and_include_mutually_exclusive():
472472 mp .set_tables_to_skip (["table_a" ])
473473 with pytest .raises (GeoDiffLibError ):
474474 mp .set_tables_to_include (["table_b" ])
475+
476+
477+ def test_update_project_role ():
478+ with tempfile .TemporaryDirectory () as tmp_dir :
479+ project_dir = os .path .join (tmp_dir , "test_update_project_role" )
480+ shutil .copytree (TEST_DATA_DIR , project_dir )
481+
482+ os .makedirs (os .path .join (project_dir , ".mergin" ), exist_ok = True )
483+ with open (os .path .join (project_dir , "v2_metadata.json" ), "r" ) as f :
484+ metadata = json .load (f )
485+ project_metadata_file = os .path .join (project_dir , ".mergin" , "mergin.json" )
486+ with open (project_metadata_file , "w" ) as f :
487+ json .dump (metadata , f , indent = 2 )
488+
489+ mp = MerginProject (project_dir )
490+ assert mp .project_role () == "owner"
491+
492+ mp .update_project_role ("reader" )
493+ assert mp .project_role () == "reader"
494+ # the rest of the metadata has to survive, otherwise the local sync state would be lost
495+ assert mp .version () == metadata .get ("version" )
496+ assert mp .files () == metadata .get ("files" )
497+
498+ # the new role is on disk, not just in the in-memory cache
499+ assert MerginProject (project_dir ).project_role () == "reader"
0 commit comments