@@ -522,3 +522,226 @@ def test_cargo_provider_workspace_member_without_workspace_key(
522522 assert file .read_text () == dedent (expected_workspace_toml )
523523 # The lock file should remain unchanged since the member doesn't inherit workspace version
524524 assert lock_file .read_text () == dedent (expected_lock_content )
525+
526+
527+ def test_cargo_provider_inheriting_workspace_member_with_version_in_toml (
528+ config : BaseConfig ,
529+ chdir : Path ,
530+ ):
531+ """Test workspace member that has version key but no workspace subkey."""
532+ workspace_toml = """\
533+ [workspace]
534+ members = ["inheriting_member"]
535+
536+ [workspace.package]
537+ version = "0.1.0"
538+
539+ [workspace.dependencies]
540+ inheriting_member = "0.1.0"
541+ """
542+
543+ member_content = """\
544+ [package]
545+ name = "inheriting_member"
546+ version.workspace = true
547+ """
548+
549+ lock_content = """\
550+ [[package]]
551+ name = "inheriting_member"
552+ version = "0.1.0"
553+ source = "registry+https://github.com/rust-lang/crates.io-index"
554+ checksum = "123abc"
555+ """
556+
557+ expected_workspace_toml = """\
558+ [workspace]
559+ members = ["inheriting_member"]
560+
561+ [workspace.package]
562+ version = "42.1"
563+
564+ [workspace.dependencies]
565+ inheriting_member = "42.1"
566+ """
567+
568+ expected_lock_content = """\
569+ [[package]]
570+ name = "inheriting_member"
571+ version = "42.1"
572+ source = "registry+https://github.com/rust-lang/crates.io-index"
573+ checksum = "123abc"
574+ """
575+
576+ # Create the workspace file
577+ filename = CargoProvider .filename
578+ file = chdir / filename
579+ file .write_text (dedent (workspace_toml ))
580+
581+ # Create the member directory and file
582+ os .mkdir (chdir / "inheriting_member" )
583+ member_file = chdir / "inheriting_member" / "Cargo.toml"
584+ member_file .write_text (dedent (member_content ))
585+
586+ # Create the lock file
587+ lock_filename = CargoProvider .lock_filename
588+ lock_file = chdir / lock_filename
589+ lock_file .write_text (dedent (lock_content ))
590+
591+ config .settings ["version_provider" ] = "cargo"
592+
593+ provider = get_provider (config )
594+ assert isinstance (provider , CargoProvider )
595+ assert provider .get_version () == "0.1.0"
596+
597+ provider .set_version ("42.1" )
598+ assert file .read_text () == dedent (expected_workspace_toml )
599+ assert lock_file .read_text () == dedent (expected_lock_content )
600+
601+ def test_cargo_provider_inheriting_workspace_member_with_version_dict_in_toml (
602+ config : BaseConfig ,
603+ chdir : Path ,
604+ ):
605+ """Test workspace member that has version key but no workspace subkey."""
606+ workspace_toml = """\
607+ [workspace]
608+ members = ["inheriting_member"]
609+
610+ [workspace.package]
611+ version = "0.1.0"
612+
613+ [workspace.dependencies]
614+ inheriting_member = { version = "0.1.0" }
615+ """
616+
617+ member_content = """\
618+ [package]
619+ name = "inheriting_member"
620+ version.workspace = true
621+ """
622+
623+ lock_content = """\
624+ [[package]]
625+ name = "inheriting_member"
626+ version = "0.1.0"
627+ source = "registry+https://github.com/rust-lang/crates.io-index"
628+ checksum = "123abc"
629+ """
630+
631+ expected_workspace_toml = """\
632+ [workspace]
633+ members = ["inheriting_member"]
634+
635+ [workspace.package]
636+ version = "42.1"
637+
638+ [workspace.dependencies]
639+ inheriting_member = { version = "42.1" }
640+ """
641+
642+ expected_lock_content = """\
643+ [[package]]
644+ name = "inheriting_member"
645+ version = "42.1"
646+ source = "registry+https://github.com/rust-lang/crates.io-index"
647+ checksum = "123abc"
648+ """
649+
650+ # Create the workspace file
651+ filename = CargoProvider .filename
652+ file = chdir / filename
653+ file .write_text (dedent (workspace_toml ))
654+
655+ # Create the member directory and file
656+ os .mkdir (chdir / "inheriting_member" )
657+ member_file = chdir / "inheriting_member" / "Cargo.toml"
658+ member_file .write_text (dedent (member_content ))
659+
660+ # Create the lock file
661+ lock_filename = CargoProvider .lock_filename
662+ lock_file = chdir / lock_filename
663+ lock_file .write_text (dedent (lock_content ))
664+
665+ config .settings ["version_provider" ] = "cargo"
666+
667+ provider = get_provider (config )
668+ assert isinstance (provider , CargoProvider )
669+ assert provider .get_version () == "0.1.0"
670+
671+ provider .set_version ("42.1" )
672+ assert file .read_text () == dedent (expected_workspace_toml )
673+ assert lock_file .read_text () == dedent (expected_lock_content )
674+
675+ def test_cargo_provider_inheriting_workspace_member_with_version_and_package_in_toml (
676+ config : BaseConfig ,
677+ chdir : Path ,
678+ ):
679+ """Test workspace member that has version key but no workspace subkey."""
680+ workspace_toml = """\
681+ [workspace]
682+ members = ["mypath/original_name"]
683+
684+ [workspace.package]
685+ version = "0.1.0"
686+
687+ [workspace.dependencies]
688+ renamed_inheriting_member = { version = "0.1.0", path = "mypath/original_name", package = "original_name" }
689+ """
690+
691+ member_content = """\
692+ [package]
693+ name = "original_name"
694+ version.workspace = true
695+ """
696+
697+ lock_content = """\
698+ [[package]]
699+ name = "original_name"
700+ version = "0.1.0"
701+ source = "registry+https://github.com/rust-lang/crates.io-index"
702+ checksum = "123abc"
703+ """
704+
705+ expected_workspace_toml = """\
706+ [workspace]
707+ members = ["mypath/original_name"]
708+
709+ [workspace.package]
710+ version = "42.1"
711+
712+ [workspace.dependencies]
713+ renamed_inheriting_member = { version = "42.1", path = "mypath/original_name", package = "original_name" }
714+ """
715+
716+ expected_lock_content = """\
717+ [[package]]
718+ name = "original_name"
719+ version = "42.1"
720+ source = "registry+https://github.com/rust-lang/crates.io-index"
721+ checksum = "123abc"
722+ """
723+
724+ # Create the workspace file
725+ filename = CargoProvider .filename
726+ file = chdir / filename
727+ file .write_text (dedent (workspace_toml ))
728+
729+ # Create the member directory and file
730+ os .makedirs (chdir / "mypath/original_name" )
731+ member_file = chdir / "mypath/original_name" / "Cargo.toml"
732+ member_file .write_text (dedent (member_content ))
733+
734+ # Create the lock file
735+ lock_filename = CargoProvider .lock_filename
736+ lock_file = chdir / lock_filename
737+ lock_file .write_text (dedent (lock_content ))
738+
739+ config .settings ["version_provider" ] = "cargo"
740+
741+ provider = get_provider (config )
742+ assert isinstance (provider , CargoProvider )
743+ assert provider .get_version () == "0.1.0"
744+
745+ provider .set_version ("42.1" )
746+ assert file .read_text () == dedent (expected_workspace_toml )
747+ assert lock_file .read_text () == dedent (expected_lock_content )
0 commit comments