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