diff --git a/tests/ci_test.rs b/tests/ci_test.rs index a74793f..79f4aaa 100644 --- a/tests/ci_test.rs +++ b/tests/ci_test.rs @@ -47,22 +47,17 @@ async fn repo(api: &forgejo_api::Forgejo) -> eyre::Result<()> { tokio::fs::create_dir("/test_repo").await?; let local_repo = git2::Repository::init("/test_repo")?; tokio::fs::write("/test_repo/README.md", "# Test\nThis is a test repo").await?; + let mut index = local_repo.index()?; index.add_all(["."], git2::IndexAddOption::DEFAULT, None)?; index.write()?; - let tree = local_repo - .find_tree(index.write_tree().unwrap()) - .unwrap(); + let tree = local_repo.find_tree(index.write_tree().unwrap())?; let author = git2::Signature::now("TestingAdmin", "admin@noreply.example.org").unwrap(); - let commit_oid = local_repo - .commit(None, &author, &author, "bibblybeebly", &tree, &[]) - .unwrap(); - let branch = local_repo - .branch("main", &local_repo.find_commit(commit_oid).unwrap(), true) - .unwrap(); + let commit_oid = local_repo.commit(None, &author, &author, "bibblybeebly", &tree, &[])?; + let branch = local_repo.branch("main", &local_repo.find_commit(commit_oid).unwrap(), true)?; let branch_ref = branch.into_reference(); - let branch_ref_name = branch_ref.name().unwrap(); - local_repo.set_head(branch_ref_name).unwrap(); + let branch_ref_name = branch_ref.name().ok_or_else(|| eyre!("branch name not found"))?; + local_repo.set_head(branch_ref_name)?; let repo_opt = forgejo_api::CreateRepoOption { auto_init: false, @@ -87,8 +82,45 @@ async fn repo(api: &forgejo_api::Forgejo) -> eyre::Result<()> { }); let mut push_options = git2::PushOptions::new(); push_options.remote_callbacks(callbacks); - let mut origin = local_repo.remote("origin", remote_repo.clone_url.as_str()).unwrap(); - origin.push(&[branch_ref_name], Some(&mut push_options)).unwrap(); + let mut origin = local_repo.remote("origin", remote_repo.clone_url.as_str())?; + origin.push(&[branch_ref_name], Some(&mut push_options))?; + + tokio::fs::write("/test_repo/example.rs", "fn add_one(x: u32) -> u32 { x + 1 }").await?; + let mut index = local_repo.index()?; + index.add_all(["."], git2::IndexAddOption::DEFAULT, None)?; + index.write()?; + let tree = local_repo.find_tree(index.write_tree().unwrap())?; + let commit_oid = local_repo.commit(None, &author, &author, "egg", &tree, &[])?; + let branch = local_repo.branch("test", &local_repo.find_commit(commit_oid).unwrap(), true)?; + let branch_ref = branch.into_reference(); + let branch_ref_name = branch_ref.name().ok_or_else(|| eyre!("branch name not found"))?; + local_repo.set_head(branch_ref_name)?; + + let pr_opt = forgejo_api::CreatePullRequestOption { + assignee: None, + assignees: vec!["TestingAdmin".into()], + base: "main".into(), + body: "This is a test PR".into(), + due_date: None, + head: "test".into(), + labels: Vec::new(), + milestone: None, + title: "test pr".into(), + }; + let pr = api.create_pr("TestingAdmin", "test", pr_opt).await?; + ensure!(!api.is_merged("TestingAdmin", "test", pr.number).await?, "pr should not yet be merged"); + let merge_opt = forgejo_api::MergePullRequestOption { + act: forgejo_api::MergePrAction::Merge, + merge_commit_id: None, + merge_message_field: None, + merge_title_field: None, + delete_branch_after_merge: Some(true), + force_merge: None, + head_commit_id: None, + merge_when_checks_succeed: None, + }; + api.merge_pr("TestingAdmin", "test", pr.number, merge_opt).await?; + ensure!(api.is_merged("TestingAdmin", "test", pr.number).await?, "pr should be merged"); Ok(()) }