#[path = "common/mod.rs"]
mod common;
use common::TestRepo;
use tij::jj::JjExecutor;
#[test]
fn story_code_review_fix() {
skip_if_no_jj!();
let repo = TestRepo::new();
let executor = JjExecutor::with_repo_path(repo.path());
repo.write_file("api.rs", "fn api_v1() {}");
repo.jj(&["describe", "-m", "Add API v1"]);
let api_id = repo.current_change_id();
repo.jj(&["new", "-m", "Add tests"]);
repo.write_file("tests.rs", "fn test_api() {}");
repo.jj(&["new", "-m", "Add docs"]);
repo.write_file("README.md", "# API Documentation");
executor.edit(&api_id).expect("edit should succeed");
assert_eq!(repo.get_description("@"), "Add API v1");
repo.write_file("api.rs", "fn api_v1() { validate(); }");
executor.new_change().expect("new should succeed");
executor.edit(&api_id).expect("edit back should succeed");
assert!(repo.read_file("api.rs").contains("validate"));
let changes = executor
.log(Some("all()"), false)
.expect("log should succeed");
assert!(changes.iter().any(|c| c.description == "Add tests"));
assert!(changes.iter().any(|c| c.description == "Add docs"));
}
#[test]
fn story_fix_multiple_past_commits() {
skip_if_no_jj!();
let repo = TestRepo::new();
let executor = JjExecutor::with_repo_path(repo.path());
repo.write_file("module_a.rs", "fn a() { printn!(); }"); repo.jj(&["describe", "-m", "Add module A"]);
let a_id = repo.current_change_id();
repo.jj(&["new", "-m", "Add module B"]);
repo.write_file("module_b.rs", "fn b() { printn!(); }"); let b_id = repo.current_change_id();
repo.jj(&["new", "-m", "Add main"]);
repo.write_file("main.rs", "fn main() {}");
executor.edit(&a_id).expect("edit should succeed");
repo.write_file("module_a.rs", "fn a() { println!(); }");
executor.edit(&b_id).expect("edit should succeed");
repo.write_file("module_b.rs", "fn b() { println!(); }");
executor.new_change().expect("new should succeed");
executor.edit(&a_id).expect("edit should succeed");
assert!(repo.read_file("module_a.rs").contains("println!"));
executor.edit(&b_id).expect("edit should succeed");
assert!(repo.read_file("module_b.rs").contains("println!"));
}