WIP: test: add more tests to git crate
This commit is contained in:
parent
1ca13bb0ae
commit
b8835941f9
10 changed files with 166 additions and 30 deletions
|
@ -5,4 +5,7 @@ impl BranchName {
|
||||||
pub fn new(str: impl Into<String>) -> Self {
|
pub fn new(str: impl Into<String>) -> Self {
|
||||||
Self(str.into())
|
Self(str.into())
|
||||||
}
|
}
|
||||||
|
pub fn into_string(self) -> String {
|
||||||
|
self.0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,10 @@ impl GitDir {
|
||||||
pub const fn pathbuf(&self) -> &PathBuf {
|
pub const fn pathbuf(&self) -> &PathBuf {
|
||||||
&self.0
|
&self.0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn into_string(self) -> String {
|
||||||
|
self.to_string()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
impl std::fmt::Display for GitDir {
|
impl std::fmt::Display for GitDir {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
|
|
@ -9,7 +9,9 @@ use crate::{BranchName, GitDir, RepoBranches, RepoConfig, RepoConfigSource, Repo
|
||||||
)]
|
)]
|
||||||
#[display("{}@{}", repo, branch)]
|
#[display("{}@{}", repo, branch)]
|
||||||
pub struct ServerRepoConfig {
|
pub struct ServerRepoConfig {
|
||||||
|
/// repo path: owner/repo
|
||||||
repo: String,
|
repo: String,
|
||||||
|
/// branch name
|
||||||
branch: String,
|
branch: String,
|
||||||
gitdir: Option<PathBuf>,
|
gitdir: Option<PathBuf>,
|
||||||
main: Option<String>,
|
main: Option<String>,
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
//
|
//
|
||||||
use config::{
|
use config::{
|
||||||
server::Webhook, webhook::message::Body, ForgeAlias, RepoAlias, RepoBranches, WebhookAuth,
|
server::Webhook, webhook::message::Body, BranchName, ForgeAlias, RepoAlias, RepoBranches,
|
||||||
WebhookId,
|
WebhookAuth, WebhookId,
|
||||||
};
|
};
|
||||||
use git_next_config as config;
|
use git_next_config::{self as config, ForgeConfig, ForgeType, GitDir, ServerRepoConfig};
|
||||||
|
|
||||||
use rand::RngCore;
|
use rand::RngCore;
|
||||||
|
|
||||||
|
@ -68,3 +68,37 @@ pub fn a_webhook_id() -> WebhookId {
|
||||||
pub fn a_github_webhook_id() -> i64 {
|
pub fn a_github_webhook_id() -> i64 {
|
||||||
rand::thread_rng().next_u32().into()
|
rand::thread_rng().next_u32().into()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn a_branch_name() -> BranchName {
|
||||||
|
BranchName::new(a_name())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn a_git_dir(fs: &kxio::fs::FileSystem) -> GitDir {
|
||||||
|
let dir_name = a_name();
|
||||||
|
let dir = fs.base().join(dir_name);
|
||||||
|
GitDir::new(&dir)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn a_forge_config() -> ForgeConfig {
|
||||||
|
ForgeConfig::new(
|
||||||
|
ForgeType::MockForge,
|
||||||
|
a_name(),
|
||||||
|
a_name(),
|
||||||
|
a_name(),
|
||||||
|
Default::default(), // no repos
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn a_server_repo_config() -> ServerRepoConfig {
|
||||||
|
let main = a_branch_name().into_string();
|
||||||
|
let next = a_branch_name().into_string();
|
||||||
|
let dev = a_branch_name().into_string();
|
||||||
|
ServerRepoConfig::new(
|
||||||
|
format!("{}/{}", a_name(), a_name()),
|
||||||
|
main.clone(),
|
||||||
|
None,
|
||||||
|
Some(main),
|
||||||
|
Some(next),
|
||||||
|
Some(dev),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
|
@ -53,6 +53,8 @@ actix = { workspace = true }
|
||||||
#
|
#
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
# Testing
|
# Testing
|
||||||
|
git-next-config-test = { workspace = true }
|
||||||
|
git-next-git-test = { workspace = true }
|
||||||
assert2 = { workspace = true }
|
assert2 = { workspace = true }
|
||||||
|
|
||||||
[lints.clippy]
|
[lints.clippy]
|
||||||
|
|
|
@ -52,6 +52,7 @@ pub mod log {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<String> for Error {
|
impl From<String> for Error {
|
||||||
|
#[cfg(not(tarpaulin_include))]
|
||||||
fn from(e: String) -> Self {
|
fn from(e: String) -> Self {
|
||||||
Self::Gix(e)
|
Self::Gix(e)
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,9 @@ pub enum Error {
|
||||||
TryId,
|
TryId,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mod gix_errors {
|
||||||
|
#![cfg(not(tarpaulin_include))] // third-party library errors
|
||||||
|
use super::Error;
|
||||||
impl From<gix::reference::find::existing::Error> for Error {
|
impl From<gix::reference::find::existing::Error> for Error {
|
||||||
fn from(value: gix::reference::find::existing::Error) -> Self {
|
fn from(value: gix::reference::find::existing::Error) -> Self {
|
||||||
Self::FindReference(value.to_string())
|
Self::FindReference(value.to_string())
|
||||||
|
@ -75,3 +78,4 @@ impl From<std::string::FromUtf8Error> for Error {
|
||||||
Self::NonUtf8Blob(value.to_string())
|
Self::NonUtf8Blob(value.to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,22 +1,36 @@
|
||||||
|
use crate as git;
|
||||||
|
|
||||||
mod commit {
|
mod commit {
|
||||||
use crate::{commit, Commit};
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_return_sha() {
|
fn should_return_sha() {
|
||||||
let sha = commit::Sha::new("sha".to_string());
|
let sha = given::a_commit_sha();
|
||||||
let message = commit::Message::new("message".to_string());
|
let commit = given::a_commit_with_sha(&sha);
|
||||||
let commit = Commit::new(sha.clone(), message);
|
|
||||||
|
|
||||||
assert_eq!(commit.sha(), &sha);
|
assert_eq!(commit.sha(), &sha);
|
||||||
}
|
}
|
||||||
#[test]
|
#[test]
|
||||||
fn should_return_message() {
|
fn should_return_message() {
|
||||||
let sha = commit::Sha::new("sha".to_string());
|
let message = given::a_commit_message();
|
||||||
let message = commit::Message::new("message".to_string());
|
let commit = given::a_commit_with_message(&message);
|
||||||
let commit = Commit::new(sha, message.clone());
|
|
||||||
|
|
||||||
assert_eq!(commit.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 {
|
mod generation {
|
||||||
use crate::Generation;
|
use crate::Generation;
|
||||||
|
@ -160,3 +174,27 @@ 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 fs = given::a_filesystem();
|
||||||
|
// let repo_detauls = given::repo_details(&fs);
|
||||||
|
// let repository = given::a_mock_open_repository();
|
||||||
|
// let_assert!(
|
||||||
|
// Ok(result) = git::branch::reset(
|
||||||
|
// repository,
|
||||||
|
// &repo_details,
|
||||||
|
// &repo_details.branch,
|
||||||
|
// git_ref,
|
||||||
|
// force
|
||||||
|
// )
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
mod given {
|
||||||
|
// pub use git_next_config_test::given::*;
|
||||||
|
pub use git_next_git_test::given::*;
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ edition = { workspace = true }
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
git-next-git = { workspace = true }
|
git-next-git = { workspace = true }
|
||||||
|
git-next-config = { workspace = true }
|
||||||
git-next-config-test = { workspace = true }
|
git-next-config-test = { workspace = true }
|
||||||
|
|
||||||
rand = { workspace = true }
|
rand = { workspace = true }
|
||||||
|
|
|
@ -1,9 +1,56 @@
|
||||||
use git_next_config_test::given::a_name;
|
use git_next_config as config;
|
||||||
use git_next_git as git;
|
use git_next_config_test::given::*;
|
||||||
|
use git_next_git::{self as git, RepoDetails};
|
||||||
|
|
||||||
pub fn a_commit() -> git::Commit {
|
pub fn a_commit() -> git::Commit {
|
||||||
git::Commit::new(
|
git::Commit::new(a_commit_sha(), a_commit_message())
|
||||||
git::commit::Sha::new(a_name()),
|
}
|
||||||
git::commit::Message::new(a_name()),
|
|
||||||
|
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 a_filesystem() -> kxio::fs::FileSystem {
|
||||||
|
kxio::fs::temp().unwrap_or_else(|e| panic!("{}", e))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn repo_details(fs: &kxio::fs::FileSystem) -> git::RepoDetails {
|
||||||
|
let generation = git::Generation::new();
|
||||||
|
let repo_alias = a_repo_alias();
|
||||||
|
let server_repo_config = a_server_repo_config();
|
||||||
|
let forge_alias = a_forge_alias();
|
||||||
|
let forge_config = a_forge_config();
|
||||||
|
let gitdir = a_git_dir(fs);
|
||||||
|
RepoDetails::new(
|
||||||
|
generation,
|
||||||
|
&repo_alias,
|
||||||
|
&server_repo_config,
|
||||||
|
&forge_alias,
|
||||||
|
&forge_config,
|
||||||
|
gitdir,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue