diff --git a/crates/config/test/src/given.rs b/crates/config/test/src/given.rs index aeec1ae..3d30af8 100644 --- a/crates/config/test/src/given.rs +++ b/crates/config/test/src/given.rs @@ -1,7 +1,7 @@ // use config::{ - server::Webhook, webhook::message::Body, ForgeAlias, RepoAlias, RepoBranches, WebhookAuth, - WebhookId, + server::Webhook, webhook::message::Body, BranchName, ForgeAlias, RepoAlias, RepoBranches, + WebhookAuth, WebhookId, }; use git_next_config as config; @@ -68,3 +68,7 @@ pub fn a_webhook_id() -> WebhookId { pub fn a_github_webhook_id() -> i64 { rand::thread_rng().next_u32().into() } + +pub fn a_branch_name() -> BranchName { + BranchName::new(a_name()) +} diff --git a/crates/git/Cargo.toml b/crates/git/Cargo.toml index c34de0b..f3ed2b8 100644 --- a/crates/git/Cargo.toml +++ b/crates/git/Cargo.toml @@ -53,6 +53,8 @@ actix = { workspace = true } # [dev-dependencies] # Testing +git-next-config-test = { workspace = true } +git-next-git-test = { workspace = true } assert2 = { workspace = true } [lints.clippy] diff --git a/crates/git/src/commit.rs b/crates/git/src/commit.rs index 8948d7f..fcbb3f4 100644 --- a/crates/git/src/commit.rs +++ b/crates/git/src/commit.rs @@ -52,6 +52,7 @@ pub mod log { } impl From for Error { + #[cfg(not(tarpaulin_include))] fn from(e: String) -> Self { Self::Gix(e) } diff --git a/crates/git/src/file.rs b/crates/git/src/file.rs index c545d7e..34be9d0 100644 --- a/crates/git/src/file.rs +++ b/crates/git/src/file.rs @@ -52,26 +52,30 @@ pub enum Error { TryId, } -impl From for Error { - fn from(value: gix::reference::find::existing::Error) -> Self { - Self::FindReference(value.to_string()) +mod gix_errors { + #![cfg(not(tarpaulin_include))] // third-party library errors + use super::Error; + impl From for Error { + fn from(value: gix::reference::find::existing::Error) -> Self { + Self::FindReference(value.to_string()) + } } -} -impl From for Error { - fn from(value: gix::object::commit::Error) -> Self { - Self::NoTreeInCommit(value.to_string()) + impl From for Error { + fn from(value: gix::object::commit::Error) -> Self { + Self::NoTreeInCommit(value.to_string()) + } } -} -impl From for Error { - fn from(value: gix::object::find::existing::Error) -> Self { - Self::FindObject(value.to_string()) + impl From for Error { + fn from(value: gix::object::find::existing::Error) -> Self { + Self::FindObject(value.to_string()) + } } -} -impl From for Error { - fn from(value: std::string::FromUtf8Error) -> Self { - Self::NonUtf8Blob(value.to_string()) + impl From for Error { + fn from(value: std::string::FromUtf8Error) -> Self { + Self::NonUtf8Blob(value.to_string()) + } } } diff --git a/crates/git/src/tests.rs b/crates/git/src/tests.rs index 12674f7..a3bcb54 100644 --- a/crates/git/src/tests.rs +++ b/crates/git/src/tests.rs @@ -1,22 +1,36 @@ +use crate as git; + mod commit { - use crate::{commit, Commit}; + use super::*; #[test] fn should_return_sha() { - let sha = commit::Sha::new("sha".to_string()); - let message = commit::Message::new("message".to_string()); - let commit = Commit::new(sha.clone(), message); + let sha = given::a_commit_sha(); + let commit = given::a_commit_with_sha(&sha); assert_eq!(commit.sha(), &sha); } #[test] fn should_return_message() { - let sha = commit::Sha::new("sha".to_string()); - let message = commit::Message::new("message".to_string()); - let commit = Commit::new(sha, message.clone()); + let message = given::a_commit_message(); + let commit = given::a_commit_with_message(&message); assert_eq!(commit.message(), &message); } + #[test] + fn should_convert_from_push() { + let sha = given::a_commit_sha(); + let message = given::a_commit_message(); + let push = given::a_webhook_push(&sha, &message); + let commit = git::Commit::from(push); + + let expected = git::Commit::new( + git::commit::Sha::new(sha.to_string()), + git::commit::Message::new(message.to_string()), + ); + + assert_eq!(commit, expected); + } } mod generation { use crate::Generation; @@ -160,3 +174,19 @@ mod repo_details { ); } } +mod branch { + use super::*; + use assert2::let_assert; + #[test] + fn reset_should_fetch_then_push() { + // let repository = given::a_mock_open_repository(); + let repo_detauls = given::repo_details(); + let_assert!( + Ok(result) = git::branch::reset(repository, repo_details, branch_name, git_ref, force) + ); + } +} +mod given { + pub use git_next_config_test::given::*; + pub use git_next_git_test::given::*; +} diff --git a/crates/git/test/Cargo.toml b/crates/git/test/Cargo.toml index 4f294d1..2810a24 100644 --- a/crates/git/test/Cargo.toml +++ b/crates/git/test/Cargo.toml @@ -5,6 +5,7 @@ edition = { workspace = true } [dependencies] git-next-git = { workspace = true } +git-next-config = { workspace = true } git-next-config-test = { workspace = true } rand = { workspace = true } diff --git a/crates/git/test/src/given.rs b/crates/git/test/src/given.rs index 0b538c6..c25d4a7 100644 --- a/crates/git/test/src/given.rs +++ b/crates/git/test/src/given.rs @@ -1,9 +1,45 @@ -use git_next_config_test::given::a_name; +use git_next_config as config; +use git_next_config_test::given::*; use git_next_git as git; pub fn a_commit() -> git::Commit { - git::Commit::new( - git::commit::Sha::new(a_name()), - git::commit::Message::new(a_name()), - ) + git::Commit::new(a_commit_sha(), a_commit_message()) +} + +pub fn a_commit_with_message(message: &git::commit::Message) -> git::Commit { + git::Commit::new(a_commit_sha(), message.to_owned()) +} + +pub fn a_commit_with_sha(sha: &git::commit::Sha) -> git::Commit { + git::Commit::new(sha.to_owned(), a_commit_message()) +} + +pub fn a_commit_with(sha: &git::commit::Sha, message: &git::commit::Message) -> git::Commit { + git::Commit::new(sha.to_owned(), message.to_owned()) +} + +pub fn a_commit_message() -> git::commit::Message { + git::commit::Message::new(a_name()) +} + +pub fn a_commit_sha() -> git::commit::Sha { + git::commit::Sha::new(a_name()) +} + +pub fn a_webhook_push( + sha: &git::commit::Sha, + message: &git::commit::Message, +) -> config::webhook::Push { + let branch = a_branch_name(); + config::webhook::Push::new(branch, sha.to_string(), message.to_string()) +} + +pub fn repo_details() -> git::RepoDetails { + // generation: Generation, + // repo_alias: &RepoAlias, + // server_repo_config: &ServerRepoConfig, + // forge_alias: &ForgeAlias, + // forge_config: &ForgeConfig, + // gitdir: GitDir, + // git::RepoDetails::new() }