From dac099e4f1777191985b9ed8172148c78e0df137 Mon Sep 17 00:00:00 2001 From: Adrian Duke Date: Tue, 3 Mar 2026 15:42:45 +0000 Subject: [PATCH] cli/tests: Refactor git command tests --- crates/radicle-cli/tests/commands.rs | 339 +--------------------- crates/radicle-cli/tests/commands/git.rs | 344 +++++++++++++++++++++++ 2 files changed, 345 insertions(+), 338 deletions(-) create mode 100644 crates/radicle-cli/tests/commands/git.rs diff --git a/crates/radicle-cli/tests/commands.rs b/crates/radicle-cli/tests/commands.rs index 76b1762a..97facee4 100644 --- a/crates/radicle-cli/tests/commands.rs +++ b/crates/radicle-cli/tests/commands.rs @@ -32,6 +32,7 @@ mod commands { mod checkout; mod clone; mod cob; + mod git; } /// Run a CLI test file. @@ -1805,194 +1806,6 @@ fn framework_home() { .unwrap(); } -#[test] -fn git_push_diverge() { - let mut environment = Environment::new(); - let alice = environment.node("alice"); - let bob = environment.node("bob"); - let acme = RepoId::from_str("z42hL2jL4XNk6K8oHQaSWfMgCL7ji").unwrap(); - - environment.repository(&alice); - - test( - "examples/rad-init.md", - environment.work(&alice), - Some(&alice.home), - [], - ) - .unwrap(); - - let alice = alice.spawn(); - let mut bob = bob.spawn(); - - bob.connect(&alice).converge([&alice]); - bob.fork(acme, environment.work(&bob)).unwrap(); - alice.has_remote_of(&acme, &bob.id); - - formula(&environment.tempdir(), "examples/git/git-push-diverge.md") - .unwrap() - .home( - "alice", - environment.work(&alice), - [("RAD_HOME", alice.home.path().display())], - ) - .home( - "bob", - environment.work(&bob).join("heartwood"), - [("RAD_HOME", bob.home.path().display())], - ) - .run() - .unwrap(); -} - -#[test] -fn git_push_converge() { - use std::fs; - - let mut environment = Environment::new(); - let alice = environment.node("alice"); - let bob = environment.node("bob"); - let eve = environment.node("eve"); - let acme = RepoId::from_str("z42hL2jL4XNk6K8oHQaSWfMgCL7ji").unwrap(); - - environment.repository(&alice); - - test( - "examples/rad-init.md", - environment.work(&alice), - Some(&alice.home), - [], - ) - .unwrap(); - - let alice = alice.spawn(); - let mut bob = bob.spawn(); - let mut eve = eve.spawn(); - - bob.connect(&alice).connect(&eve).converge([&alice]); - eve.connect(&alice).converge([&alice]); - bob.fork(acme, environment.work(&bob)).unwrap(); - eve.fork(acme, environment.work(&eve)).unwrap(); - alice.has_remote_of(&acme, &bob.id); - alice.has_remote_of(&acme, &eve.id); - - fs::write( - environment.work(&bob).join("heartwood").join("README"), - "Hello\n", - ) - .unwrap(); - fs::write( - environment.work(&eve).join("heartwood").join("README"), - "Hello, world!\n", - ) - .unwrap(); - - formula(&environment.tempdir(), "examples/git/git-push-converge.md") - .unwrap() - .home( - "alice", - environment.work(&alice), - [("RAD_HOME", alice.home.path().display())], - ) - .home( - "bob", - environment.work(&bob).join("heartwood"), - [("RAD_HOME", bob.home.path().display())], - ) - .home( - "eve", - environment.work(&eve).join("heartwood"), - [("RAD_HOME", eve.home.path().display())], - ) - .run() - .unwrap(); -} - -#[test] -fn git_push_amend() { - let mut environment = Environment::new(); - let alice = environment.node("alice"); - let bob = environment.node("bob"); - let acme = RepoId::from_str("z42hL2jL4XNk6K8oHQaSWfMgCL7ji").unwrap(); - - environment.repository(&alice); - - test( - "examples/rad-init.md", - environment.work(&alice), - Some(&alice.home), - [], - ) - .unwrap(); - - let alice = alice.spawn(); - let mut bob = bob.spawn(); - - bob.connect(&alice).converge([&alice]); - bob.fork(acme, environment.work(&bob)).unwrap(); - alice.has_remote_of(&acme, &bob.id); - - formula(&environment.tempdir(), "examples/git/git-push-amend.md") - .unwrap() - .home( - "alice", - environment.work(&alice), - [("RAD_HOME", alice.home.path().display())], - ) - .home( - "bob", - environment.work(&bob).join("heartwood"), - [("RAD_HOME", bob.home.path().display())], - ) - .run() - .unwrap(); -} - -#[test] -fn git_push_force_with_lease() { - Environment::alice(["rad-init", "git/git-push-force-with-lease"]); -} - -#[test] -fn git_push_rollback() { - let mut environment = Environment::new(); - let alice = environment.node("alice"); - let bob = environment.node("bob"); - let acme = RepoId::from_str("z42hL2jL4XNk6K8oHQaSWfMgCL7ji").unwrap(); - - environment.repository(&alice); - - test( - "examples/rad-init.md", - environment.work(&alice), - Some(&alice.home), - [], - ) - .unwrap(); - - let alice = alice.spawn(); - let mut bob = bob.spawn(); - - bob.connect(&alice).converge([&alice]); - bob.fork(acme, environment.work(&bob)).unwrap(); - alice.has_remote_of(&acme, &bob.id); - - formula(&environment.tempdir(), "examples/git/git-push-rollback.md") - .unwrap() - .home( - "alice", - environment.work(&alice), - [("RAD_HOME", alice.home.path().display())], - ) - .home( - "bob", - environment.work(&bob).join("heartwood"), - [("RAD_HOME", bob.home.path().display())], - ) - .run() - .unwrap(); -} - #[test] fn rad_push_and_pull_patches() { let mut environment = Environment::new(); @@ -2141,156 +1954,6 @@ fn rad_patch_fetch_2() { .unwrap(); } -#[test] -fn git_push_and_fetch() { - let mut environment = Environment::new(); - let alice = environment.node("alice"); - let bob = environment.node("bob"); - - environment.repository(&alice); - - test( - "examples/rad-init.md", - environment.work(&alice), - Some(&alice.home), - [], - ) - .unwrap(); - - let alice = alice.spawn(); - let mut bob = bob.spawn(); - - bob.connect(&alice).converge([&alice]); - - environment.test("rad-clone", &bob).unwrap(); - environment.test("git/git-push", &alice).unwrap(); - environment.test("git/git-fetch", &bob).unwrap(); - environment.test("git/git-push-delete", &alice).unwrap(); -} - -#[test] -fn git_tag() { - let mut environment = Environment::new(); - let alice = environment.node("alice"); - let bob = environment.node("bob"); - - environment.repository(&alice); - - environment.test("rad-init", &alice).unwrap(); - - let alice = alice.spawn(); - let mut bob = bob.spawn(); - - bob.connect(&alice).converge([&alice]); - - test( - "examples/rad-clone.md", - environment.work(&bob), - Some(&bob.home), - [], - ) - .unwrap(); - - formula(&environment.tempdir(), "examples/git/git-tag.md") - .unwrap() - .home( - "alice", - environment.work(&alice), - [("RAD_HOME", alice.home.path().display())], - ) - .home( - "bob", - environment.work(&bob), - [("RAD_HOME", bob.home.path().display())], - ) - .run() - .unwrap(); -} - -#[test] -fn git_push_canonical_lightweight_tags() { - let mut environment = Environment::new(); - let alice = environment.node("alice"); - let bob = environment.node("bob"); - - let rid = RepoId::from_str("z42hL2jL4XNk6K8oHQaSWfMgCL7ji").unwrap(); - - fixtures::repository(environment.work(&alice)); - - test( - "examples/rad-init.md", - environment.work(&alice), - Some(&alice.home), - [], - ) - .unwrap(); - - let alice = alice.spawn(); - let mut bob = bob.spawn(); - - bob.connect(&alice).converge([&alice]); - bob.clone(rid, environment.work(&bob)).unwrap(); - formula( - &environment.tempdir(), - "examples/git/git-push-canonical-lightweight-tags.md", - ) - .unwrap() - .home( - "alice", - environment.work(&alice), - [("RAD_HOME", alice.home.path().display())], - ) - .home( - "bob", - environment.work(&bob), - [("RAD_HOME", bob.home.path().display())], - ) - .run() - .unwrap(); -} - -#[test] -fn git_push_canonical_annotated_tags() { - let mut environment = Environment::new(); - let alice = environment.node("alice"); - let bob = environment.node("bob"); - - let rid = RepoId::from_str("z42hL2jL4XNk6K8oHQaSWfMgCL7ji").unwrap(); - - fixtures::repository(environment.work(&alice)); - - test( - "examples/rad-init.md", - environment.work(&alice), - Some(&alice.home), - [], - ) - .unwrap(); - - let alice = alice.spawn(); - let mut bob = bob.spawn(); - - bob.connect(&alice).converge([&alice]); - bob.clone(rid, environment.work(&bob)).unwrap(); - formula( - &environment.tempdir(), - "examples/git/git-push-canonical-annotated-tags.md", - ) - .unwrap() - .home( - "alice", - environment.work(&alice), - [("RAD_HOME", alice.home.path().display())], - ) - .home( - "bob", - environment.work(&bob), - [("RAD_HOME", bob.home.path().display())], - ) - .run() - .unwrap(); -} - #[test] fn rad_workflow() { let mut environment = Environment::new(); diff --git a/crates/radicle-cli/tests/commands/git.rs b/crates/radicle-cli/tests/commands/git.rs new file mode 100644 index 00000000..a8b3c58c --- /dev/null +++ b/crates/radicle-cli/tests/commands/git.rs @@ -0,0 +1,344 @@ +use crate::test; +use crate::util::environment::Environment; +use crate::util::formula::formula; +use radicle::prelude::RepoId; +use radicle::test::fixtures; +use std::str::FromStr; + +#[test] +fn git_push_diverge() { + let mut environment = Environment::new(); + let alice = environment.node("alice"); + let bob = environment.node("bob"); + let acme = RepoId::from_str("z42hL2jL4XNk6K8oHQaSWfMgCL7ji").unwrap(); + + environment.repository(&alice); + + test( + "examples/rad-init.md", + environment.work(&alice), + Some(&alice.home), + [], + ) + .unwrap(); + + let alice = alice.spawn(); + let mut bob = bob.spawn(); + + bob.connect(&alice).converge([&alice]); + bob.fork(acme, environment.work(&bob)).unwrap(); + alice.has_remote_of(&acme, &bob.id); + + formula(&environment.tempdir(), "examples/git/git-push-diverge.md") + .unwrap() + .home( + "alice", + environment.work(&alice), + [("RAD_HOME", alice.home.path().display())], + ) + .home( + "bob", + environment.work(&bob).join("heartwood"), + [("RAD_HOME", bob.home.path().display())], + ) + .run() + .unwrap(); +} + +#[test] +fn git_push_converge() { + use std::fs; + + let mut environment = Environment::new(); + let alice = environment.node("alice"); + let bob = environment.node("bob"); + let eve = environment.node("eve"); + let acme = RepoId::from_str("z42hL2jL4XNk6K8oHQaSWfMgCL7ji").unwrap(); + + environment.repository(&alice); + + test( + "examples/rad-init.md", + environment.work(&alice), + Some(&alice.home), + [], + ) + .unwrap(); + + let alice = alice.spawn(); + let mut bob = bob.spawn(); + let mut eve = eve.spawn(); + + bob.connect(&alice).connect(&eve).converge([&alice]); + eve.connect(&alice).converge([&alice]); + bob.fork(acme, environment.work(&bob)).unwrap(); + eve.fork(acme, environment.work(&eve)).unwrap(); + alice.has_remote_of(&acme, &bob.id); + alice.has_remote_of(&acme, &eve.id); + + fs::write( + environment.work(&bob).join("heartwood").join("README"), + "Hello\n", + ) + .unwrap(); + fs::write( + environment.work(&eve).join("heartwood").join("README"), + "Hello, world!\n", + ) + .unwrap(); + + formula(&environment.tempdir(), "examples/git/git-push-converge.md") + .unwrap() + .home( + "alice", + environment.work(&alice), + [("RAD_HOME", alice.home.path().display())], + ) + .home( + "bob", + environment.work(&bob).join("heartwood"), + [("RAD_HOME", bob.home.path().display())], + ) + .home( + "eve", + environment.work(&eve).join("heartwood"), + [("RAD_HOME", eve.home.path().display())], + ) + .run() + .unwrap(); +} + +#[test] +fn git_push_amend() { + let mut environment = Environment::new(); + let alice = environment.node("alice"); + let bob = environment.node("bob"); + let acme = RepoId::from_str("z42hL2jL4XNk6K8oHQaSWfMgCL7ji").unwrap(); + + environment.repository(&alice); + + test( + "examples/rad-init.md", + environment.work(&alice), + Some(&alice.home), + [], + ) + .unwrap(); + + let alice = alice.spawn(); + let mut bob = bob.spawn(); + + bob.connect(&alice).converge([&alice]); + bob.fork(acme, environment.work(&bob)).unwrap(); + alice.has_remote_of(&acme, &bob.id); + + formula(&environment.tempdir(), "examples/git/git-push-amend.md") + .unwrap() + .home( + "alice", + environment.work(&alice), + [("RAD_HOME", alice.home.path().display())], + ) + .home( + "bob", + environment.work(&bob).join("heartwood"), + [("RAD_HOME", bob.home.path().display())], + ) + .run() + .unwrap(); +} + +#[test] +fn git_push_force_with_lease() { + Environment::alice(["rad-init", "git/git-push-force-with-lease"]); +} + +#[test] +fn git_push_rollback() { + let mut environment = Environment::new(); + let alice = environment.node("alice"); + let bob = environment.node("bob"); + let acme = RepoId::from_str("z42hL2jL4XNk6K8oHQaSWfMgCL7ji").unwrap(); + + environment.repository(&alice); + + test( + "examples/rad-init.md", + environment.work(&alice), + Some(&alice.home), + [], + ) + .unwrap(); + + let alice = alice.spawn(); + let mut bob = bob.spawn(); + + bob.connect(&alice).converge([&alice]); + bob.fork(acme, environment.work(&bob)).unwrap(); + alice.has_remote_of(&acme, &bob.id); + + formula(&environment.tempdir(), "examples/git/git-push-rollback.md") + .unwrap() + .home( + "alice", + environment.work(&alice), + [("RAD_HOME", alice.home.path().display())], + ) + .home( + "bob", + environment.work(&bob).join("heartwood"), + [("RAD_HOME", bob.home.path().display())], + ) + .run() + .unwrap(); +} + +#[test] +fn git_push_and_fetch() { + let mut environment = Environment::new(); + let alice = environment.node("alice"); + let bob = environment.node("bob"); + + environment.repository(&alice); + + test( + "examples/rad-init.md", + environment.work(&alice), + Some(&alice.home), + [], + ) + .unwrap(); + + let alice = alice.spawn(); + let mut bob = bob.spawn(); + + bob.connect(&alice).converge([&alice]); + + environment.test("rad-clone", &bob).unwrap(); + environment.test("git/git-push", &alice).unwrap(); + environment.test("git/git-fetch", &bob).unwrap(); + environment.test("git/git-push-delete", &alice).unwrap(); +} + +#[test] +fn git_tag() { + let mut environment = Environment::new(); + let alice = environment.node("alice"); + let bob = environment.node("bob"); + + environment.repository(&alice); + + environment.test("rad-init", &alice).unwrap(); + + let alice = alice.spawn(); + let mut bob = bob.spawn(); + + bob.connect(&alice).converge([&alice]); + + test( + "examples/rad-clone.md", + environment.work(&bob), + Some(&bob.home), + [], + ) + .unwrap(); + + formula(&environment.tempdir(), "examples/git/git-tag.md") + .unwrap() + .home( + "alice", + environment.work(&alice), + [("RAD_HOME", alice.home.path().display())], + ) + .home( + "bob", + environment.work(&bob), + [("RAD_HOME", bob.home.path().display())], + ) + .run() + .unwrap(); +} + +#[test] +fn git_push_canonical_lightweight_tags() { + let mut environment = Environment::new(); + let alice = environment.node("alice"); + let bob = environment.node("bob"); + + let rid = RepoId::from_str("z42hL2jL4XNk6K8oHQaSWfMgCL7ji").unwrap(); + + fixtures::repository(environment.work(&alice)); + + test( + "examples/rad-init.md", + environment.work(&alice), + Some(&alice.home), + [], + ) + .unwrap(); + + let alice = alice.spawn(); + let mut bob = bob.spawn(); + + bob.connect(&alice).converge([&alice]); + bob.clone(rid, environment.work(&bob)).unwrap(); + formula( + &environment.tempdir(), + "examples/git/git-push-canonical-lightweight-tags.md", + ) + .unwrap() + .home( + "alice", + environment.work(&alice), + [("RAD_HOME", alice.home.path().display())], + ) + .home( + "bob", + environment.work(&bob), + [("RAD_HOME", bob.home.path().display())], + ) + .run() + .unwrap(); +} + +#[test] +fn git_push_canonical_annotated_tags() { + let mut environment = Environment::new(); + let alice = environment.node("alice"); + let bob = environment.node("bob"); + + let rid = RepoId::from_str("z42hL2jL4XNk6K8oHQaSWfMgCL7ji").unwrap(); + + fixtures::repository(environment.work(&alice)); + + test( + "examples/rad-init.md", + environment.work(&alice), + Some(&alice.home), + [], + ) + .unwrap(); + + let alice = alice.spawn(); + let mut bob = bob.spawn(); + + bob.connect(&alice).converge([&alice]); + bob.clone(rid, environment.work(&bob)).unwrap(); + formula( + &environment.tempdir(), + "examples/git/git-push-canonical-annotated-tags.md", + ) + .unwrap() + .home( + "alice", + environment.work(&alice), + [("RAD_HOME", alice.home.path().display())], + ) + .home( + "bob", + environment.work(&bob), + [("RAD_HOME", bob.home.path().display())], + ) + .run() + .unwrap(); +}